public void Issue_88_generated_class_results_in_uncompilable_code() { var csharpCode = @"using RoslynDom.Common; namespace Company.Core { public class className { } }"; IRoot root = RDom.CSharp.Load(csharpCode); var firstClass = root.RootClasses.First(); firstClass.Name = "Product"; var backerField = new RDomField(name: "mRevisions", returnTypeName: "StringField"); firstClass.AddOrMoveMember(backerField); var property = new RDomProperty(name: "Revisions", propertyTypeName: "string", declaredAccessModifier: AccessModifier.Public, isVirtual: true); firstClass.AddOrMoveMember(property); var formatted = RDom.CSharp.GetFormattedSourceCode(root); var expected = "using RoslynDom.Common;\r\nnamespace Company.Core\r\n{\r\n public class Product\r\n {\r\n private StringField mRevisions;\r\n public virtual string Revisions { private get; private set; }\r\n }\r\n}"; Assert.AreEqual(expected, formatted); }
private static void FixWhitespace(RDomField field, IProperty prop) { // TODO: This is rather detailed because of featuresnot yet in the whitespace system var leading = prop.Whitespace2Set[LanguageElement.Public].LeadingWhitespace; field.Whitespace2Set[LanguageElement.Private] = new Whitespace2(LanguageElement.Private, leading, " ", ""); }
private static string AddFieldForProperty(IProperty prop) { // Add the field without further checks because the programmer will find and resolve // things like naming collisions var parent = prop.Parent as ITypeMemberContainer; var fieldName = (prop.Name.StartsWith("_") ? "" : "_") + StringUtilities.CamelCase(prop.Name); var field = new RDomField(fieldName, prop.ReturnType, declaredAccessModifier: AccessModifier.Private); FixWhitespace(field, prop); field.Whitespace2Set.Add(new Whitespace2(prop.Whitespace2Set.First().Copy())); parent.MembersAll.InsertOrMoveBefore(prop, field); return(fieldName); }