/src/LinFu.AOP/BaseReflectionVisitor.cs

http://github.com/philiplaureano/LinFu · C# · 216 lines · 159 code · 48 blank · 9 comment · 0 complexity · eb8ec16952587c239006c4dd896b4935 MD5 · raw file

  1. using System.Collections.Generic;
  2. using Mono.Cecil;
  3. using Mono.Cecil.Rocks;
  4. using LinFu.AOP.Interfaces;
  5. #pragma warning disable 1591
  6. namespace LinFu.AOP.Cecil
  7. {
  8. public abstract class BaseReflectionVisitor
  9. {
  10. public virtual void TerminateAssemblyDefinition(AssemblyDefinition asm)
  11. {
  12. }
  13. public virtual void VisitAssemblyDefinition(AssemblyDefinition asm)
  14. {
  15. VisitCustomAttributeCollection(asm.CustomAttributes);
  16. VisitModuleDefinitionCollection(asm.Modules);
  17. TerminateAssemblyDefinition(asm);
  18. }
  19. public virtual void VisitAssemblyNameReferenceCollection(IEnumerable<AssemblyNameReference> names)
  20. {
  21. foreach (AssemblyNameReference nameRef in names) VisitAssemblyNameReference(nameRef);
  22. }
  23. public virtual void VisitAssemblyNameReference(AssemblyNameReference nameRef)
  24. {
  25. }
  26. public virtual void VisitModuleDefinitionCollection(IEnumerable<ModuleDefinition> modules)
  27. {
  28. foreach (ModuleDefinition module in modules) VisitModuleDefinition(module);
  29. }
  30. public virtual void VisitModuleReferenceCollection(IEnumerable<ModuleReference> modules)
  31. {
  32. foreach (ModuleReference module in modules) VisitModuleReference(module);
  33. }
  34. public virtual void VisitTypeDefinition(TypeDefinition type)
  35. {
  36. // Visit the interfaces
  37. VisitInterfaceCollection(type.Interfaces);
  38. // Visit the constructors
  39. VisitConstructorCollection(type.GetConstructors());
  40. // Visit the fields
  41. VisitFieldDefinitionCollection(type.Fields);
  42. // Visit the methods
  43. VisitMethodDefinitionCollection(type.Methods);
  44. // Visit the properties
  45. VisitPropertyDefinitionCollection(type.Properties);
  46. // Visit the events
  47. VisitEventDefinitionCollection(type.Events);
  48. }
  49. public virtual void VisitConstructorCollection(IEnumerable<MethodDefinition> ctors)
  50. {
  51. foreach (MethodDefinition ctor in ctors) VisitConstructor(ctor);
  52. }
  53. public virtual void VisitCustomAttributeCollection(IEnumerable<CustomAttribute> customAttrs)
  54. {
  55. foreach (CustomAttribute ca in customAttrs) VisitCustomAttribute(ca);
  56. }
  57. private void VisitCustomAttribute(CustomAttribute ca)
  58. {
  59. throw new System.NotImplementedException();
  60. }
  61. public virtual void VisitEventDefinitionCollection(IEnumerable<EventDefinition> events)
  62. {
  63. foreach (EventDefinition eventDef in events) VisitEventDefinition(eventDef);
  64. }
  65. public virtual void VisitFieldDefinitionCollection(IEnumerable<FieldDefinition> fields)
  66. {
  67. foreach (FieldDefinition field in fields) VisitFieldDefinition(field);
  68. }
  69. public virtual void VisitGenericParameterCollection(IEnumerable<GenericParameter> genparams)
  70. {
  71. foreach (GenericParameter param in genparams) VisitGenericParameter(param);
  72. }
  73. public virtual void VisitInterfaceCollection(IEnumerable<TypeReference> interfaces)
  74. {
  75. foreach (TypeReference interfaceType in interfaces) VisitInterface(interfaceType);
  76. }
  77. public virtual void VisitMemberReferenceCollection(IEnumerable<MemberReference> members)
  78. {
  79. foreach (MemberReference memberRef in members) VisitMemberReference(memberRef);
  80. }
  81. public virtual void VisitMethodDefinition(MethodDefinition method)
  82. {
  83. // Visit the parameters
  84. VisitParameterDefinitionCollection(method.Parameters);
  85. // Visit the generic parameters
  86. VisitGenericParameterCollection(method.GenericParameters);
  87. // Visit the method overrides
  88. VisitOverrideCollection(method.Overrides);
  89. }
  90. public virtual void VisitMethodDefinitionCollection(IEnumerable<MethodDefinition> methods)
  91. {
  92. foreach (MethodDefinition method in methods)
  93. VisitMethodDefinition(method);
  94. }
  95. public virtual void VisitOverrideCollection(IEnumerable<MethodReference> overrides)
  96. {
  97. foreach (MethodReference method in overrides)
  98. VisitOverride(method);
  99. }
  100. public virtual void VisitParameterDefinitionCollection(IEnumerable<ParameterDefinition> parameters)
  101. {
  102. foreach (ParameterDefinition param in parameters)
  103. VisitParameterDefinition(param);
  104. }
  105. public virtual void VisitPropertyDefinitionCollection(IEnumerable<PropertyDefinition> properties)
  106. {
  107. foreach (PropertyDefinition property in properties)
  108. VisitPropertyDefinition(property);
  109. }
  110. public virtual void VisitTypeDefinitionCollection(IEnumerable<TypeDefinition> types)
  111. {
  112. foreach (TypeDefinition typeDef in types)
  113. VisitTypeDefinition(typeDef);
  114. }
  115. public virtual void VisitTypeReferenceCollection(IEnumerable<TypeReference> refs)
  116. {
  117. foreach (TypeReference type in refs)
  118. VisitTypeReference(type);
  119. }
  120. public virtual void TerminateModuleDefinition(ModuleDefinition module)
  121. {
  122. VisitTypeDefinitionCollection(module.Types);
  123. }
  124. public virtual void VisitConstructor(MethodDefinition ctor)
  125. {
  126. }
  127. public virtual void VisitModuleDefinition(ModuleDefinition module)
  128. {
  129. VisitCustomAttributeCollection(module.CustomAttributes);
  130. VisitAssemblyNameReferenceCollection(module.AssemblyReferences);
  131. VisitModuleReferenceCollection(module.ModuleReferences);
  132. VisitMemberReferenceCollection(module.GetMemberReferences());
  133. VisitTypeReferenceCollection(module.GetTypeReferences());
  134. TerminateModuleDefinition(module);
  135. }
  136. public virtual void VisitPropertyDefinition(PropertyDefinition property)
  137. {
  138. }
  139. public virtual void VisitModuleReference(ModuleReference module)
  140. {
  141. }
  142. public virtual void VisitEventDefinition(EventDefinition eventDef)
  143. {
  144. }
  145. public virtual void VisitFieldDefinition(FieldDefinition field)
  146. {
  147. }
  148. public virtual void VisitGenericParameter(GenericParameter genericParameter)
  149. {
  150. }
  151. public virtual void VisitInterface(TypeReference interfaceType)
  152. {
  153. }
  154. public virtual void VisitMemberReference(MemberReference memberRef)
  155. {
  156. }
  157. public virtual void VisitOverride(MethodReference method)
  158. {
  159. }
  160. public virtual void VisitParameterDefinition(ParameterDefinition parameterDefinition)
  161. {
  162. }
  163. public virtual void VisitTypeReference(TypeReference type)
  164. {
  165. }
  166. }
  167. }
  168. #pragma warning restore 1591