Skip to content

Commit 9e952b2

Browse files
authored
avoid some string alloc by using AppendJoin (#4971)
1 parent 731a341 commit 9e952b2

File tree

5 files changed

+25
-9
lines changed

5 files changed

+25
-9
lines changed

TUnit.Aspire/AspireFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,13 +445,13 @@ private async Task WaitForResourcesWithFailFastAsync(
445445

446446
var sb = new StringBuilder();
447447
sb.Append("Resources not ready: [");
448-
sb.Append(string.Join(", ", pending.Select(n => $"'{n}'")));
448+
sb.AppendJoin(", ", pending.Select(n => $"'{n}'"));
449449
sb.Append(']');
450450

451451
if (readySet.Count > 0)
452452
{
453453
sb.Append(". Resources ready: [");
454-
sb.Append(string.Join(", ", readySet.Select(n => $"'{n}'")));
454+
sb.AppendJoin(", ", readySet.Select(n => $"'{n}'"));
455455
sb.Append(']');
456456
}
457457

TUnit.Assertions.SourceGenerator/Generators/AssertionMethodGenerator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ private static void GenerateAssertConditionClassForMethod(SourceProductionContex
780780
// Extension method - call it like an instance method
781781
sourceBuilder.Append($" var result = actualValue.{methodName}(");
782782
var paramList = parameters.Select(p => $"_{p.Name}").ToArray();
783-
sourceBuilder.Append(string.Join(", ", paramList));
783+
sourceBuilder.AppendJoin(", ", paramList);
784784
sourceBuilder.AppendLine(");");
785785
}
786786
else if (attributeData.TreatAsInstance)
@@ -829,7 +829,7 @@ private static void GenerateAssertConditionClassForMethod(SourceProductionContex
829829
// Instance method on the target type itself
830830
sourceBuilder.Append($" var result = actualValue.{methodName}(");
831831
var paramList = parameters.Select(p => $"_{p.Name}").ToArray();
832-
sourceBuilder.Append(string.Join(", ", paramList));
832+
sourceBuilder.AppendJoin(", ", paramList);
833833
sourceBuilder.AppendLine(");");
834834
}
835835
}
@@ -854,7 +854,7 @@ private static void GenerateAssertConditionClassForMethod(SourceProductionContex
854854
sourceBuilder.AppendLine($" var instance = new {containingType.ToDisplayString()}();");
855855
sourceBuilder.Append($" var result = instance.{methodName}(");
856856
var paramList = parameters.Select(p => $"_{p.Name}").ToArray();
857-
sourceBuilder.Append(string.Join(", ", paramList));
857+
sourceBuilder.AppendJoin(", ", paramList);
858858
sourceBuilder.AppendLine(");");
859859
}
860860
}
@@ -863,7 +863,7 @@ private static void GenerateAssertConditionClassForMethod(SourceProductionContex
863863
// Default instance method behavior
864864
sourceBuilder.Append($" var result = actualValue.{methodName}(");
865865
var paramList = parameters.Select(p => $"_{p.Name}").ToArray();
866-
sourceBuilder.Append(string.Join(", ", paramList));
866+
sourceBuilder.AppendJoin(", ", paramList);
867867
sourceBuilder.AppendLine(");");
868868
}
869869
}

TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public static string GenerateAttributeInstantiation(AttributeData attr, Immutabl
199199
}
200200
}
201201

202-
writer.Append(string.Join(", ", argStrings));
202+
writer.AppendJoin(", ", argStrings);
203203
}
204204

205205
writer.Append(")");
@@ -208,7 +208,7 @@ public static string GenerateAttributeInstantiation(AttributeData attr, Immutabl
208208
{
209209
writer.Append(" { ");
210210
var namedArgs = attr.NamedArguments.Select(na => $"{na.Key} = {TypedConstantParser.GetRawTypedConstantValue(na.Value)}");
211-
writer.Append(string.Join(", ", namedArgs));
211+
writer.AppendJoin(", ", namedArgs);
212212
writer.Append(" }");
213213
}
214214

@@ -311,7 +311,7 @@ public static string GenerateTestAttributes(IMethodSymbol methodSymbol)
311311
attributeStrings.Add(GenerateAttributeInstantiation(attr));
312312
}
313313

314-
writer.Append(string.Join(", ", attributeStrings));
314+
writer.AppendJoin(", ", attributeStrings);
315315
writer.AppendLine(" },");
316316
}
317317

TUnit.Core.SourceGenerator/CodeWriter.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,17 @@ public ICodeWriter Append(string text)
7070
return this;
7171
}
7272

73+
public ICodeWriter AppendJoin<T>(string separator, IEnumerable<T> values)
74+
{
75+
if (_isNewLine)
76+
{
77+
_builder.Append(GetIndentation(_indentLevel));
78+
_isNewLine = false;
79+
}
80+
_builder.AppendJoin(separator, values);
81+
return this;
82+
}
83+
7384
public int IndentLevel => _indentLevel;
7485

7586
/// <summary>

TUnit.Core.SourceGenerator/ICodeWriter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ public interface ICodeWriter : IDisposable
1616
/// </summary>
1717
ICodeWriter Append(string text);
1818

19+
/// <summary>
20+
/// Appends the string representation of each element separated by the given separator.
21+
/// </summary>
22+
ICodeWriter AppendJoin<T>(string separator, IEnumerable<T> values);
23+
1924
/// <summary>
2025
/// Appends multiple lines of code.
2126
/// </summary>

0 commit comments

Comments
 (0)