2 using System.Collections;
3 using System.Collections.Generic;
7 using Mono.Linker.Steps;
13 namespace Mono.Tuner {
15 public abstract class RemoveAttributesBase : BaseSubStep {
17 public override SubStepTargets Targets {
19 return SubStepTargets.Assembly
21 | SubStepTargets.Field
22 | SubStepTargets.Method
23 | SubStepTargets.Property
24 | SubStepTargets.Event;
28 public override bool IsActiveFor (AssemblyDefinition assembly)
30 return Annotations.GetAction (assembly) == AssemblyAction.Link;
33 public override void ProcessAssembly (AssemblyDefinition assembly)
35 ProcessAttributeProvider (assembly);
36 ProcessAttributeProvider (assembly.MainModule);
39 public override void ProcessType (TypeDefinition type)
41 ProcessAttributeProvider (type);
43 if (type.HasGenericParameters)
44 ProcessAttributeProviderCollection (type.GenericParameters);
47 void ProcessAttributeProviderCollection (IList list)
49 for (int i = 0; i < list.Count; i++)
50 ProcessAttributeProvider ((ICustomAttributeProvider) list [i]);
53 public override void ProcessField (FieldDefinition field)
55 ProcessAttributeProvider (field);
58 public override void ProcessMethod (MethodDefinition method)
60 ProcessMethodAttributeProvider (method);
63 void ProcessMethodAttributeProvider (MethodDefinition method)
65 ProcessAttributeProvider (method);
66 ProcessAttributeProvider (method.MethodReturnType);
68 if (method.HasParameters)
69 ProcessAttributeProviderCollection (method.Parameters);
71 if (method.HasGenericParameters)
72 ProcessAttributeProviderCollection (method.GenericParameters);
75 public override void ProcessProperty (PropertyDefinition property)
77 ProcessAttributeProvider (property);
80 public override void ProcessEvent (EventDefinition @event)
82 ProcessAttributeProvider (@event);
85 void ProcessAttributeProvider (ICustomAttributeProvider provider)
87 if (!provider.HasCustomAttributes)
90 for (int i = 0; i < provider.CustomAttributes.Count; i++) {
91 if (!IsRemovedAttribute (provider.CustomAttributes [i]))
94 provider.CustomAttributes.RemoveAt (i--);
98 protected abstract bool IsRemovedAttribute (CustomAttribute attribute);