Skip to content

Commit 3cf9099

Browse files
authored
Remove version from models builder generated code header when configured to do so. (#18501)
1 parent 32bfbad commit 3cf9099

File tree

3 files changed

+126
-7
lines changed

3 files changed

+126
-7
lines changed

src/Umbraco.Infrastructure/ModelsBuilder/Building/TextBuilder.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,15 @@ public TextBuilder()
5151
/// Outputs an "auto-generated" header to a string builder.
5252
/// </summary>
5353
/// <param name="sb">The string builder.</param>
54-
public static void WriteHeader(StringBuilder sb) => TextHeaderWriter.WriteHeader(sb);
54+
[Obsolete("Please use the overload taking all parameters. Scheduled for removal in Umbraco 17.")]
55+
public static void WriteHeader(StringBuilder sb) => WriteHeader(sb, true);
56+
57+
/// <summary>
58+
/// Outputs an "auto-generated" header to a string builder.
59+
/// </summary>
60+
/// <param name="sb">The string builder.</param>
61+
/// <param name="includeVersion">Flag indicating whether the tool version number should be included in the output.</param>
62+
public static void WriteHeader(StringBuilder sb, bool includeVersion) => TextHeaderWriter.WriteHeader(sb, includeVersion);
5563

5664
/// <summary>
5765
/// Outputs a generated model to a string builder.
@@ -60,7 +68,7 @@ public TextBuilder()
6068
/// <param name="typeModel">The model to generate.</param>
6169
public void Generate(StringBuilder sb, TypeModel typeModel)
6270
{
63-
WriteHeader(sb);
71+
WriteHeader(sb, Config.IncludeVersionNumberInGeneratedModels);
6472

6573
foreach (var t in TypesUsing)
6674
{
@@ -83,7 +91,7 @@ public void Generate(StringBuilder sb, TypeModel typeModel)
8391
/// <param name="typeModels">The models to generate.</param>
8492
public void Generate(StringBuilder sb, IEnumerable<TypeModel> typeModels)
8593
{
86-
WriteHeader(sb);
94+
WriteHeader(sb, Config.IncludeVersionNumberInGeneratedModels);
8795

8896
foreach (var t in TypesUsing)
8997
{

src/Umbraco.Infrastructure/ModelsBuilder/Building/TextHeaderWriter.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,30 @@ internal static class TextHeaderWriter
88
/// Outputs an "auto-generated" header to a string builder.
99
/// </summary>
1010
/// <param name="sb">The string builder.</param>
11-
public static void WriteHeader(StringBuilder sb)
11+
[Obsolete("Please use the overload taking all parameters. Scheduled for removal in Umbraco 17.")]
12+
public static void WriteHeader(StringBuilder sb) => WriteHeader(sb, true);
13+
14+
/// <summary>
15+
/// Outputs an "auto-generated" header to a string builder.
16+
/// </summary>
17+
/// <param name="sb">The string builder.</param>
18+
/// <param name="includeVersion">Flag indicating whether the tool version number should be included in the output.</param>
19+
public static void WriteHeader(StringBuilder sb, bool includeVersion)
1220
{
1321
sb.Append("//------------------------------------------------------------------------------\n");
1422
sb.Append("// <auto-generated>\n");
1523
sb.Append("// This code was generated by a tool.\n");
1624
sb.Append("//\n");
17-
sb.AppendFormat("// Umbraco.ModelsBuilder.Embedded v{0}\n", ApiVersion.Current.Version);
25+
26+
if (includeVersion)
27+
{
28+
sb.AppendFormat("// Umbraco.ModelsBuilder.Embedded v{0}\n", ApiVersion.Current.Version);
29+
}
30+
else
31+
{
32+
sb.Append("// Umbraco.ModelsBuilder.Embedded\n");
33+
}
34+
1835
sb.Append("//\n");
1936
sb.Append("// Changes to this file will be lost if the code is regenerated.\n");
2037
sb.Append("// </auto-generated>\n");

tests/Umbraco.Tests.UnitTests/Umbraco.ModelsBuilder.Embedded/BuilderTests.cs

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright (c) Umbraco.
22
// See LICENSE for more details.
33

4-
using System.Collections.Generic;
5-
using System.Linq;
64
using System.Text;
75
using NUnit.Framework;
86
using Umbraco.Cms.Core.Configuration.Models;
@@ -118,6 +116,102 @@ public Type1(IPublishedContent content, IPublishedValueFallback publishedValueFa
118116
Assert.AreEqual(expected.ClearLf(), gen);
119117
}
120118

119+
[Test]
120+
public void GenerateSimpleType_WithoutVersion()
121+
{
122+
// Umbraco returns nice, pascal-cased names.
123+
var type1 = new TypeModel
124+
{
125+
Id = 1,
126+
Alias = "type1",
127+
ClrName = "Type1",
128+
Name = "type1Name",
129+
ParentId = 0,
130+
BaseType = null,
131+
ItemType = TypeModel.ItemTypes.Content,
132+
};
133+
type1.Properties.Add(new PropertyModel
134+
{
135+
Alias = "prop1",
136+
ClrName = "Prop1",
137+
Name = "prop1Name",
138+
ModelClrType = typeof(string),
139+
});
140+
141+
TypeModel[] types = { type1 };
142+
143+
var modelsBuilderConfig = new ModelsBuilderSettings { IncludeVersionNumberInGeneratedModels = false };
144+
var builder = new TextBuilder(modelsBuilderConfig, types);
145+
146+
var sb = new StringBuilder();
147+
builder.Generate(sb, builder.GetModelsToGenerate().First());
148+
var gen = sb.ToString();
149+
150+
var expected = @"//------------------------------------------------------------------------------
151+
// <auto-generated>
152+
// This code was generated by a tool.
153+
//
154+
// Umbraco.ModelsBuilder.Embedded
155+
//
156+
// Changes to this file will be lost if the code is regenerated.
157+
// </auto-generated>
158+
//------------------------------------------------------------------------------
159+
160+
using System;
161+
using System.Linq.Expressions;
162+
using Umbraco.Cms.Core.Models.PublishedContent;
163+
using Umbraco.Cms.Core.PublishedCache;
164+
using Umbraco.Cms.Infrastructure.ModelsBuilder;
165+
using Umbraco.Cms.Core;
166+
using Umbraco.Extensions;
167+
168+
namespace Umbraco.Cms.Web.Common.PublishedModels
169+
{
170+
/// <summary>type1Name</summary>
171+
[PublishedModel(""type1"")]
172+
public partial class Type1 : PublishedContentModel
173+
{
174+
// helpers
175+
#pragma warning disable 0109 // new is redundant
176+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """")]
177+
public new const string ModelTypeAlias = ""type1"";
178+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """")]
179+
public new const PublishedItemType ModelItemType = PublishedItemType.Content;
180+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """")]
181+
[return: global::System.Diagnostics.CodeAnalysis.MaybeNull]
182+
public new static IPublishedContentType GetModelContentType(IPublishedSnapshotAccessor publishedSnapshotAccessor)
183+
=> PublishedModelUtility.GetModelContentType(publishedSnapshotAccessor, ModelItemType, ModelTypeAlias);
184+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """")]
185+
[return: global::System.Diagnostics.CodeAnalysis.MaybeNull]
186+
public static IPublishedPropertyType GetModelPropertyType<TValue>(IPublishedSnapshotAccessor publishedSnapshotAccessor, Expression<Func<Type1, TValue>> selector)
187+
=> PublishedModelUtility.GetModelPropertyType(GetModelContentType(publishedSnapshotAccessor), selector);
188+
#pragma warning restore 0109
189+
190+
private IPublishedValueFallback _publishedValueFallback;
191+
192+
// ctor
193+
public Type1(IPublishedContent content, IPublishedValueFallback publishedValueFallback)
194+
: base(content, publishedValueFallback)
195+
{
196+
_publishedValueFallback = publishedValueFallback;
197+
}
198+
199+
// properties
200+
201+
///<summary>
202+
/// prop1Name
203+
///</summary>
204+
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """")]
205+
[global::System.Diagnostics.CodeAnalysis.MaybeNull]
206+
[ImplementPropertyType(""prop1"")]
207+
public virtual string Prop1 => this.Value<string>(_publishedValueFallback, ""prop1"");
208+
}
209+
}
210+
";
211+
Console.WriteLine(gen);
212+
Assert.AreEqual(expected.ClearLf(), gen);
213+
}
214+
121215
[Test]
122216
public void GenerateSimpleType_Ambiguous_Issue()
123217
{

0 commit comments

Comments
 (0)