internal TopBindingOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings settings)
            : base(nestedWeaver, aspectDefinition, settings)
        {
            var @params = aspectDefinition.Member.GetParameters();

            argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType);
            argumentsWeaver = new TopBindingOnMethodExecutionArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, settings);
        }
        internal TopBindingOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings settings)
            : base(nestedWeaver, aspectDefinition, settings)
        {
            var @params = aspectDefinition.Member.GetParameters();

            argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType);
            argumentsWeaver = new TopBindingOnMethodExecutionArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, settings);
        }
Example #3
0
        public ILGenerator Weave(ILGenerator ilGenerator)
        {
            aspectAttributeWeaver.Weave();
            aspectArgsMapperWeaver.Weave();
            weaver = aspectExpression.Reduce(settings);

            return(weaver.Weave(ilGenerator));
        }
        internal TopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
            : base(nestedWeaver, aspectDefinition, aspectWeavingSettings)
        {
            var @params = aspectDefinition.Member.GetParameters();

            methodScopeWeavers = new List<IMethodScopeWeaver>();
            argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType).ToArray();
            argumentsWeaver = new TopOnMethodBoundaryArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, aspectWeavingSettings);
        }
        internal TopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IMethodAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
            : base(nestedWeaver, aspectDefinition, aspectWeavingSettings)
        {
            var @params = aspectDefinition.Member.GetParameters();

            methodScopeWeavers = new List <IMethodScopeWeaver>();
            argumentsWeavingSettings.Parameters = @params.ToArray(@param => @param.ParameterType).ToArray();
            argumentsWeaver = new TopOnMethodBoundaryArgumentsWeaver(aspectDefinition.Member, argumentsWeavingSettings, aspectWeavingSettings);
        }
 public Processor(IJanitor janitor, IAspectExtractor aspectExtractor, IAssetsCache cache, IInjectionCollector injectionCollector, IAspectWeaver assectWeaver, IEnumerable <IEffectWeaver> effectWeavers, ILogger logger)
 {
     _aspectExtractor    = aspectExtractor;
     _injectionCollector = injectionCollector;
     _cache         = cache;
     _assectWeaver  = assectWeaver;
     _effectWeavers = effectWeavers;
     _janitor       = janitor;
     _log           = logger;
 }
 public EventInterceptionBindingWeaver(EventInfo @event, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver addMethodScopeWeaver, IAspectWeaver removeMethodScopeWeaver, IAspectWeaver invokeMethodScopeWeaver)
 {
     this.@event = @event;
     this.bindingSettings = bindingSettings;
     this.addMethodScopeWeaver = addMethodScopeWeaver;
     this.aspectWeavingSettings = aspectWeavingSettings;
     this.removeMethodScopeWeaver = removeMethodScopeWeaver;
     this.invokeMethodScopeWeaver = invokeMethodScopeWeaver;
     ResolveParameterTypes();
 }
        protected override FieldInfo WeaveType()
        {
            IAspectWeaver  aspectWeaver   = null;
            IBindingWeaver bindingWeaver  = null;
            var            aspectSettings = GetAspectsWeavingSettings();

            aspectWeaver  = aspectExpression.Reduce(aspectSettings);
            bindingWeaver = new GetPropertyInterceptionBindingWeaver(aspectDefinition.Member, bindingSettings, aspectSettings, aspectWeaver);

            return(bindingWeaver.Weave());
        }
Example #9
0
 public Processor(
     IAspectReader aspectExtractor,
     IInjectionReader injectionCollector,
     IAspectWeaver aspectWeaver,
     IEnumerable <IEffectWeaver> effectWeavers,
     ILogger logger) : base(logger)
 {
     _aspectExtractor    = aspectExtractor;
     _injectionCollector = injectionCollector;
     _aspectWeaver       = aspectWeaver;
     _effectWeavers      = effectWeavers;
 }
