Skip to content

Commit 49faef8

Browse files
feat: only emit Properties setter when it contains elements
1 parent 81f3019 commit 49faef8

1 file changed

Lines changed: 34 additions & 24 deletions

File tree

TUnit.Core.SourceGenerator/Utilities/MetadataGenerationHelper.cs

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ private static void WriteClassMetadataGetOrAdd(ICodeWriter writer, INamedTypeSym
164164
}
165165

166166
writer.Append("Properties = ");
167-
WritePropertyMetadataArray(writer, typeSymbol);
167+
WritePropertyMetadataArray(writer, typeSymbol, out var propertyCount);
168168
writer.AppendLine(",");
169169
writer.Append($"Parent = {parentExpression ?? "null"}");
170170

@@ -173,17 +173,20 @@ private static void WriteClassMetadataGetOrAdd(ICodeWriter writer, INamedTypeSym
173173
writer.AppendLine();
174174
writer.AppendLine("};");
175175

176-
// Set ClassMetadata reference on each property
177-
writer.AppendLine("foreach (var prop in classMetadata.Properties)");
178-
writer.AppendLine("{");
176+
if (propertyCount > 0)
177+
{
178+
// Set ClassMetadata reference on each property
179+
writer.AppendLine("foreach (var prop in classMetadata.Properties)");
180+
writer.AppendLine("{");
179181

180-
writer.SetIndentLevel(currentIndent + 2);
181-
writer.AppendLine("prop.ClassMetadata = classMetadata;");
182-
writer.Append("prop.ContainingTypeMetadata = classMetadata;");
182+
writer.SetIndentLevel(currentIndent + 2);
183+
writer.AppendLine("prop.ClassMetadata = classMetadata;");
184+
writer.Append("prop.ContainingTypeMetadata = classMetadata;");
183185

184-
writer.SetIndentLevel(currentIndent + 1);
185-
writer.AppendLine();
186-
writer.AppendLine("}");
186+
writer.SetIndentLevel(currentIndent + 1);
187+
writer.AppendLine();
188+
writer.AppendLine("}");
189+
}
187190
writer.Append("return classMetadata;");
188191

189192
// Back to original level
@@ -227,22 +230,25 @@ public static string GenerateClassMetadataGetOrAdd(INamedTypeSymbol typeSymbol,
227230
{
228231
writer.AppendLine("Parameters = global::System.Array.Empty<global::TUnit.Core.ParameterMetadata>(),");
229232
}
230-
writer.AppendLine($"Properties = {GeneratePropertyMetadataArray(typeSymbol, writer.IndentLevel)},");
233+
writer.AppendLine($"Properties = {GeneratePropertyMetadataArray(typeSymbol, writer.IndentLevel, out var propertyCount)},");
231234
writer.AppendLine($"Parent = {parentExpression ?? "null"}");
232235

233236
writer.Unindent();
234237
writer.AppendLine("};");
235238
writer.AppendLine();
236239

237-
// Set ClassMetadata reference on each property
238-
writer.AppendLine("foreach (var prop in classMetadata.Properties)");
239-
writer.AppendLine("{");
240-
writer.Indent();
241-
writer.AppendLine("prop.ClassMetadata = classMetadata;");
242-
writer.AppendLine("prop.ContainingTypeMetadata = classMetadata;");
243-
writer.Unindent();
244-
writer.AppendLine("}");
245-
writer.AppendLine();
240+
if(propertyCount > 0)
241+
{
242+
// Set ClassMetadata reference on each property
243+
writer.AppendLine("foreach (var prop in classMetadata.Properties)");
244+
writer.AppendLine("{");
245+
writer.Indent();
246+
writer.AppendLine("prop.ClassMetadata = classMetadata;");
247+
writer.AppendLine("prop.ContainingTypeMetadata = classMetadata;");
248+
writer.Unindent();
249+
writer.AppendLine("}");
250+
writer.AppendLine();
251+
}
246252

247253
writer.AppendLine("return classMetadata;");
248254

@@ -561,14 +567,16 @@ private static string GenerateParameterMetadataArrayForConstructor(IMethodSymbol
561567
/// <summary>
562568
/// Writes an array of PropertyMetadata objects
563569
/// </summary>
564-
private static void WritePropertyMetadataArray(ICodeWriter writer, INamedTypeSymbol typeSymbol)
570+
private static void WritePropertyMetadataArray(ICodeWriter writer, INamedTypeSymbol typeSymbol, out int propertyCount)
565571
{
566572
var properties = typeSymbol.GetMembers()
567573
.OfType<IPropertySymbol>()
568574
.Where(p => p.DeclaredAccessibility == Accessibility.Public && p.Name != "EqualityContract")
569575
.ToList();
570576

571-
if (!properties.Any())
577+
propertyCount = properties.Count;
578+
579+
if (properties.Count == 0)
572580
{
573581
writer.Append("global::System.Array.Empty<global::TUnit.Core.PropertyMetadata>()");
574582
return;
@@ -601,14 +609,16 @@ private static void WritePropertyMetadataArray(ICodeWriter writer, INamedTypeSym
601609
/// <summary>
602610
/// Generates an array of PropertyMetadata objects
603611
/// </summary>
604-
private static string GeneratePropertyMetadataArray(INamedTypeSymbol typeSymbol, int currentIndentLevel = 0)
612+
private static string GeneratePropertyMetadataArray(INamedTypeSymbol typeSymbol, int currentIndentLevel, out int propertyCount)
605613
{
606614
var properties = typeSymbol.GetMembers()
607615
.OfType<IPropertySymbol>()
608616
.Where(p => p.DeclaredAccessibility == Accessibility.Public && p.Name != "EqualityContract")
609617
.ToList();
610618

611-
if (!properties.Any())
619+
propertyCount = properties.Count;
620+
621+
if (properties.Count == 0)
612622
{
613623
return "global::System.Array.Empty<global::TUnit.Core.PropertyMetadata>()";
614624
}

0 commit comments

Comments
 (0)