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 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; }