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
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,19 @@ namespace NJsonSchema.CodeGeneration.CSharp
/// <summary>Generates the property name for a given CSharp <see cref="JsonSchemaProperty"/>.</summary>
public sealed class CSharpPropertyNameGenerator : IPropertyNameGenerator
{
private static readonly char[] _reservedFirstPassChars = ['"', '\'', '@', '?', '!', '$', '[', ']', '(', ')', '.', '=', '+', '|'
];
private static readonly char[] _reservedSecondPassChars = ['*', ':', '-', '#', '&'];
private const string FirstPassChars = "\"'@?!$[]().=+|";
#if NET8_0_OR_GREATER
private static readonly System.Buffers.SearchValues<char> _reservedFirstPassChars = System.Buffers.SearchValues.Create(FirstPassChars);
#else
private static readonly char[] _reservedFirstPassChars = FirstPassChars.ToCharArray();
#endif

private const string SecondPassChars = "*:-#&";
#if NET8_0_OR_GREATER
private static readonly System.Buffers.SearchValues<char> _reservedSecondPassChars = System.Buffers.SearchValues.Create(SecondPassChars);
#else
private static readonly char[] _reservedSecondPassChars = SecondPassChars.ToCharArray();
#endif

/// <summary>Generates the property name.</summary>
/// <param name="property">The property.</param>
Expand All @@ -22,7 +32,7 @@ public string Generate(JsonSchemaProperty property)
{
var name = property.Name;

if (name.IndexOfAny(_reservedFirstPassChars) != -1)
if (name.AsSpan().IndexOfAny(_reservedFirstPassChars) != -1)
{
name = name.Replace("\"", string.Empty)
.Replace("'", string.Empty)
Expand All @@ -42,7 +52,7 @@ public string Generate(JsonSchemaProperty property)

name = ConversionUtilities.ConvertToUpperCamelCase(name, true);

if (name.IndexOfAny(_reservedSecondPassChars) != -1)
if (name.AsSpan().IndexOfAny(_reservedSecondPassChars) != -1)
{
name = name
.Replace("*", "Star")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,15 @@ public CSharpValueGenerator(CSharpGeneratorSettings settings)
if (schema.Type.IsArray() ||
schema.Type.IsObject())
{
#pragma warning disable CA1845 // use span-based not available on all target frameworks
targetType = !string.IsNullOrEmpty(_settings.DictionaryInstanceType) && targetType.StartsWith(_settings.DictionaryType + "<", StringComparison.Ordinal)
? _settings.DictionaryInstanceType + targetType.Substring(_settings.DictionaryType.Length)
: targetType;

targetType = !string.IsNullOrEmpty(_settings.ArrayInstanceType) && targetType.StartsWith(_settings.ArrayType + "<", StringComparison.Ordinal)
? _settings.ArrayInstanceType + targetType.Substring(_settings.ArrayType.Length)
: targetType;

#pragma warning restore CA1845
return schema.IsAbstract ? null : $"new {targetType}()";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public IEnumerable<EnumerationItemModel> Enums
{
Name = _settings.EnumNameGenerator.Generate(i, name, value, _schema),
OriginalName = name,
Value = value.ToString(),
Value = value.ToString()!,
InternalValue = valueInt64.ToString(CultureInfo.InvariantCulture),
InternalFlagValue = valueInt64.ToString(CultureInfo.InvariantCulture)
});
Expand All @@ -87,7 +87,7 @@ public IEnumerable<EnumerationItemModel> Enums
{
Name = _settings.EnumNameGenerator.Generate(i, name, value, _schema),
OriginalName = name,
Value = value.ToString(),
Value = value.ToString()!,
InternalValue = value.ToString(),
InternalFlagValue = (1 << i).ToString(CultureInfo.InvariantCulture)
});
Expand All @@ -101,8 +101,8 @@ public IEnumerable<EnumerationItemModel> Enums
entries.Add(new EnumerationItemModel
{
Name = _settings.EnumNameGenerator.Generate(i, name, value, _schema),
OriginalName = name,
Value = value.ToString(),
OriginalName = name!,
Value = value.ToString()!,
InternalValue = i.ToString(CultureInfo.InvariantCulture),
InternalFlagValue = (1 << i).ToString(CultureInfo.InvariantCulture)
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462;net8.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
<None Remove="Templates\Class.Body.liquid" />
<None Remove="Templates\Class.Constructor.Record.liquid" />
<None Update="NJsonSchema.CodeGeneration.CSharp.nuspec" />
<None Update="NJsonSchema.snk" />
</ItemGroup>
<ItemGroup>
<None Remove="Templates\Class.Body.liquid" />
<None Remove="Templates\Class.Constructor.Record.liquid" />
<None Update="NJsonSchema.CodeGeneration.CSharp.nuspec" />
<None Update="NJsonSchema.snk" />
</ItemGroup>

<ItemGroup>
<EmbeddedResource Include="Templates\*.liquid" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Templates\*.liquid" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\NJsonSchema.CodeGeneration\NJsonSchema.CodeGeneration.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NJsonSchema.CodeGeneration\NJsonSchema.CodeGeneration.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="NuGetIcon.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<None Include="NuGetIcon.png" Pack="true" PackagePath="\" />
</ItemGroup>

<ItemGroup>
<Compile Include="..\NJsonSchema\Infrastructure\EnumExtensions.cs">
<Link>EnumExtensions.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="..\NJsonSchema\Infrastructure\EnumExtensions.cs">
<Link>EnumExtensions.cs</Link>
</Compile>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ public List<EnumerationItemModel> Enums
var value = _schema.Enumeration.ElementAt(i);
if (value != null)
{
var name = _schema.EnumerationNames.Count > i ?
_schema.EnumerationNames.ElementAt(i) :
_schema.Type.IsInteger() ? "_" + value : value.ToString();
var name = _schema.EnumerationNames.Count > i
? _schema.EnumerationNames.ElementAt(i)
: _schema.Type.IsInteger() ? "_" + value : value.ToString()!;

entries.Add(new EnumerationItemModel
{
Name = _settings.EnumNameGenerator.Generate(i, name, value, _schema),
OriginalName = name,
Value = _schema.Type.IsInteger() ? value.ToString() : "\"" + value + "\"",
Value = _schema.Type.IsInteger() ? value.ToString()! : "\"" + value + "\"",
});
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462;net8.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
<EmbeddedResource Include="Templates\Class.liquid" />
<EmbeddedResource Include="Templates\ConvertToClass.liquid" />
<EmbeddedResource Include="Templates\ConvertToJavaScript.liquid" />
<EmbeddedResource Include="Templates\Enum.liquid" />
<EmbeddedResource Include="Templates\Enum.StringLiteral.liquid" />
<EmbeddedResource Include="Templates\File.FormatDate.liquid" />
<EmbeddedResource Include="Templates\File.liquid" />
<EmbeddedResource Include="Templates\Interface.liquid" />
<EmbeddedResource Include="Templates\KnockoutClass.liquid" />
<EmbeddedResource Include="Templates\File.ReferenceHandling.liquid" />
<EmbeddedResource Include="Templates\File.ParseDateOnly.liquid" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Templates\Class.liquid" />
<EmbeddedResource Include="Templates\ConvertToClass.liquid" />
<EmbeddedResource Include="Templates\ConvertToJavaScript.liquid" />
<EmbeddedResource Include="Templates\Enum.liquid" />
<EmbeddedResource Include="Templates\Enum.StringLiteral.liquid" />
<EmbeddedResource Include="Templates\File.FormatDate.liquid" />
<EmbeddedResource Include="Templates\File.liquid" />
<EmbeddedResource Include="Templates\Interface.liquid" />
<EmbeddedResource Include="Templates\KnockoutClass.liquid" />
<EmbeddedResource Include="Templates\File.ReferenceHandling.liquid" />
<EmbeddedResource Include="Templates\File.ParseDateOnly.liquid" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\NJsonSchema.CodeGeneration\NJsonSchema.CodeGeneration.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NJsonSchema.CodeGeneration\NJsonSchema.CodeGeneration.csproj" />
</ItemGroup>

<ItemGroup>
<None Include="NuGetIcon.png" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<None Include="NuGetIcon.png" Pack="true" PackagePath="\" />
</ItemGroup>

<ItemGroup>
<Compile Include="..\NJsonSchema\Infrastructure\EnumExtensions.cs">
<Link>EnumExtensions.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="..\NJsonSchema\Infrastructure\EnumExtensions.cs">
<Link>EnumExtensions.cs</Link>
</Compile>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public IEnumerable<CodeArtifact> GenerateTypes(TypeScriptExtensionCode extension
else
{
index = classCode.IndexOf("class", StringComparison.Ordinal);
index = classCode.IndexOf("{", index, StringComparison.Ordinal) + 1;
index = classCode.IndexOf('{', index) + 1;

var code = classCode.Insert(index, "\n " + extensionCode.GetExtensionClassBody(artifact.TypeName).Trim() + "\n");
yield return new CodeArtifact(artifact.TypeName, artifact.BaseTypeName, artifact.Type, artifact.Language, artifact.Category, code);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,19 @@ namespace NJsonSchema.CodeGeneration.TypeScript
/// <summary>Generates the property name for a given TypeScript <see cref="JsonSchemaProperty"/>.</summary>
public sealed class TypeScriptPropertyNameGenerator : IPropertyNameGenerator
{
private static readonly char[] _reservedFirstPassChars = ['"', '@', '?', '.', '=', '+'];
private static readonly char[] _reservedSecondPassChars = ['*', '#', ':', '-'];
private const string FirstPassChars = "\"@?.=+";
#if NET8_0_OR_GREATER
private static readonly System.Buffers.SearchValues<char> _reservedFirstPassChars = System.Buffers.SearchValues.Create(FirstPassChars);
#else
private static readonly char[] _reservedFirstPassChars = FirstPassChars.ToCharArray();
#endif

private const string SecondPassChars = "*#:-";
#if NET8_0_OR_GREATER
private static readonly System.Buffers.SearchValues<char> _reservedSecondPassChars = System.Buffers.SearchValues.Create(SecondPassChars);
#else
private static readonly char[] _reservedSecondPassChars = SecondPassChars.ToCharArray();
#endif

/// <summary>Gets or sets the reserved names.</summary>
public HashSet<string> ReservedPropertyNames { get; set; } = new(StringComparer.Ordinal) { "constructor", "init", "fromJS", "toJSON" };
Expand All @@ -22,7 +33,7 @@ public string Generate(JsonSchemaProperty property)
{
var name = property.Name;

if (name.IndexOfAny(_reservedFirstPassChars) != -1)
if (name.AsSpan().IndexOfAny(_reservedFirstPassChars) != -1)
{
name = name.Replace("\"", string.Empty)
.Replace("@", string.Empty)
Expand All @@ -34,7 +45,7 @@ public string Generate(JsonSchemaProperty property)

name = ConversionUtilities.ConvertToLowerCamelCase(name, true);

if (name.IndexOfAny(_reservedSecondPassChars) != -1)
if (name.AsSpan().IndexOfAny(_reservedSecondPassChars) != -1)
{
name = name.Replace("*", "Star")
.Replace("#", "_")
Expand Down
3 changes: 3 additions & 0 deletions src/NJsonSchema.CodeGeneration/DefaultEnumNameGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public string Generate(int index, string? name, object? value, JsonSchema schema
_ => name
};

#pragma warning disable CA1845 // use span based version, not available on all target frameworks

#pragma warning disable CS8604 // Possible null reference argument.
if (name.StartsWith('-'))
#pragma warning restore CS8604 // Possible null reference argument.
Expand All @@ -56,6 +58,7 @@ public string Generate(int index, string? name, object? value, JsonSchema schema
{
name = "__" + name.Substring(2);
}
#pragma warning restore CA1845

return _invalidNameCharactersPattern.Replace(ConversionUtilities.ConvertToUpperCamelCase(name
.Replace(":", "-").Replace(@"""", ""), firstCharacterMustBeAlpha: true), "_");
Expand Down
2 changes: 1 addition & 1 deletion src/NJsonSchema.CodeGeneration/DefaultTemplateFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ protected virtual string GetToolchainVersion()
/// <exception cref="InvalidOperationException">The assembly containting liquid templates could not be found.</exception>
protected Assembly GetLiquidAssembly(string name)
{
var assembly = _assemblies.FirstOrDefault(a => a.FullName.Contains(name));
var assembly = _assemblies.FirstOrDefault(a => a.FullName?.Contains(name) == true);
if (assembly != null)
{
return assembly;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
<TargetFrameworks>netstandard2.0;net462;net8.0</TargetFrameworks>
</PropertyGroup>

<PropertyGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/NJsonSchema.CodeGeneration/ValueGeneratorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ protected ValueGeneratorBase(CodeGeneratorSettingsBase settings)

if (schema.Type.IsBoolean())
{
return schema.Default.ToString().ToLowerInvariant();
return schema.Default.ToString()!.ToLowerInvariant();
}

if (schema.Type.IsInteger() ||
Expand Down Expand Up @@ -181,7 +181,7 @@ protected string ConvertNumberToString(object value)
return (string)value;
}

return value.ToString();
return value.ToString()!;
}
}
}
2 changes: 1 addition & 1 deletion src/NJsonSchema.Yaml/NJsonSchema.Yaml.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
<TargetFrameworks>netstandard2.0;net462;net8.0</TargetFrameworks>
</PropertyGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/NJsonSchema/NJsonSchema.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net8.0;netstandard2.0;net462</TargetFrameworks>
<TargetFrameworks>netstandard2.0;net462;net8.0</TargetFrameworks>
</PropertyGroup>

<PropertyGroup>
Expand Down