Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/NJsonSchema.CodeGeneration.CSharp/CSharpGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,18 +113,18 @@ private CodeArtifact GenerateClass(JsonSchema schema, string typeName)
{
var model = new ClassTemplateModel(typeName, Settings, _resolver, schema, RootObject);

RenamePropertyWithSameNameAsClass(typeName, model.Properties);
RenamePropertyWithSameNameAsClass(typeName, model._properties);

var template = Settings.TemplateFactory.CreateTemplate("CSharp", "Class", model);
return new CodeArtifact(typeName, model.BaseClassName, CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Contract, template);
}

private static void RenamePropertyWithSameNameAsClass(string typeName, IEnumerable<PropertyModel> properties)
private static void RenamePropertyWithSameNameAsClass(string typeName, List<PropertyModel> properties)
{
var propertyModels = properties as PropertyModel[] ?? properties.ToArray();
PropertyModel? propertyWithSameNameAsClass = null;
foreach (var p in propertyModels)
for (var i = 0; i < properties.Count; i++)
{
var p = properties[i];
if (p.PropertyName == typeName)
{
propertyWithSameNameAsClass = p;
Expand All @@ -136,7 +136,7 @@ private static void RenamePropertyWithSameNameAsClass(string typeName, IEnumerab
{
var number = 1;
var candidate = typeName + number;
while (propertyModels.Any(p => p.PropertyName == candidate))
while (properties.Exists(p => p.PropertyName == candidate))
{
number++;
}
Expand Down
26 changes: 18 additions & 8 deletions src/NJsonSchema.CodeGeneration.CSharp/Models/ClassTemplateModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ public class ClassTemplateModel : ClassTemplateModelBase
private readonly CSharpTypeResolver _resolver;
private readonly JsonSchema _schema;
private readonly CSharpGeneratorSettings _settings;
internal readonly List<PropertyModel> _properties;
private readonly List<PropertyModel> _allProperties;

/// <summary>Initializes a new instance of the <see cref="ClassTemplateModel"/> class.</summary>
/// <param name="typeName">Name of the type.</param>
Expand All @@ -32,19 +34,27 @@ public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings,
_settings = settings;

ClassName = typeName;
Properties = _schema.ActualProperties.Values
.Where(p => !p.IsInheritanceDiscriminator)
.Select(property => new PropertyModel(this, property, _resolver, _settings))
.ToArray();

var actualProperties = _schema.ActualProperties;
_properties = new List<PropertyModel>(actualProperties.Count);
foreach (var property in actualProperties.Values)
{
if (!property.IsInheritanceDiscriminator)
{
_properties.Add(new PropertyModel(this, property, _resolver, _settings));
}
}

if (schema.InheritedSchema != null)
{
BaseClass = new ClassTemplateModel(BaseClassName!, settings, resolver, schema.InheritedSchema, rootObject);
AllProperties = Properties.Concat(BaseClass.AllProperties).ToArray();
_allProperties = new List<PropertyModel>(_properties.Count + BaseClass._allProperties.Count);
_allProperties.AddRange(_properties);
_allProperties.AddRange(BaseClass._allProperties);
}
else
{
AllProperties = Properties;
_allProperties = _properties;
}
}

Expand Down Expand Up @@ -87,10 +97,10 @@ public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings,
// string.Empty) : null;

/// <summary>Gets the property models.</summary>
public IEnumerable<PropertyModel> Properties { get; }
public IEnumerable<PropertyModel> Properties => _properties;

/// <summary>Gets the property models with inherited properties.</summary>
public IEnumerable<PropertyModel> AllProperties { get; }
public IEnumerable<PropertyModel> AllProperties => _allProperties;

/// <summary>Gets a value indicating whether the class has description.</summary>
public bool HasDescription => _schema is not JsonSchemaProperty &&
Expand Down
Loading