private string GetSource(string text) { var methodName = CreateMethodName(text); ElementBuilder eb = new ElementBuilder(); var method = eb.AddMethod(CodeRush.Source.ActiveClass, "void", methodName); method.Visibility = MemberVisibility.Public; var testSection = eb.AddAttributeSection(method); eb.AddAttribute(testSection, "Test"); method.AddSupportElement(testSection); eb.AddMethodCall(method, "Assert.Fail", new[] { "\"Not Implemented\"" }); string source = CodeRush.Language.GenerateElement(testSection) + CodeRush.Language.GenerateElement(method); return source; }
} // GetNewDelayedPropertyDeclaration(elementBuilder, oldProperty) /// <summary> /// Get new property declaration /// </summary> private string GetNewPropertyDeclaration(ElementBuilder elementBuilder, Property oldProperty) { string propName = oldProperty.Name; string typeName = oldProperty.GetTypeName(); string fieldVariableName = CodeRush.Strings.Get("FormatFieldName", propName); Variable fieldVar = elementBuilder.AddVariable(null, typeName, fieldVariableName); fieldVar.IsStatic = oldProperty.IsStatic; fieldVar.Visibility = MemberVisibility.Private; Property newProperty = elementBuilder.AddProperty(null, typeName, propName); newProperty.Visibility = oldProperty.Visibility; newProperty.IsStatic = oldProperty.IsStatic; newProperty.IsVirtual = oldProperty.IsVirtual; newProperty.IsOverride = oldProperty.IsOverride; newProperty.IsExplicitInterfaceMember = oldProperty.IsExplicitInterfaceMember; if (oldProperty.HasGetter) { Get getter = elementBuilder.AddGetter(newProperty); elementBuilder.AddReturn(getter, fieldVariableName); } if (oldProperty.HasSetter) { Set setter = elementBuilder.AddSetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); expressionCollection.Add(new ArgumentDirectionExpression(ArgumentDirection.Ref, new ElementReferenceExpression(fieldVariableName))); expressionCollection.Add(new ElementReferenceExpression("value")); elementBuilder.AddMethodCall(setter, "SetPropertyValue", expressionCollection, null); } // if return(elementBuilder.GenerateCode()); } // GetNewPropertyDeclaration(elementBuilder, oldProperty)
} // refactoringProvider_Apply(sender, ea) /// <summary> /// Get new delayed property declaration /// </summary> private string GetNewDelayedPropertyDeclaration(ElementBuilder elementBuilder, Property oldProperty) { string propName = oldProperty.Name; string typeName = oldProperty.GetTypeName(); Property newProperty = elementBuilder.AddProperty(null, typeName, propName); newProperty.Visibility = oldProperty.Visibility; newProperty.IsStatic = oldProperty.IsStatic; newProperty.IsVirtual = oldProperty.IsVirtual; newProperty.IsOverride = oldProperty.IsOverride; newProperty.IsExplicitInterfaceMember = oldProperty.IsExplicitInterfaceMember; AttributeSection attrSection = elementBuilder.AddAttributeSection(newProperty); elementBuilder.AddAttribute(attrSection, "Delayed"); if (oldProperty.HasGetter) { Get getter = elementBuilder.AddGetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); string methodName = String.Format("GetDelayedPropertyValue<{0}>", typeName); elementBuilder.AddReturn(getter, elementBuilder.BuildMethodCall(methodName, expressionCollection, null)); } if (oldProperty.HasSetter) { Set setter = elementBuilder.AddSetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); expressionCollection.Add(new ElementReferenceExpression("value")); string methodName = String.Format("SetDelayedPropertyValue<{0}>", typeName); elementBuilder.AddMethodCall(setter, methodName, expressionCollection, null); } // if return(elementBuilder.GenerateCode()); } // GetNewDelayedPropertyDeclaration(elementBuilder, oldProperty)
private void AddDestructorMember(ElementBuilder elementBuilder) { Method destructor = elementBuilder.AddMethod(null, null, _ActiveClass.Name); destructor.MethodType = MethodTypeEnum.Destructor; ExpressionCollection arguments = new ExpressionCollection(); arguments.Add(GetBooleanLiteral(false)); elementBuilder.AddMethodCall(destructor, STR_Dispose, arguments, null); }
private static void AddFieldDisposeBlock(ElementBuilder elementBuilder, If parentIfDisposingBlock, BaseVariable field) { If ifFieldIsAssignedBlock = new If(); ifFieldIsAssignedBlock.Expression = CodeRush.Language.GetNullCheck(field.Name).Invert(); elementBuilder.AddMethodCall(ifFieldIsAssignedBlock, field.Name + CodeRush.Language.MemberAccessOperator + STR_Dispose); if (!field.IsReadOnly) elementBuilder.AddAssignment(ifFieldIsAssignedBlock, field.Name, CodeRush.Language.GetNullReferenceExpression()); parentIfDisposingBlock.AddNode(ifFieldIsAssignedBlock); }
private static void AddDisposeImplementer(ElementBuilder elementBuilder) { Method disposeMethod = elementBuilder.AddMethod(null, null, STR_Dispose); // If implicit interface implementation is supported by the language? disposeMethod.Visibility = MemberVisibility.Public; Expression newCollection = new ElementReferenceExpression("IDisposable.Dispose"); disposeMethod.AddImplementsExpression(newCollection); PrimitiveExpression booleanTrue = GetBooleanLiteral(true); ExpressionCollection argumentsCollection = new ExpressionCollection(); argumentsCollection.Add(booleanTrue); elementBuilder.AddMethodCall(disposeMethod, STR_Dispose, argumentsCollection, null); string thisReference = CodeRush.Language.GenerateElement(new ThisReferenceExpression()); elementBuilder.AddMethodCall(disposeMethod, "GC.SuppressFinalize", new string[] { thisReference }); }
} // GetNewDelayedPropertyDeclaration(elementBuilder, oldProperty) /// <summary> /// Get new property declaration /// </summary> private string GetNewPropertyDeclaration(ElementBuilder elementBuilder, Property oldProperty) { string propName = oldProperty.Name; string typeName = oldProperty.GetTypeName(); string fieldVariableName = CodeRush.Strings.Get("FormatFieldName", propName); Variable fieldVar = elementBuilder.AddVariable(null, typeName, fieldVariableName); fieldVar.IsStatic = oldProperty.IsStatic; fieldVar.Visibility = MemberVisibility.Private; Property newProperty = elementBuilder.AddProperty(null, typeName, propName); newProperty.Visibility = oldProperty.Visibility; newProperty.IsStatic = oldProperty.IsStatic; newProperty.IsVirtual = oldProperty.IsVirtual; newProperty.IsOverride = oldProperty.IsOverride; newProperty.IsExplicitInterfaceMember = oldProperty.IsExplicitInterfaceMember; if (oldProperty.HasGetter) { Get getter = elementBuilder.AddGetter(newProperty); elementBuilder.AddReturn(getter, fieldVariableName); } if (oldProperty.HasSetter) { Set setter = elementBuilder.AddSetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); expressionCollection.Add(new ArgumentDirectionExpression(ArgumentDirection.Ref, new ElementReferenceExpression(fieldVariableName))); expressionCollection.Add(new ElementReferenceExpression("value")); elementBuilder.AddMethodCall(setter, "SetPropertyValue", expressionCollection, null); } // if return elementBuilder.GenerateCode(); } // GetNewPropertyDeclaration(elementBuilder, oldProperty)
} // refactoringProvider_Apply(sender, ea) /// <summary> /// Get new delayed property declaration /// </summary> private string GetNewDelayedPropertyDeclaration(ElementBuilder elementBuilder, Property oldProperty) { string propName = oldProperty.Name; string typeName = oldProperty.GetTypeName(); Property newProperty = elementBuilder.AddProperty(null, typeName, propName); newProperty.Visibility = oldProperty.Visibility; newProperty.IsStatic = oldProperty.IsStatic; newProperty.IsVirtual = oldProperty.IsVirtual; newProperty.IsOverride = oldProperty.IsOverride; newProperty.IsExplicitInterfaceMember = oldProperty.IsExplicitInterfaceMember; AttributeSection attrSection = elementBuilder.AddAttributeSection(newProperty); elementBuilder.AddAttribute(attrSection, "Delayed"); if (oldProperty.HasGetter) { Get getter = elementBuilder.AddGetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); string methodName = String.Format("GetDelayedPropertyValue<{0}>", typeName); elementBuilder.AddReturn(getter, elementBuilder.BuildMethodCall(methodName, expressionCollection, null)); } if (oldProperty.HasSetter) { Set setter = elementBuilder.AddSetter(newProperty); ExpressionCollection expressionCollection = new ExpressionCollection(); expressionCollection.Add(new PrimitiveExpression(String.Format("\"{0}\"", propName))); expressionCollection.Add(new ElementReferenceExpression("value")); string methodName = String.Format("SetDelayedPropertyValue<{0}>", typeName); elementBuilder.AddMethodCall(setter, methodName, expressionCollection, null); } // if return elementBuilder.GenerateCode(); } // GetNewDelayedPropertyDeclaration(elementBuilder, oldProperty)