Example #10
0
 public AopModuleWeaver(
     IAspectReader aspectExtractor,
     IInjectionReader injectionCollector,
     IAspectWeaver aspectWeaver,
     IEnumerable <IEffectWeaver> effectWeavers,
     BaseModuleWeaver weaver)
 {
     _aspectExtractor    = aspectExtractor;
     _injectionCollector = injectionCollector;
     _aspectWeaver       = aspectWeaver;
     _effectWeavers      = effectWeavers;
     _weaver             = weaver;
 }
        protected virtual FieldInfo WeaveType()
        {
            IAspectWeaver        aspectWeaver  = null;
            IMethodBindingWeaver bindingWeaver = null;
            var aspectType    = aspectDefinition.Aspect.AspectType;
            var aspectSetings = GetAspectsWeavingSettings();

            aspectWeaver = aspectExpression.Reduce(aspectSetings);
            bindingSettings.LocalBuilderRepository = aspectSetings.LocalBuilderRepository;
            bindingWeaver = new OnMethodInterceptionBindingWeaver(aspectType, bindingSettings, aspectWeavingSettings, aspectWeaver);

            return(bindingWeaver.Weave());
        }
 internal MethodInterceptionBindingWeaver(MethodInfo method, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver)
     : base(method, bindingSettings, aspectWeavingSettings, methodScopeWeaver)
 {
 }
 internal NestedOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
     : base(nestedWeaver, aspectDefinition, aspectWeavingSettings)
 {
 }
 internal SetPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver)
     : base(property, bindingSettings, aspectWeavingSettings, setMethodScopeWeaver: methodScopeWeaver)
 {
 }
        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 NestedOnMethodBoundaryAspectWeaver(IAspectWeaver nestedWeaver, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
     : base(nestedWeaver, aspectDefinition, aspectWeavingSettings)
 {
 }
Example #17
0
 internal NestedOnMethodBoundaryAspectWeaver(Type previousAspectArgsType, IAspectWeaver nestedWeaver, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
     : base(nestedWeaver, aspectDefinition, aspectWeavingSettings)
 {
 }
Example #18
0
 internal AbstractTopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
     : base(nestedAspect, aspectDefinition, aspectWeavingSettings)
 {
 }
Example #19
0
 internal OnMethodInterceptionBindingWeaver(Type aspectType, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver)
     : base(bindingSettings, aspectWeavingSettings, methodScopeWeaver)
 {
     localBuilderRepository = bindingSettings.LocalBuilderRepository;
 }
 internal AbstractTopOnMethodBoundaryAspectWeaver(IAspectWeaver nestedAspect, IAspectDefinition aspectDefinition, IAspectWeavingSettings aspectWeavingSettings)
     : base(nestedAspect, aspectDefinition, aspectWeavingSettings)
 {
 }
 internal MethodInterceptionBindingWeaver(MethodInfo method, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver)
     : base(method, bindingSettings, aspectWeavingSettings, methodScopeWeaver)
 {
 }
Example #22
0
 public EventInterceptionBindingWeaver(EventInfo @event, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver addMethodScopeWeaver, IAspectWeaver removeMethodScopeWeaver, IAspectWeaver invokeMethodScopeWeaver)
 {
     this.@event                  = @event;
     this.bindingSettings         = bindingSettings;
     this.addMethodScopeWeaver    = addMethodScopeWeaver;
     this.aspectWeavingSettings   = aspectWeavingSettings;
     this.removeMethodScopeWeaver = removeMethodScopeWeaver;
     this.invokeMethodScopeWeaver = invokeMethodScopeWeaver;
     ResolveParameterTypes();
 }
        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);
                }
            }
        }
 internal FullPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver getMethodScopeWeaver, IAspectWeaver setMethodScopeWeaver)
     : base(property, bindingSettings, aspectWeavingSettings, getMethodScopeWeaver, setMethodScopeWeaver)
 {
 }
 internal SetPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver methodScopeWeaver)
     : base(property, bindingSettings, aspectWeavingSettings, setMethodScopeWeaver: methodScopeWeaver)
 {
 }
 internal FullPropertyInterceptionBindingWeaver(PropertyInfo property, BindingSettings bindingSettings, IAspectWeavingSettings aspectWeavingSettings, IAspectWeaver getMethodScopeWeaver, IAspectWeaver setMethodScopeWeaver)
     : base(property, bindingSettings, aspectWeavingSettings, getMethodScopeWeaver, setMethodScopeWeaver)
 {
 }
 public AspectInterceptor(object target, IAspectWeaver aspectWeaver)
     : base(target)
 {
     _aspectWeaver = aspectWeaver;
 }