From 108d251339bd31b3e35f1d3ff65667e9eb78873c Mon Sep 17 00:00:00 2001 From: Greg Winterstein Date: Wed, 22 Feb 2023 08:35:26 -0800 Subject: [PATCH] Regenerate ODataT4CodeGenerator --- .../Templates/ODataT4CodeGenerator.cs | 61 +++++++++++-------- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/src/Microsoft.OData.CodeGen/Templates/ODataT4CodeGenerator.cs b/src/Microsoft.OData.CodeGen/Templates/ODataT4CodeGenerator.cs index cd45bb24..83fe03c7 100644 --- a/src/Microsoft.OData.CodeGen/Templates/ODataT4CodeGenerator.cs +++ b/src/Microsoft.OData.CodeGen/Templates/ODataT4CodeGenerator.cs @@ -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; @@ -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; @@ -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; /// /// Class to produce the template output @@ -2922,7 +2922,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); + } } } @@ -2945,13 +2952,20 @@ internal void SetPropertyIdentifierMappingsIfInvalidIdentifier(IEdmStructuredTyp Func 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); } @@ -2978,15 +2992,14 @@ internal void SetPropertyIdentifierMappingsIfInvalidIdentifier(IEdmStructuredTyp /// - Removes spaces, capitalize before space
/// - Replace non-alphanumeric characters with replacement character
/// - Prefixes with underscore (_) if it doesn't start with
- /// a letter, underscore, or '@'
- /// - Capitalizes property identifiers + /// a letter, underscore, or '@' ///
/// /// C# and VB use very similar rules for identifier names /// /// Identifier to validate and modify /// Modified or if no changes are needed - private static string GetValidIdentifier(string name) + private string GetValidIdentifier(string name) { var validName = name; if (!string.IsNullOrWhiteSpace(validName)) @@ -3008,7 +3021,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); } @@ -4541,8 +4554,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 /// \r\n /// Initialize a" + - " new "); + " : base(context, path) { }\r\n\r\n /// \r\n /// Initialize " + + "a new "); this.Write(this.ToStringHelper.ToStringWithCulture(singleTypeName)); @@ -4551,8 +4564,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 /// \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)); @@ -4564,7 +4577,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"); } @@ -4979,13 +4992,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; @@ -5284,7 +5297,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)) @@ -5695,9 +5708,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)));