private static bool HandleTypeAttribute(HandleClassAttributeArgs args) { var attributeTypeName = args.CustomAttribute.AttributeType.FullName; Globals.Loggers.File.Trace("Handling attribute {0}.", attributeTypeName); bool result = false; if (args.ClassAttributeNames.Contains(attributeTypeName)) { foreach (var methodDef in args.TypeDefinition.Methods) { Globals.Loggers.File.Debug("Handling method {0}.", methodDef.Name); var processor = methodDef.Body.GetILProcessor(); var instructionBuilder = new InstructionBuilders.ClassAttributeBase(processor, args.CustomAttribute); if (instructionBuilder.TryInject()) { Globals.Loggers.Global.Info("Attribute {0} logic injected into {1}.{2} method.", args.CustomAttribute.AttributeType.FullName, args.TypeDefinition.FullName, methodDef.Name); } } args.TypeDefinition.CustomAttributes.Remove(args.CustomAttribute); result = true; } else { Globals.Loggers.File.Trace("Attribute is not inheritor of ClassAttributeBase."); result = false; } return(result); }
private static bool HandleTypeAttribute(HandleClassAttributeArgs args) { var attributeTypeName = args.CustomAttribute.AttributeType.FullName; Globals.Loggers.File.Trace("Handling attribute {0}.", attributeTypeName); bool result = false; if (args.ClassAttributeNames.Contains(attributeTypeName)) { foreach (var methodDef in args.TypeDefinition.Methods) { Globals.Loggers.File.Debug("Handling method {0}.", methodDef.Name); var processor = methodDef.Body.GetILProcessor(); var instructionBuilder = new InstructionBuilders.ClassAttributeBase(processor, args.CustomAttribute); if (instructionBuilder.TryInject()) { Globals.Loggers.Global.Info("Attribute {0} logic injected into {1}.{2} method.", args.CustomAttribute.AttributeType.FullName, args.TypeDefinition.FullName, methodDef.Name); } } args.TypeDefinition.CustomAttributes.Remove(args.CustomAttribute); result = true; } else { Globals.Loggers.File.Trace("Attribute is not inheritor of ClassAttributeBase."); result = false; } return result; }
static void HandleType(HandleTypeArgs args) { Globals.Loggers.File.Trace("Handling {0} type.", args.TypeDefinition.FullName); if (args.TypeDefinition.HasMethods) { if (args.TypeDefinition.HasCustomAttributes) { Globals.Loggers.File.Trace("Handling type custom attributes."); for (var i = 0; i < args.TypeDefinition.CustomAttributes.Count; i++) { var handleArgs = new HandleClassAttributeArgs { ClassAttributeNames = args.ClassAttributeNames, CustomAttribute = args.TypeDefinition.CustomAttributes[i], TypeDefinition = args.TypeDefinition }; if (HandleTypeAttribute(handleArgs)) { i--; } } } else { Globals.Loggers.File.Trace("Type does not has custom attributes."); } Globals.Loggers.File.Trace("Handling methods."); for (var i = 0; i < args.TypeDefinition.Methods.Count; i++) { var handleArgs = new HandleMethodArgs { MethodAttributeNames = args.MethodAttributeNames, MethodDefinition = args.TypeDefinition.Methods[i] }; HandleMethod(handleArgs); } } else { Globals.Loggers.File.Trace("Type does not has methods."); } }
static void HandleType(HandleTypeArgs args) { Globals.Loggers.File.Trace("Handling {0} type.", args.TypeDefinition.FullName); if (args.TypeDefinition.HasMethods) { if (args.TypeDefinition.HasCustomAttributes) { Globals.Loggers.File.Trace("Handling type custom attributes."); for (var i = 0; i < args.TypeDefinition.CustomAttributes.Count; i++ ) { var handleArgs = new HandleClassAttributeArgs { ClassAttributeNames = args.ClassAttributeNames, CustomAttribute = args.TypeDefinition.CustomAttributes[i], TypeDefinition = args.TypeDefinition }; if (HandleTypeAttribute(handleArgs)) { i--; } } } else { Globals.Loggers.File.Trace("Type does not has custom attributes."); } Globals.Loggers.File.Trace("Handling methods."); for (var i = 0; i < args.TypeDefinition.Methods.Count; i++) { var handleArgs = new HandleMethodArgs { MethodAttributeNames = args.MethodAttributeNames, MethodDefinition = args.TypeDefinition.Methods[i] }; HandleMethod(handleArgs); } } else { Globals.Loggers.File.Trace("Type does not has methods."); } }