Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ FilterCustomAttributeRecord()

static bool System.Reflection.CustomAttribute.FilterCustomAttributeRecord ( MetadataToken caCtorToken,
in MetadataImport scope,
RuntimeModule decoratedModule,
MetadataToken decoratedToken,
RuntimeType attributeFilterType,
bool mustBeInheritable,
ref RuntimeType::ListBuilder< object > derivedAttributes,
out RuntimeType attributeType,
out IRuntimeMethodInfo ctorWithParameters,
out bool isVarArg )
inlinestaticprivate

Definition at line 388 of file CustomAttribute.cs.

389 {
390 ctorWithParameters = null;
391 isVarArg = false;
392 attributeType = decoratedModule.ResolveType(scope.GetParentToken(caCtorToken), null, null) as RuntimeType;
393 if (!attributeFilterType.IsAssignableFrom(attributeType))
394 {
395 return false;
396 }
397 if (!AttributeUsageCheck(attributeType, mustBeInheritable, ref derivedAttributes))
398 {
399 return false;
400 }
401 if ((attributeType.Attributes & TypeAttributes.WindowsRuntime) == TypeAttributes.WindowsRuntime)
402 {
403 return false;
404 }
405 ConstArray methodSignature = scope.GetMethodSignature(caCtorToken);
406 isVarArg = (methodSignature[0] & 5) != 0;
407 if (methodSignature[1] != 0)
408 {
409 if (attributeType.IsGenericType)
410 {
411 ctorWithParameters = decoratedModule.ResolveMethod(caCtorToken, attributeType.GenericTypeArguments, null).MethodHandle.GetMethodInfo();
412 }
413 else
414 {
415 ctorWithParameters = new ModuleHandle(decoratedModule).ResolveMethodHandle(caCtorToken).GetMethodInfo();
416 }
417 }
418 MetadataToken metadataToken = default(MetadataToken);
419 if (decoratedToken.IsParamDef)
420 {
421 metadataToken = new MetadataToken(scope.GetParentToken(decoratedToken));
422 metadataToken = new MetadataToken(scope.GetParentToken(metadataToken));
423 }
424 else if (decoratedToken.IsMethodDef || decoratedToken.IsProperty || decoratedToken.IsEvent || decoratedToken.IsFieldDef)
425 {
426 metadataToken = new MetadataToken(scope.GetParentToken(decoratedToken));
427 }
428 else if (decoratedToken.IsTypeDef)
429 {
430 metadataToken = decoratedToken;
431 }
432 else if (decoratedToken.IsGenericPar)
433 {
434 metadataToken = new MetadataToken(scope.GetParentToken(decoratedToken));
435 if (metadataToken.IsMethodDef)
436 {
437 metadataToken = new MetadataToken(scope.GetParentToken(metadataToken));
438 }
439 }
440 RuntimeTypeHandle rth = (metadataToken.IsTypeDef ? decoratedModule.ModuleHandle.ResolveTypeHandle(metadataToken) : default(RuntimeTypeHandle));
441 RuntimeTypeHandle rth2 = attributeType.TypeHandle;
442 bool result = RuntimeMethodHandle.IsCAVisibleFromDecoratedType(new QCallTypeHandle(ref rth2), (ctorWithParameters != null) ? ctorWithParameters.Value : RuntimeMethodHandleInternal.EmptyHandle, new QCallTypeHandle(ref rth), new QCallModule(ref decoratedModule)) != Interop.BOOL.FALSE;
443 GC.KeepAlive(ctorWithParameters);
444 return result;
445 }
static bool AttributeUsageCheck(RuntimeType attributeType, bool mustBeInheritable, ref RuntimeType.ListBuilder< object > derivedAttributes)

References System.RuntimeMethodHandleInternal.EmptyHandle, System.RuntimeMethodHandle.GetMethodInfo(), System.RuntimeType.IsAssignableFrom(), System.RuntimeMethodHandle.IsCAVisibleFromDecoratedType(), System.Reflection.MetadataToken.IsEvent, System.Reflection.MetadataToken.IsFieldDef, System.Reflection.MetadataToken.IsGenericPar, System.Reflection.MetadataToken.IsMethodDef, System.Reflection.MetadataToken.IsParamDef, System.Reflection.MetadataToken.IsProperty, System.Reflection.MetadataToken.IsTypeDef, System.GC.KeepAlive(), System.Reflection.MethodBase.MethodHandle, System.Reflection.Module.ModuleHandle, System.Reflection.RuntimeModule.ResolveMethod(), System.ModuleHandle.ResolveMethodHandle(), System.Reflection.RuntimeModule.ResolveType(), and System.ModuleHandle.ResolveTypeHandle().

Referenced by System.Reflection.CustomAttribute.AddCustomAttributes(), and System.Reflection.CustomAttribute.IsCustomAttributeDefined().