Skip to content

Commit 60be919

Browse files
committed
perf(DependencyObjectAvailabilityGenerator): Avoid calculating property names twice
1 parent 64a4eac commit 60be919

File tree

1 file changed

+14
-25
lines changed

1 file changed

+14
-25
lines changed

src/SourceGenerators/Uno.UI.SourceGenerators/BindableTypeProviders/DependencyObjectAvailabilityGenerator.cs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ internal void Generate(GeneratorExecutionContext context)
5050
try
5151
{
5252
var validPlatform = PlatformHelper.IsValidPlatform(context);
53-
var isDesignTime = DesignTimeHelper.IsDesignTime(context);
54-
var isApplication = PlatformHelper.IsApplication(context);
5553

5654
if (!bool.TryParse(context.GetMSBuildPropertyValue("UnoXamlResourcesTrimming"), out _xamlResourcesTrimming))
5755
{
@@ -90,17 +88,15 @@ from module in sym.Modules
9088

9189
modules = modules.Concat(context.Compilation.SourceModule);
9290

93-
var bindableTypes = from module in modules
94-
from type in module.GlobalNamespace.GetNamespaceTypes()
95-
where (
96-
type.GetAllInterfaces().Any(i => SymbolEqualityComparer.Default.Equals(i, _dependencyObjectSymbol))
97-
|| additionalLinkerHintSymbols.Contains(type)
98-
)
99-
select type;
91+
var propertyNames = (from module in modules
92+
from type in module.GlobalNamespace.GetNamespaceTypes()
93+
where (
94+
type.GetAllInterfaces().Any(i => SymbolEqualityComparer.Default.Equals(i, _dependencyObjectSymbol))
95+
|| additionalLinkerHintSymbols.Contains(type)
96+
)
97+
select LinkerHintsHelpers.GetPropertyAvailableName(type.GetFullMetadataName())).ToArray();
10098

101-
bindableTypes = bindableTypes.ToArray();
102-
103-
context.AddSource("DependencyObjectAvailability", GenerateTypeProviders(bindableTypes));
99+
context.AddSource("DependencyObjectAvailability", GenerateTypeProviders(propertyNames));
104100

105101
#if DEBUG
106102
context.AddSource("DependencyObjectAvailability_Debug",
@@ -115,7 +111,7 @@ from type in module.GlobalNamespace.GetNamespaceTypes()
115111
""");
116112
#endif
117113

118-
GenerateLinkerSubstitutionDefinition(bindableTypes, isApplication);
114+
GenerateLinkerSubstitutionDefinition(propertyNames);
119115
}
120116
}
121117
catch (OperationCanceledException)
@@ -189,7 +185,7 @@ private HashSet<INamedTypeSymbol> FindAdditionalLinkerHints(GeneratorExecutionCo
189185
return types;
190186
}
191187

192-
private void GenerateLinkerSubstitutionDefinition(IEnumerable<INamedTypeSymbol> bindableTypes, bool isApplication)
188+
private void GenerateLinkerSubstitutionDefinition(string[] propertyNames)
193189
{
194190
// <linker>
195191
// <assembly fullname="Uno.UI">
@@ -221,10 +217,8 @@ private void GenerateLinkerSubstitutionDefinition(IEnumerable<INamedTypeSymbol>
221217
typeNode.SetAttribute("fullname", LinkerHintsHelpers.GetLinkerHintsClassName(_defaultNamespace));
222218
assemblyNode.AppendChild(typeNode);
223219

224-
foreach (var type in bindableTypes)
220+
foreach (var propertyName in propertyNames)
225221
{
226-
var propertyName = LinkerHintsHelpers.GetPropertyAvailableName(type.GetFullMetadataName());
227-
228222
var methodNode = doc.CreateElement(string.Empty, "method", string.Empty);
229223
methodNode.SetAttribute("signature", $"System.Boolean get_{propertyName}()");
230224
methodNode.SetAttribute("body", "stub");
@@ -240,7 +234,7 @@ private void GenerateLinkerSubstitutionDefinition(IEnumerable<INamedTypeSymbol>
240234
doc.Save(fileName);
241235
}
242236

243-
private string GenerateTypeProviders(IEnumerable<INamedTypeSymbol> bindableTypes)
237+
private string GenerateTypeProviders(string[] propertyNames)
244238
{
245239
var writer = new IndentedStringBuilder();
246240

@@ -252,9 +246,6 @@ private string GenerateTypeProviders(IEnumerable<INamedTypeSymbol> bindableTypes
252246
writer.AppendLine();
253247
writer.AppendLineIndented("#pragma warning disable 618 // Ignore obsolete members warnings");
254248
writer.AppendLineIndented("#pragma warning disable 1591 // Ignore missing XML comment warnings");
255-
writer.AppendLineIndented("using System;");
256-
writer.AppendLineIndented("using System.Linq;");
257-
writer.AppendLineIndented("using System.Diagnostics;");
258249

259250
writer.AppendLineIndented($"// _intermediatePath: {_intermediatePath}");
260251
writer.AppendLineIndented($"// _intermediateOutputPath: {_intermediateOutputPath}");
@@ -263,11 +254,9 @@ private string GenerateTypeProviders(IEnumerable<INamedTypeSymbol> bindableTypes
263254
{
264255
using (writer.BlockInvariant("internal class " + LinkerHintsHelpers.GetLinkerHintsClassName()))
265256
{
266-
foreach (var type in bindableTypes)
257+
foreach (var propertyName in propertyNames)
267258
{
268-
var safeTypeName = LinkerHintsHelpers.GetPropertyAvailableName(type.GetFullMetadataName());
269-
270-
writer.AppendLineIndented($"internal static bool {safeTypeName} => true;");
259+
writer.AppendLineIndented($"internal static bool {propertyName} => true;");
271260
}
272261
}
273262
}

0 commit comments

Comments
 (0)