예제 #1
0
        public static void AcceptVisitor <TResult> (
            this FieldDefinition fieldDefinition,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitFieldDefinition(fieldDefinition)))
            {
                return;
            }

            if (fieldDefinition.HasCustomAttributes)
            {
                fieldDefinition.CustomAttributes.AcceptVisitor(visitor);
            }

            fieldDefinition.FieldType.AcceptVisitor(visitor);
        }
예제 #2
0
        public static void AcceptVisitor <TResult> (
            this InterfaceImplementation interfaceImplementation,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitInterfaceImplementation(interfaceImplementation)))
            {
                return;
            }

            if (interfaceImplementation.HasCustomAttributes)
            {
                interfaceImplementation.CustomAttributes.AcceptVisitor(visitor);
            }

            interfaceImplementation.InterfaceType.AcceptVisitor(visitor);
        }
예제 #3
0
        public static void AcceptVisitor <TResult> (
            this ModuleDefinition moduleDefinition,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitModuleDefinition(moduleDefinition)))
            {
                return;
            }

            if (moduleDefinition.HasCustomAttributes)
            {
                moduleDefinition.CustomAttributes.AcceptVisitor(visitor);
            }

            foreach (var type in moduleDefinition.Types)
            {
                type.AcceptVisitor(visitor);
            }
        }
예제 #4
0
        public static void AcceptVisitor <TResult> (
            this GenericParameter genericParameter,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitGenericParameter(genericParameter)))
            {
                return;
            }

            genericParameter.GetElementType().AcceptVisitor(visitor);

            if (genericParameter.HasConstraints)
            {
                foreach (var constraintType in genericParameter.Constraints)
                {
                    constraintType.AcceptVisitor(visitor);
                }
            }
        }
예제 #5
0
        public static void AcceptVisitor <TResult> (
            this EventDefinition eventDefinition,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitEventDefinition(eventDefinition)))
            {
                return;
            }

            if (eventDefinition.HasCustomAttributes)
            {
                eventDefinition.CustomAttributes.AcceptVisitor(visitor);
            }

            eventDefinition.EventType.AcceptVisitor(visitor);
            eventDefinition.AddMethod?.AcceptVisitor(visitor);
            eventDefinition.RemoveMethod?.AcceptVisitor(visitor);
            eventDefinition.InvokeMethod?.AcceptVisitor(visitor);
        }
예제 #6
0
        public static void AcceptVisitor <TResult> (
            this AssemblyDefinition assemblyDefinition,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitAssemblyDefinition(assemblyDefinition)))
            {
                return;
            }

            if (assemblyDefinition.HasCustomAttributes)
            {
                assemblyDefinition.CustomAttributes.AcceptVisitor(visitor);
            }

            foreach (var module in assemblyDefinition.Modules)
            {
                module.AcceptVisitor(visitor);
            }
        }
예제 #7
0
        public static void AcceptVisitor <TResult> (
            this PropertyReference propertyReference,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitPropertyReference(propertyReference)))
            {
                return;
            }

            var parameters = propertyReference.Parameters;

            if (parameters != null)
            {
                foreach (var parameter in parameters)
                {
                    parameter.AcceptVisitor(visitor);
                }
            }

            propertyReference.PropertyType.AcceptVisitor(visitor);
            propertyReference.DeclaringType.AcceptVisitor(visitor);
        }
예제 #8
0
        static void DynamicAccept <TResult> (
            object target,
            MetadataVisitor <TResult> visitor)
        {
            switch (target)
            {
            case TypeReference typeReference:
                typeReference.AcceptVisitor(visitor);
                break;

            case FieldReference fieldReference:
                fieldReference.AcceptVisitor(visitor);
                break;

            case MethodReference methodReference:
                methodReference.AcceptVisitor(visitor);
                break;

            case VariableDefinition variableDefinition:
                variableDefinition.VariableType.AcceptVisitor(visitor);
                break;
            }
        }
예제 #9
0
        public static void AcceptVisitor <TResult> (
            this CustomAttribute customAttribute,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitCustomAttribute(customAttribute)))
            {
                return;
            }

            customAttribute.AttributeType.AcceptVisitor(visitor);
            customAttribute.Constructor.AcceptVisitor(visitor);

            if (customAttribute.HasConstructorArguments)
            {
                foreach (var argument in customAttribute.ConstructorArguments)
                {
                    argument.AcceptVisitor(visitor);
                }
            }

            if (customAttribute.HasFields)
            {
                foreach (var field in customAttribute.Fields)
                {
                    field.AcceptVisitor(visitor);
                }
            }

            if (customAttribute.HasProperties)
            {
                foreach (var property in customAttribute.Properties)
                {
                    property.AcceptVisitor(visitor);
                }
            }
        }
예제 #10
0
        public static void AcceptVisitor <TResult> (
            this TypeDefinition typeDefinition,
            MetadataVisitor <TResult> visitor)
        {
            if (!visitor.ShouldTraverseInto(visitor.VisitTypeDefinition(typeDefinition)))
            {
                return;
            }

            typeDefinition.BaseType?.AcceptVisitor(visitor);

            if (typeDefinition.HasCustomAttributes)
            {
                typeDefinition.CustomAttributes.AcceptVisitor(visitor);
            }

            if (typeDefinition.HasGenericParameters)
            {
                typeDefinition.GenericParameters.AcceptVisitor(visitor);
            }

            if (typeDefinition.HasInterfaces)
            {
                foreach (var iface in typeDefinition.Interfaces)
                {
                    iface.AcceptVisitor(visitor);
                }
            }

            if (typeDefinition.HasNestedTypes)
            {
                foreach (var nestedType in typeDefinition.NestedTypes)
                {
                    nestedType.AcceptVisitor(visitor);
                }
            }

            if (typeDefinition.HasFields)
            {
                foreach (var field in typeDefinition.Fields)
                {
                    field.AcceptVisitor(visitor);
                }
            }

            if (typeDefinition.HasProperties)
            {
                foreach (var property in typeDefinition.Properties)
                {
                    property.AcceptVisitor(visitor);
                }
            }

            if (typeDefinition.HasEvents)
            {
                foreach (var @event in typeDefinition.Events)
                {
                    @event.AcceptVisitor(visitor);
                }
            }

            if (typeDefinition.HasMethods)
            {
                foreach (var method in typeDefinition.Methods)
                {
                    method.AcceptVisitor(visitor);
                }
            }
        }