Exemplo n.º 1
0
        void VisitMember(TypeDefinitionUsedVisitor visitor, IMember member, AnalyzerContext context, bool scanBodies = false)
        {
            member.DeclaringType.AcceptVisitor(visitor);
            switch (member)
            {
            case IField field:
                field.ReturnType.AcceptVisitor(visitor);

                if (!visitor.Found)
                {
                    ScanAttributes(visitor, field.GetAttributes());
                }
                break;

            case IMethod method:
                foreach (var p in method.Parameters)
                {
                    p.Type.AcceptVisitor(visitor);
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, p.GetAttributes());
                    }
                }

                if (!visitor.Found)
                {
                    ScanAttributes(visitor, method.GetAttributes());
                }

                method.ReturnType.AcceptVisitor(visitor);

                if (!visitor.Found)
                {
                    ScanAttributes(visitor, method.GetReturnTypeAttributes());
                }

                foreach (var t in method.TypeArguments)
                {
                    t.AcceptVisitor(visitor);
                }

                foreach (var t in method.TypeParameters)
                {
                    t.AcceptVisitor(visitor);

                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, t.GetAttributes());
                    }
                }

                if (scanBodies && !visitor.Found)
                {
                    ScanMethodBody(visitor, method, context.GetMethodBody(method), context);
                }

                break;

            case IProperty property:
                foreach (var p in property.Parameters)
                {
                    p.Type.AcceptVisitor(visitor);
                }

                if (!visitor.Found)
                {
                    ScanAttributes(visitor, property.GetAttributes());
                }

                property.ReturnType.AcceptVisitor(visitor);

                if (scanBodies && !visitor.Found && property.CanGet)
                {
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, property.Getter.GetAttributes());
                    }
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, property.Getter.GetReturnTypeAttributes());
                    }

                    ScanMethodBody(visitor, property.Getter, context.GetMethodBody(property.Getter), context);
                }

                if (scanBodies && !visitor.Found && property.CanSet)
                {
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, property.Setter.GetAttributes());
                    }
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, property.Setter.GetReturnTypeAttributes());
                    }

                    ScanMethodBody(visitor, property.Setter, context.GetMethodBody(property.Setter), context);
                }

                break;

            case IEvent @event:
                @event.ReturnType.AcceptVisitor(visitor);

                if (scanBodies && !visitor.Found && @event.CanAdd)
                {
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.AddAccessor.GetAttributes());
                    }
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.AddAccessor.GetReturnTypeAttributes());
                    }

                    ScanMethodBody(visitor, @event.AddAccessor, context.GetMethodBody(@event.AddAccessor), context);
                }

                if (scanBodies && !visitor.Found && @event.CanRemove)
                {
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.RemoveAccessor.GetAttributes());
                    }
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.RemoveAccessor.GetReturnTypeAttributes());
                    }

                    ScanMethodBody(visitor, @event.RemoveAccessor, context.GetMethodBody(@event.RemoveAccessor), context);
                }

                if (scanBodies && !visitor.Found && @event.CanInvoke)
                {
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.InvokeAccessor.GetAttributes());
                    }
                    if (!visitor.Found)
                    {
                        ScanAttributes(visitor, @event.InvokeAccessor.GetReturnTypeAttributes());
                    }

                    ScanMethodBody(visitor, @event.InvokeAccessor, context.GetMethodBody(@event.InvokeAccessor), context);
                }

                break;
            }
        }
 bool IsUsedInMethod(ITypeDefinition analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
 {
     return(ScanMethodBody(analyzedEntity, method, context.GetMethodBody(method)));
 }