Beispiel #1
0
 public static Stack<KeyValuePair<ICustomAttributeContext, CustomAttribute[]>> GetCustomAttributesFromContext(ICustomAttributeContext context, string ns, string name, IAssemblyResolver resolver)
 {
     Stack<KeyValuePair<ICustomAttributeContext, CustomAttribute[]>> stack = new Stack<KeyValuePair<ICustomAttributeContext, CustomAttribute[]>>();
     FillCustomAttributesFromContext(context, ns, name, stack, resolver);
     return stack;
 }
Beispiel #2
0
        private static void FillCustomAttributesFromContext(ICustomAttributeContext context, string ns, string name, Stack<KeyValuePair<ICustomAttributeContext, CustomAttribute[]>> stack, IAssemblyResolver resolver)
        {
            CustomAttribute[] attributes = GetCustomAttributes(context, ns, name, true);
            if (attributes.Length != 0)
            {
                stack.Push(new KeyValuePair<ICustomAttributeContext, CustomAttribute[]>(context, attributes));
            }

            ParameterDefinition parameterDefinition = context as ParameterDefinition;
            if (parameterDefinition != null)
            {
                FillCustomAttributesFromContext(ReferenceResolver.ResolveMethodReference(parameterDefinition.Method, resolver), ns, name, stack, resolver);
                return;
            }

            MethodDefinition methodDefinition = context as MethodDefinition;
            if (methodDefinition != null)
            {
                FillCustomAttributesFromContext(ReferenceResolver.ResolveTypeReference(methodDefinition.DeclaringType, resolver), ns, name, stack, resolver);
                return;
            }

            TypeDefinition typeDefinition = context as TypeDefinition;
            if (typeDefinition != null)
            {
                FillCustomAttributesFromContext(typeDefinition.Module, ns, name, stack, resolver);
                return;
            }

            ModuleDefinition moduleDefinition = context as ModuleDefinition;
            if (moduleDefinition != null)
            {
                FillCustomAttributesFromContext(moduleDefinition.Assembly, ns, name, stack, resolver);
                return;
            }

            Debug.Assert(context is AssemblyDefinition);
        }