Skip to content

Commit cef40db

Browse files
committed
Fix tests and decouple architecture
1 parent 0b8b21b commit cef40db

37 files changed

+286
-333
lines changed

JsonClassGenerator.WinForms/MainForm.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,7 @@ private void TryLoadJsonFile( FileInfo jsonFile )
409409

410410
private void ConfigureGenerator( JsonClassGenerator config )
411411
{
412-
config.UsePascalCase = this.optsPascalCase.Checked;
413-
414-
//
412+
writerConfig.UsePascalCase = this.optsPascalCase.Checked;
415413

416414
if( this.optAttribJP.Checked )
417415
{

JsonClassGeneratorLib/CodeWriterConfiguration/CodeWriterConfigurationBase.cs renamed to JsonClassGeneratorLib/CodeWriterConfiguration/BaseCodeWriterConfiguration.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
99
{
10-
public class CodeWriterConfigurationBase
10+
public class BaseCodeWriterConfiguration
1111
{
1212
/// <summary>
1313
/// The C# <c>namespace</c> or Java <c>package</c> that the generated types will reside in.<br />

JsonClassGeneratorLib/CodeWriterConfiguration/CSharpCodeWriterConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
1111
{
12-
public class CSharpCodeWriterConfig : CodeWriterConfigurationBase
12+
public class CSharpCodeWriterConfig : BaseCodeWriterConfiguration
1313
{
1414
/// <summary>
1515
/// The default constructor with default property values

JsonClassGeneratorLib/CodeWriterConfiguration/DartCodeWriterConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
1010
{
11-
public class DartCodeWriterConfig : CodeWriterConfigurationBase
11+
public class DartCodeWriterConfig : BaseCodeWriterConfiguration
1212
{
1313
/// <summary>
1414
/// The default constructor with default property values

JsonClassGeneratorLib/CodeWriterConfiguration/JavaCodeWriterConfig.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
1111
{
12-
public class JavaCodeWriterConfig : CodeWriterConfigurationBase
12+
public class JavaCodeWriterConfig : BaseCodeWriterConfiguration
1313
{
1414
/// <summary>
1515
/// The default constructor with default property values
@@ -31,6 +31,8 @@ public JavaCodeWriterConfig(OutputMembers outputMembers, OutputCollectionType co
3131
}
3232

3333
public OutputMembers OutputMembers { get; set; }
34+
35+
[Obsolete("Not Implemented Yet")]
3436
public bool UsePascalCase { get; set; }
3537
public bool UseNestedClasses { get; set; }
3638
}

JsonClassGeneratorLib/CodeWriterConfiguration/PythonCodeWriterConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
1010
{
11-
public class PythonCodeWriterConfig : CodeWriterConfigurationBase
11+
public class PythonCodeWriterConfig : BaseCodeWriterConfiguration
1212
{
1313
/// <summary>
1414
/// The default constructor with default property values

JsonClassGeneratorLib/CodeWriterConfiguration/TypeScriptCodeWriterConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
88
{
9-
public class TypeScriptCodeWriterConfig : CodeWriterConfigurationBase
9+
public class TypeScriptCodeWriterConfig : BaseCodeWriterConfiguration
1010
{
1111
}
1212
}

JsonClassGeneratorLib/CodeWriterConfiguration/VisualBasicCodeWriterConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Xamasoft.JsonClassGenerator.CodeWriterConfiguration
99
{
10-
public class VisualBasicCodeWriterConfig : CodeWriterConfigurationBase
10+
public class VisualBasicCodeWriterConfig : BaseCodeWriterConfiguration
1111
{
1212
public VisualBasicCodeWriterConfig()
1313
{

JsonClassGeneratorLib/CodeWriters/CSharpCodeWriter.cs

Lines changed: 57 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
using System;
22
using System.CodeDom;
33
using System.Collections.Generic;
4+
using System.Net.Configuration;
45
using System.Runtime.Serialization.Formatters;
56
using System.Text;
67
using Xamasoft.JsonClassGenerator.CodeWriterConfiguration;
78
using Xamasoft.JsonClassGenerator.Models;
89

910
namespace Xamasoft.JsonClassGenerator.CodeWriters
1011
{
11-
public class CSharpCodeWriter : ICodeBuilder
12+
public class CSharpCodeWriter : ICodeWriter
1213
{
1314
public CSharpCodeWriter()
1415
{
1516
this.config = new CSharpCodeWriterConfig();
17+
1618
}
1719

1820
public CSharpCodeWriter(CSharpCodeWriterConfig writerConfig)
@@ -42,7 +44,7 @@ public string DisplayName
4244

4345
public bool IsReservedKeyword(string word) => _reservedKeywords.Contains(word ?? string.Empty);
4446

45-
IReadOnlyCollection<string> ICodeBuilder.ReservedKeywords => _reservedKeywords;
47+
IReadOnlyCollection<string> ICodeWriter.ReservedKeywords => _reservedKeywords;
4648

4749
public void WriteFileStart(StringBuilder sw)
4850
{
@@ -96,6 +98,40 @@ public void WriteFileStart(StringBuilder sw)
9698
}
9799
}
98100

101+
public void WriteClassesToFile(StringBuilder sw, IEnumerable<JsonType> types, bool rootIsArray = false)
102+
{
103+
Boolean inNamespace = false;
104+
Boolean rootNamespace = false;
105+
106+
WriteFileStart(sw);
107+
WriteDeserializationComment(sw, rootIsArray);
108+
109+
foreach (JsonType type in types)
110+
{
111+
if (config.HasNamespace && inNamespace && rootNamespace != type.IsRoot)
112+
{
113+
WriteNamespaceEnd(sw, rootNamespace);
114+
inNamespace = false;
115+
}
116+
117+
if (config.HasNamespace && !inNamespace)
118+
{
119+
WriteNamespaceStart(sw, type.IsRoot);
120+
inNamespace = true;
121+
rootNamespace = type.IsRoot;
122+
}
123+
124+
WriteClass(sw, type);
125+
}
126+
127+
if (config.HasNamespace && inNamespace)
128+
{
129+
WriteNamespaceEnd(sw, rootNamespace);
130+
}
131+
132+
WriteFileEnd(sw);
133+
}
134+
99135
public void WriteFileEnd(StringBuilder sw)
100136
{
101137
if (config.UseNestedClasses)
@@ -204,7 +240,13 @@ public void WriteClassMembers(StringBuilder sw, JsonType type, string indentMemb
204240
bool first = true;
205241
foreach (JsonFieldInfo field in type.Fields)
206242
{
207-
string classPropertyName = this.GetCSharpPascalCaseName(field.MemberName);
243+
string classPropertyName = field.MemberName;
244+
245+
if (config.UsePascalCase || field.ContainsSpecialChars)
246+
classPropertyName = field.MemberName.ToTitleCase();
247+
248+
classPropertyName = this.CheckSyntax(classPropertyName);
249+
208250
string propertyAttribute = GetCSharpJsonAttributeCode(field);
209251

210252
// If we are using record types and this is not the first iteration, add a comma and newline to the previous line
@@ -366,7 +408,11 @@ private void WriteClassConstructor(StringBuilder sw, JsonType type, string inden
366408
{
367409
// Writes something like: `[JsonProperty("foobar")] string foobar,`
368410

369-
string ctorParameterName = this.GetCSharpCamelCaseName(field.MemberName);
411+
string ctorParameterName = field.MemberName;
412+
if (config.UsePascalCase || field.ContainsSpecialChars)
413+
ctorParameterName = ctorParameterName.ToTitleCase();
414+
415+
ctorParameterName = this.GetCSharpCamelCaseName(ctorParameterName);
370416

371417
bool isLast = Object.ReferenceEquals(field, lastField);
372418
string comma = isLast ? "" : ",";
@@ -394,8 +440,12 @@ private void WriteClassConstructor(StringBuilder sw, JsonType type, string inden
394440

395441
foreach (JsonFieldInfo field in type.Fields)
396442
{
397-
string ctorParameterName = this.GetCSharpCamelCaseName(field.MemberName);
398-
string classPropertyName = this.GetCSharpPascalCaseName(field.MemberName);
443+
string classPropertyName = field.MemberName;
444+
if (config.UsePascalCase || field.ContainsSpecialChars)
445+
classPropertyName = classPropertyName.ToTitleCase();
446+
447+
string ctorParameterName = field.MemberName.ToTitleCase();
448+
ctorParameterName = this.GetCSharpCamelCaseName(ctorParameterName);
399449

400450
sw.AppendFormat(indentBodies + "this.{0} = {1};{2}", /*0:*/ classPropertyName, /*1:*/ ctorParameterName, /*2:*/ Environment.NewLine);
401451
}
@@ -550,7 +600,7 @@ private string GetCSharpCamelCaseName(string camelCaseFromJson)
550600
return name;
551601
}
552602
/// <summary>Converts an identifier from JSON into a C#-safe PascalCase identifier.</summary>
553-
private string GetCSharpPascalCaseName(string name)
603+
private string CheckSyntax(string name)
554604
{
555605
// Check if property is a reserved keyword
556606
if (this.IsReservedKeyword(name)) name = "@" + name;

JsonClassGeneratorLib/CodeWriters/DartCodeWriter.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
namespace Xamasoft.JsonClassGenerator.CodeWriters
1111
{
12-
public class DartCodeWriter : ICodeBuilder
12+
public class DartCodeWriter : ICodeWriter
1313
{
1414
private readonly DartCodeWriterConfig config;
1515

@@ -194,6 +194,40 @@ public void WriteFileEnd(StringBuilder sw)
194194
return;
195195
}
196196

197+
public void WriteClassesToFile(StringBuilder sw, IEnumerable<JsonType> types, bool rootIsArray = false)
198+
{
199+
Boolean inNamespace = false;
200+
Boolean rootNamespace = false;
201+
202+
WriteFileStart(sw);
203+
WriteDeserializationComment(sw, rootIsArray);
204+
205+
foreach (JsonType type in types)
206+
{
207+
if (config.HasNamespace && inNamespace && rootNamespace != type.IsRoot)
208+
{
209+
WriteNamespaceEnd(sw, rootNamespace);
210+
inNamespace = false;
211+
}
212+
213+
if (config.HasNamespace && !inNamespace)
214+
{
215+
WriteNamespaceStart(sw, type.IsRoot);
216+
inNamespace = true;
217+
rootNamespace = type.IsRoot;
218+
}
219+
220+
WriteClass(sw, type);
221+
}
222+
223+
if (config.HasNamespace && inNamespace)
224+
{
225+
WriteNamespaceEnd(sw, rootNamespace);
226+
}
227+
228+
WriteFileEnd(sw);
229+
}
230+
197231
public void WriteFileStart(StringBuilder sw)
198232
{
199233
sw.AppendLine("/* ");

0 commit comments

Comments
 (0)