Skip to content

Commit

Permalink
Regenerate ODataT4CodeGenerator
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Winterstein authored and Greg Winterstein committed Jun 6, 2023
1 parent 2b659c5 commit 0d3e015
Showing 1 changed file with 36 additions and 25 deletions.
61 changes: 36 additions & 25 deletions src/Microsoft.OData.CodeGen/Templates/ODataT4CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
namespace Microsoft.OData.CodeGen.Templates
{
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
Expand All @@ -19,7 +18,6 @@ namespace Microsoft.OData.CodeGen.Templates
using System.Net;
using System.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Linq;
using Microsoft.OData.Edm.Csdl;
Expand All @@ -31,6 +29,8 @@ namespace Microsoft.OData.CodeGen.Templates
using Microsoft.OData.CodeGen.FileHandling;
using Microsoft.OData.CodeGen.Logging;
using Microsoft.OData.CodeGen.Common;
using System.CodeDom.Compiler;
using System.Text.RegularExpressions;

/// <summary>
/// Class to produce the template output
Expand Down Expand Up @@ -2931,7 +2931,14 @@ internal void SetPropertyIdentifierMappingsIfBaseConflicts(IEdmStructuredType st
{
var customizedPropertyName = customizePropertyName(property.Name);
var renamedPropertyName = uniqueIdentifierService.GetUniqueIdentifier(customizedPropertyName);
IdentifierMappings.Add(property.Name, renamedPropertyName);
if (IdentifierMappings.ContainsKey(property.Name))
{
IdentifierMappings[property.Name] = renamedPropertyName;
}
else
{
IdentifierMappings.Add(property.Name, renamedPropertyName);
}
}
}

Expand All @@ -2954,13 +2961,20 @@ internal void SetPropertyIdentifierMappingsIfInvalidIdentifier(IEdmStructuredTyp
Func<string, string> customizePropertyName = (name) => { return this.context.EnableNamingAlias ? Customization.CustomizeNaming(name) : name; };
var codeDomProvider = (this.context.TargetLanguage == LanguageOption.CSharp ? CSharpProvider : VBProvider);
var propertiesToRename = structuredType.DeclaredProperties.Where(prop => !codeDomProvider.IsValidIdentifier(prop.Name)
|| !char.IsUpper(prop.Name.First()));
&& !LanguageKeywords.Contains(prop.Name));

foreach (var property in propertiesToRename)
{
var customizedPropertyName = customizePropertyName(property.Name);
var validName = GetValidIdentifier(customizedPropertyName);
if (!IdentifierMappings.ContainsKey(customizedPropertyName))
if (IdentifierMappings.ContainsKey(property.Name))
{
if (!codeDomProvider.IsValidIdentifier(IdentifierMappings[property.Name]))
{
IdentifierMappings[property.Name] = validName;
}
}
else
{
IdentifierMappings.Add(property.Name, validName);
}
Expand All @@ -2987,15 +3001,14 @@ internal void SetPropertyIdentifierMappingsIfInvalidIdentifier(IEdmStructuredTyp
/// - Removes spaces, capitalize before space<br />
/// - Replace non-alphanumeric characters with replacement character<br />
/// - Prefixes <paramref name="name"/>with underscore (_) if it doesn't start with<br />
/// a letter, underscore, or '@'<br />
/// - Capitalizes property identifiers
/// a letter, underscore, or '@'
/// </summary>
/// <remarks>
/// C# and VB use very similar rules for identifier names
/// </remarks>
/// <param name="name">Identifier to validate and modify</param>
/// <returns>Modified <paramref name="name"/> or <paramref name="name"/> if no changes are needed</returns>
private static string GetValidIdentifier(string name)
private string GetValidIdentifier(string name)
{
var validName = name;
if (!string.IsNullOrWhiteSpace(validName))
Expand All @@ -3017,7 +3030,7 @@ private static string GetValidIdentifier(string name)
}

// Capitalize identifier for consistency
if (validName.First() != '_' && validName.First() != '@' && !char.IsUpper(validName.First()))
if (this.context.EnableNamingAlias && validName.First() != '_' && validName.First() != '@' && !char.IsUpper(validName.First()))
{
validName = validName.First().ToString().ToUpper() + validName.Substring(1);
}
Expand Down Expand Up @@ -4564,8 +4577,8 @@ internal override void WriteConstructorForSingleType(string singleTypeName, stri
this.Write(this.ToStringHelper.ToStringWithCulture(singleTypeName));

this.Write("(global::Microsoft.OData.Client.DataServiceContext context, string path)\r\n " +
" : base(context, path) {}\r\n\r\n /// <summary>\r\n /// Initialize a" +
" new ");
" : base(context, path) { }\r\n\r\n /// <summary>\r\n /// Initialize " +
"a new ");

this.Write(this.ToStringHelper.ToStringWithCulture(singleTypeName));

Expand All @@ -4574,8 +4587,8 @@ internal override void WriteConstructorForSingleType(string singleTypeName, stri
this.Write(this.ToStringHelper.ToStringWithCulture(singleTypeName));

this.Write("(global::Microsoft.OData.Client.DataServiceContext context, string path, bool isC" +
"omposable)\r\n : base(context, path, isComposable) {}\r\n\r\n /// <s" +
"ummary>\r\n /// Initialize a new ");
"omposable)\r\n : base(context, path, isComposable) { }\r\n\r\n /// <" +
"summary>\r\n /// Initialize a new ");

this.Write(this.ToStringHelper.ToStringWithCulture(singleTypeName));

Expand All @@ -4587,7 +4600,7 @@ internal override void WriteConstructorForSingleType(string singleTypeName, stri

this.Write(this.ToStringHelper.ToStringWithCulture(baseTypeName));

this.Write(" query)\r\n : base(query) {}\r\n\r\n");
this.Write(" query)\r\n : base(query) { }\r\n\r\n");


}
Expand Down Expand Up @@ -5002,13 +5015,13 @@ internal override void WriteGeneratedEdmModel(string escapedEdmxString)

this.Write(@", out edmModel, out errors))
{
global::System.Text.StringBuilder errorMessages = new global::System.Text.StringBuilder();
foreach (var error in errors)
{
errorMessages.Append(error.ErrorMessage);
errorMessages.Append(""; "");
}
throw new global::System.InvalidOperationException(errorMessages.ToString());
global::System.Text.StringBuilder errorMessages = new global::System.Text.StringBuilder();
foreach (var error in errors)
{
errorMessages.Append(error.ErrorMessage);
errorMessages.Append(""; "");
}
throw new global::System.InvalidOperationException(errorMessages.ToString());
}
return edmModel;
Expand Down Expand Up @@ -5307,7 +5320,7 @@ internal override void WritePropertyForStructuredType(PropertyOptions propertyOp

this.Write(this.ToStringHelper.ToStringWithCulture(T4Version));

this.Write("\")]\r\n\r\n");
this.Write("\")]\r\n");


if (this.context.EnableNamingAlias || IdentifierMappings.ContainsKey(propertyOptions.OriginalPropertyName))
Expand Down Expand Up @@ -5718,9 +5731,7 @@ internal override void WriteBoundFunctionInEntityTypeReturnSingleResult(bool hid

this.Write(" public virtual ");

this.Write(this.ToStringHelper.ToStringWithCulture(hideBaseMethod ? this.OverloadsModifier : string.Empty));

this.Write(" ");
this.Write(this.ToStringHelper.ToStringWithCulture(hideBaseMethod ? $"{this.OverloadsModifier} " : string.Empty));

this.Write(this.ToStringHelper.ToStringWithCulture(isReturnEntity ? returnTypeNameWithSingleSuffix : string.Format(CultureInfo.InvariantCulture, this.DataServiceQuerySingleStructureTemplate, returnTypeName)));

Expand Down

0 comments on commit 0d3e015

Please sign in to comment.