public GuardPropertyEqualityTransformation(AspectWeaver aspectWeaver)
            : base(aspectWeaver)
        {
            //Initialize Transformation fields
            var module = AspectInfrastructureTask.Project.Module;
            _assets = module.Cache.GetItem(() => new TransformationAssets(module));

            this.Effects.Add(PostEdgeStandardEffects.GuardPropertyEquality);
            this.Dependencies.Add(
                new AspectDependency(
                    AspectDependencyAction.Order,
                    AspectDependencyPosition.Before,
                    new OrDependencyCondition(
                        new AspectEffectDependencyCondition(StandardEffects.ChangeControlFlow)
                        )
                    )
                );
            this.Dependencies.Add(
                new AspectDependency(
                    AspectDependencyAction.Order,
                    AspectDependencyPosition.After,
                    new OrDependencyCondition(
                        new AspectEffectDependencyCondition(PostEdgeStandardEffects.RaisesPropertyChangedEvent)
                        )
                    )
                );
        }
 public GuardPropertyEqualityMethodBodyWrappingImplementation(IPropertyTransformationContext transformationContext, AspectInfrastructureTask task, MethodBodyTransformationContext context)
     : base(task, context)
 {
     if (transformationContext == null) throw new ArgumentNullException("transformationContext");
     _transformationContext = transformationContext;
     _assets =
         _transformationContext.Module.Cache.GetItem(
             () => new TransformationAssets(_transformationContext.Module));
 }
 public EnhancePropertySetterMethodBodyWrappingImplementation(IPropertyTransformationContext transformationContext, AspectInfrastructureTask task, MethodBodyTransformationContext context)
     : base(task, context)
 {
     if (transformationContext == null) throw new ArgumentNullException("transformationContext");
     _transformationContext = transformationContext;
     _assets =
         _transformationContext.Module.Cache.GetItem(
             () => new TransformationAssets(_transformationContext.Module));
     _stringTypeSignature = _transformationContext.Module.Cache.GetIntrinsic(typeof(string));
 }
 private static bool CheckIfIsLocationBinding(MethodBodyDeclaration methodBody, TransformationAssets assets)
 {
     bool isLocationBinding = methodBody.Method.Name == "SetValue"
                              && methodBody.Method.DeclaringType.IsDerivedFrom(assets.LocationBindingTypeSignature.GetTypeDefinition());
     return isLocationBinding;
 }