private bool WeaveMethod( ModuleDefinition module, MethodDefinition method, List <AspectInfo> aspectInfos) { aspectInfos = AspectOrderer.Order(aspectInfos); var aspectInfosWithMethods = aspectInfos .Where(x => !x.SkipProperties || (!method.IsGetter && !method.IsSetter)) .ToList(); var methodWeaver = MethodWeaverFactory.MakeWeaver(module, method, aspectInfosWithMethods); methodWeaver.Weave(); if (methodWeaver.WeaveCounter == 0) { return(false); } if (method.IsGetter || method.IsSetter) { TotalWeavedProperties++; } else { TotalWeavedMethods++; } return(true); }
private bool WeaveMethod( ModuleDefinition module, MethodDefinition method, List <AspectInfo> aspectInfos, TypeReference type) { aspectInfos = AspectOrderer.Order(aspectInfos); aspectInfos.Reverse(); // last aspect has to be weaved in first using (var methodWeaver = new MethodWeaver()) { foreach (var aspectInfo in aspectInfos) { ////var log = string.Format("Weave OnMethodBoundaryAspect '{0}' in method '{1}' from class '{2}'", //// attributeTypeDefinition.Name, //// method.Name, //// method.DeclaringType.FullName); ////LogWarning(log); if (aspectInfo.SkipProperties && (method.IsGetter || method.IsSetter)) { continue; } var aspectTypeDefinition = aspectInfo.AspectAttribute.AttributeType; var overriddenAspectMethods = GetUsedAspectMethods(aspectTypeDefinition); if (overriddenAspectMethods == AspectMethods.None) { continue; } methodWeaver.Weave(method, aspectInfo.AspectAttribute, overriddenAspectMethods, module, type, UnweavedAssembly); } if (methodWeaver.WeaveCounter == 0) { return(false); } } if (method.IsGetter || method.IsSetter) { TotalWeavedPropertyMethods++; } else { TotalWeavedMethods++; } LastWeavedMethod = method; return(true); }