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))); }