Example #1
0
        private Set GetSetter(ElementBuilder eb, Property propertyClone, string varName)
        {
            Set setter      = eb.BuildSetter();
            If  ifStatement = eb.BuildIf(eb.OpNotEquals("value", varName));

            ifStatement.AddNode(eb.BuildAssignment(varName, "value"));
            ExpressionCollection args = new ExpressionCollection();

            args.Add(new SnippetExpression(CodeRush.StrUtil.AddQuotes(propertyClone.Name)));
            ExpressionCollection arguments = new ExpressionCollection();

            arguments.Add(eb.BuildThisReferenceExpression());
            arguments.Add(eb.BuildObjectCreationExpression("PropertyChangedEventArgs", args));
            if (CodeRush.Language.IsCSharp)
            {
                ifStatement.AddNode(eb.BuildMethodCall("PropertyChanged", arguments, null /* qualifier */));
            }
            else if (CodeRush.Language.IsBasic)
            {
                RaiseEvent raiseEvent = new RaiseEvent(eb.BuildMethodCallExpression("PropertyChanged", arguments));
                ifStatement.AddNode(raiseEvent);
            }
            setter.AddNode(ifStatement);
            return(setter);
        }
Example #2
0
        private Set GetOnPropertyChangedLambdaSetter(ElementBuilder eb, Property propertyClone, string varName)
        {
            Set setter      = eb.BuildSetter();
            If  ifStatement = eb.BuildIf(eb.OpNotEquals("value", varName));

            ifStatement.AddNode(eb.BuildAssignment(varName, "value"));
            ExpressionCollection args   = new ExpressionCollection();
            LambdaExpression     lambda = new LambdaExpression();
            var propAccess = new ElementReferenceExpression(propertyClone.Name);

            lambda.AddNode(propAccess);
            args.Add(lambda);
            var propChangedCall = eb.BuildMethodCall("RaisePropertyChanged", args, null);

            ifStatement.AddNode(propChangedCall);
            setter.AddNode(ifStatement);
            return(setter);
        }
 private Set GetSetter(ElementBuilder eb, Property propertyClone, string varName)
 {
     Set setter = eb.BuildSetter();
     If ifStatement = eb.BuildIf(eb.OpNotEquals("value", varName));
     ifStatement.AddNode(eb.BuildAssignment(varName, "value"));
     ExpressionCollection args = new ExpressionCollection();
     args.Add(new SnippetExpression(CodeRush.StrUtil.AddQuotes(propertyClone.Name)));
     ExpressionCollection arguments = new ExpressionCollection();
     arguments.Add(eb.BuildThisReferenceExpression());
     arguments.Add(eb.BuildObjectCreationExpression("PropertyChangedEventArgs", args));
     if (CodeRush.Language.IsCSharp)
     {
         ifStatement.AddNode(eb.BuildMethodCall("PropertyChanged", arguments, null /* qualifier */));
     }
     else if (CodeRush.Language.IsBasic)
     {
         RaiseEvent raiseEvent = new RaiseEvent(eb.BuildMethodCallExpression("PropertyChanged", arguments));
         ifStatement.AddNode(raiseEvent);
     }
     setter.AddNode(ifStatement);
     return setter;
 }
        private void WrapInTryFunction_Apply(Object sender, ApplyContentEventArgs ea)
        {
            // INITIALIZE
            Class activeClass = CodeRush.Source.ActiveClass;
            Method activeMethod = CodeRush.Source.ActiveMethod;
            var builder = new ElementBuilder();

            Logger.Log("WITF:Builder Built");

            var method = builder.AddMethod(activeClass, "bool", "Try" + activeMethod.Name);
            method.IsStatic = activeMethod.IsStatic;
            Logger.Log("WITF:Method Created");

            // PARAMS
            foreach (Param param in activeMethod.Parameters)
            {
                method.Parameters.Add(new Param(param.ParamType, param.Name));
            }
            Param resultParam = builder.BuildParameter(activeMethod.GetTypeName(), "result", ArgumentDirection.Out);
            method.Parameters.Add(resultParam);
            Logger.Log("WITF:Params Added");

            // METHOD CALL
            var arguments = new List<string>();
            foreach (IParameterElement SourceParam in activeMethod.Parameters)
            {
                arguments.Add(SourceParam.Name);
            }
            Logger.Log("WITF:Arguments Built");

            var methodCall = builder.BuildMethodCall(activeMethod.Name, arguments.ToArray());
            Logger.Log("WITF:Methodcall Added");

            var Try = builder.AddTry(method);
            Try.AddNode(builder.BuildAssignment("result", methodCall));
            Try.AddNode(builder.BuildReturn("true"));
            Logger.Log("WITF:Try Added");

            var ExCatch = builder.AddCatch(method);
            ExCatch.AddNode(builder.BuildAssignment("result", CodeRush.Language.GetNullReferenceExpression()));
            ExCatch.AddNode(builder.BuildReturn("false"));
            Logger.Log("WITF:Catch Added");

            // RENDER METHOD
            activeClass.AddNode(method);
            var Code = CodeRush.CodeMod.GenerateCode(method, false);
            Logger.Log("WITF:Code Generated");

            int LastLine = activeMethod.Range.End.Line;
            Logger.Log(String.Format("WITF:Last Line calculated = {0}", LastLine));

            SourcePoint InsertionPoint = new SourcePoint(LastLine + 1, 1);
            Logger.Log(String.Format("WITF:InsertionPoint Calculated=(Line:{0},Offset:{1})",
                                     InsertionPoint.Line, InsertionPoint.Offset));

            var newMethodRange = CodeRush.Documents.ActiveTextDocument.InsertText(InsertionPoint, Code);
            Logger.Log("WITF:Code Inserted");

            CodeRush.Documents.Format(newMethodRange);
            Logger.Log("WITF:Code Formatted");
        }
 private Set GetOnPropertyChangedLambdaSetter(ElementBuilder eb, Property propertyClone, string varName)
 {
     Set setter = eb.BuildSetter();
     If ifStatement = eb.BuildIf(eb.OpNotEquals("value", varName));
     ifStatement.AddNode(eb.BuildAssignment(varName, "value"));
     ExpressionCollection args = new ExpressionCollection();
     LambdaExpression lambda = new LambdaExpression();
     var propAccess = new ElementReferenceExpression(propertyClone.Name);
     lambda.AddNode(propAccess);
     args.Add(lambda);
     var propChangedCall = eb.BuildMethodCall("RaisePropertyChanged", args, null);
     ifStatement.AddNode(propChangedCall);
     setter.AddNode(ifStatement);
     return setter;
 }