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 }
398 {
399 return false;
400 }
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)