internal NestedMethodInvokerAspectWeaver(MethodInfo method, Type topAspectInScopeArgType, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentsWeavingSettings) : base(method, aspectWeavingSettings.WeavingSettings) { this.topAspectInScopeArgType = topAspectInScopeArgType; this.aspectWeavingSettings = aspectWeavingSettings; byRefArgumentStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; argumentsWeaver = new NestedMethodInvokerArgumentsWeaver(method, topAspectInScopeArgType, aspectWeavingSettings, argumentsWeavingSettings); }
internal NestedMethodInvokerAspectWeaver(MethodInfo method, Type topAspectInScopeArgType, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentsWeavingSettings) : base(method, aspectWeavingSettings.WeavingSettings) { this.topAspectInScopeArgType = topAspectInScopeArgType; this.aspectWeavingSettings = aspectWeavingSettings; byRefArgumentStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; argumentsWeaver = new NestedMethodInvokerArgumentsWeaver(method, topAspectInScopeArgType, aspectWeavingSettings, argumentsWeavingSettings); }
internal MethodInvokerAspectWeaver(Type topAspectInScopeArgType, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentsWeavingSettings) : base(aspectDefinition.Member, aspectWeavingSettings.WeavingSettings) { this.topAspectInScopeArgType = topAspectInScopeArgType; this.argumentsWeavingSettings = argumentsWeavingSettings; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; byRefArgumentStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; argumentsWeaver = new MethodInvokerArgumentsWeaver(aspectDefinition.Member, topAspectInScopeArgType, aspectWeavingSettings, argumentsWeavingSettings, byRefArgumentStoreWeaver); }
internal MethodInvokerAspectWeaver(Type topAspectInScopeArgType, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentsWeavingSettings) : base(aspectDefinition.Member, aspectWeavingSettings.WeavingSettings) { this.topAspectInScopeArgType = topAspectInScopeArgType; this.argumentsWeavingSettings = argumentsWeavingSettings; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; byRefArgumentStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; argumentsWeaver = new MethodInvokerArgumentsWeaver(aspectDefinition.Member, topAspectInScopeArgType, aspectWeavingSettings, argumentsWeavingSettings, byRefArgumentStoreWeaver); }
internal NestedMethodInvokerAspectWeaver(Type previousAspectArgType, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentsWeavingSettings) : base(aspectWeavingSettings.WeavingSettings) { this.previousAspectArgType = previousAspectArgType; this.aspectWeavingSettings = aspectWeavingSettings; this.argumentsWeavingSettings = argumentsWeavingSettings; byRefArgumentStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; argumentsWeaver = new NestedMethodInvokerArgumentsWeaver(previousAspectArgType, aspectWeavingSettings, argumentsWeavingSettings); }
internal MethodDecoratorScopeWeaver(MethodInfo method, IAspectWeavingSettings aspectWeavingSettings) : base(method, aspectWeavingSettings.WeavingSettings) { Type aspectArgumentContract = null; var localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; this.method = method; aspectArgumentContract = method.ToAspectArgumentContract(); byRefArgumentsStoreWeaver = new MethodDecoratorByRefArgumentsStoreWeaver(aspectArgumentContract, method, localBuilderRepository); argumentsWeaver = new MethodDecoratorArgumentsWeaver(method, byRefArgumentsStoreWeaver); }
internal MethodDecoratorScopeWeaver(MethodInfo method, IAspectWeavingSettings aspectWeavingSettings) : base(method, aspectWeavingSettings.WeavingSettings) { Type aspectArgumentContract = null; var localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; this.method = method; aspectArgumentContract = method.ToAspectArgumentContract(); byRefArgumentsStoreWeaver = new MethodDecoratorByRefArgumentsStoreWeaver(aspectArgumentContract, method, localBuilderRepository); argumentsWeaver = new MethodDecoratorArgumentsWeaver(method, byRefArgumentsStoreWeaver); }
internal MethodDecoratorArgumentsWeaver(MethodInfo method, IByRefArgumentsStoreWeaver byRefArgumentsStoreWeaver) { this.method = method; this.byRefArgumentsStoreWeaver = byRefArgumentsStoreWeaver; }
internal AbstractOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(aspectDefinition, aspectWeavingSettings) { IMethodScopeWeaver entryWeaver = null; IMethodScopeWeaver catchWeaver = null; Action <ILGenerator> storeArgsAction = null; IAdviceExpression selectedExpression = null; IMethodScopeWeaver storeArgsArgsWeaver = null; var finallyWeavers = new List <IMethodScopeWeaver>(); var adviceWeavingSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSetings); ArgumentType = argumentsWeavingSetings.ArgumentType; byRefArgumentsStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; storeArgsAction = byRefArgumentsStoreWeaver.StoreArgsIfNeeded; storeArgsArgsWeaver = storeArgsAction.ToMethodScopeWeaver(); tryWeavers = new List <IMethodScopeWeaver>() { nestedAspect }; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; if (adviceDiscoveryVistor.HasOnMethodEntryAdvice) { selectedExpression = ResolveOnMethodEntryAdvice(); entryWeaver = selectedExpression.Reduce(adviceWeavingSettings); } if (adviceDiscoveryVistor.HasOnMethodSuccessAdvice) { selectedExpression = ResolveOnMethodSuccessAdvice(); tryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } if (argumentsWeavingSetings.IsFunction) { OnFunctionWeavingDetected(); } if (adviceDiscoveryVistor.HasFinallyAdvice) { selectedExpression = ResolveFinallyAdvice(); finallyWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); finallyWeavers.Add(storeArgsArgsWeaver); if (adviceDiscoveryVistor.HasOnMethodExceptionAdvice) { var aspectMember = aspectRepository.GetAspectFieldByType(aspectDefinition.Aspect.AspectType); var settings = new TryCatchFinallySettings(ArgumentType, aspectMember, localBuilderRepository); selectedExpression = ResolveOnMethodExceptionAdvice(); catchWeaver = selectedExpression.Reduce(adviceWeavingSettings); weaver = new TryCatchFinallyAspectWeaver(settings, entryWeaver, tryWeavers, catchWeaver, finallyWeavers, returnValueWeaver); } else { weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeaver, tryWeavers, finallyWeavers, returnValueWeaver); } } else { var weavers = new List <IMethodScopeWeaver> { entryWeaver }; if (!byRefArgumentsStoreWeaver.ContainsByRefParams) { weavers.AddRange(tryWeavers); if (returnValueWeaver.IsNotNull()) { weavers.Add(returnValueWeaver); } weaver = new MethodScopeWeaversQueue(weavers); } else { finallyWeavers.Add(storeArgsArgsWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeaver, weavers, finallyWeavers, returnValueWeaver); } } }
internal MethodDecoratorArgumentsWeaver(MethodInfo method, IByRefArgumentsStoreWeaver byRefArgumentsStoreWeaver) { this.method = method; this.byRefArgumentsStoreWeaver = byRefArgumentsStoreWeaver; }
internal MethodInvokerArgumentsWeaver(MethodInfo method, Type previousAspectArgType, IAspectWeavingSettings aspectWeavingSettings, IArgumentsWeavingSettings argumentWeavingSettings, IByRefArgumentsStoreWeaver byRefArgumentsStoreWeaver) : base(method, argumentWeavingSettings, aspectWeavingSettings) { this.previousAspectArgType = previousAspectArgType; this.byRefArgumentStoreWeaver = byRefArgumentsStoreWeaver; }
internal AbstractOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings) : base(aspectDefinition, aspectWeavingSettings) { IAdviceExpression selectedExpression = null; var catchWeavers = new List<IMethodScopeWeaver>(); var entryWeavers = new List<IMethodScopeWeaver>(); var finallyWeavers = new List<IMethodScopeWeaver>(); Action<ILGenerator> restoreArgsIfNeededAction = null; IMethodScopeWeaver restoreArgsIfNeededScopeWeaver = null; var adviceWeavingSettings = new AdviceWeavingSettings(aspectWeavingSettings, argumentsWeavingSettings); ArgumentType = argumentsWeavingSettings.ArgumentType; tryWeavers = new List<IMethodScopeWeaver>() { nestedAspect }; localBuilderRepository = aspectWeavingSettings.LocalBuilderRepository; byRefArgumentsStoreWeaver = aspectWeavingSettings.ByRefArgumentsStoreWeaver; restoreArgsIfNeededAction = byRefArgumentsStoreWeaver.RestoreArgsIfNeeded; restoreArgsIfNeededScopeWeaver = restoreArgsIfNeededAction.ToMethodScopeWeaver(); if (adviceDiscoveryVistor.HasOnMethodEntryAdvice) { selectedExpression = ResolveOnMethodEntryAdvice(); entryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } AddEntryScopeWeavers(entryWeavers); if (adviceDiscoveryVistor.HasOnMethodSuccessAdvice) { selectedExpression = ResolveOnMethodSuccessAdvice(); tryWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); } if (argumentsWeavingSettings.IsFunction()) { OnFunctionWeavingDetected(); } if (adviceDiscoveryVistor.HasFinallyAdvice) { selectedExpression = ResolveFinallyAdvice(); finallyWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); AddFinallyScopeWeavers(finallyWeavers); if (adviceDiscoveryVistor.HasOnMethodExceptionAdvice) { var aspectMember = aspectRepository.GetAspectFieldByType(aspectDefinition.Aspect.AspectType); var settings = new TryCatchFinallySettings(ArgumentType, localBuilderRepository); selectedExpression = ResolveOnMethodExceptionAdvice(); catchWeavers.Add(restoreArgsIfNeededScopeWeaver); catchWeavers.Add(selectedExpression.Reduce(adviceWeavingSettings)); weaver = new TryCatchFinallyAspectWeaver(settings, entryWeavers, tryWeavers, catchWeavers, finallyWeavers, returnValueWeaver); } else { finallyWeavers.Insert(0, restoreArgsIfNeededScopeWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeavers, tryWeavers, finallyWeavers, returnValueWeaver); } } else { if (!byRefArgumentsStoreWeaver.ContainsByRefParams) { var weavers = entryWeavers; weavers.AddRange(tryWeavers); if (returnValueWeaver.IsNotNull()) { weavers.Add(returnValueWeaver); } weaver = new MethodScopeWeaversQueue(weavers); } else { AddFinallyScopeWeavers(finallyWeavers); finallyWeavers.Insert(0, restoreArgsIfNeededScopeWeaver); weaver = new OnMethodBoundaryTryFinallyAspectWeaver(entryWeavers, tryWeavers, finallyWeavers, returnValueWeaver); } } }