Skip to content

Commit cfe3418

Browse files
committed
perf: Improve xaml generator performance
1 parent a911ec8 commit cfe3418

29 files changed

+122
-403
lines changed

src/SamplesApp/UITests.Shared/Windows_UI_Xaml_Controls/DateTimePicker/DateTimePicker_Styles.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:local="using:UITests.Shared.Windows_UI_Xaml_Controls.DateTimePicker"
44
xmlns:ios="http://nventive.com/ios"
5-
xmlns:native="using:UIKit;assembly=Xamarin.iOS"
5+
xmlns:native="using:UIKit"
66
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
77
mc:Ignorable="ios">
88

src/SolutionTemplate/Uno.ProjectTemplates.Dotnet/content/unoapp-uwp-net6/.vsconfig

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,92 +3,36 @@
33
"components": [
44
"Microsoft.VisualStudio.Component.CoreEditor",
55
"Microsoft.VisualStudio.Workload.CoreEditor",
6-
"Microsoft.NetCore.Component.Runtime.3.1",
76
"Microsoft.NetCore.Component.SDK",
8-
"Microsoft.VisualStudio.Component.NuGet",
9-
"Microsoft.VisualStudio.Component.Roslyn.Compiler",
10-
"Microsoft.VisualStudio.Component.Roslyn.LanguageServices",
117
"Microsoft.NetCore.Component.DevelopmentTools",
128
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions",
13-
"Microsoft.VisualStudio.Component.DockerTools",
149
"Microsoft.NetCore.Component.Web",
1510
"Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
16-
"Microsoft.VisualStudio.Component.TypeScript.4.0",
17-
"Microsoft.VisualStudio.Component.JavaScript.TypeScript",
18-
"Microsoft.VisualStudio.Component.JavaScript.Diagnostics",
19-
"Microsoft.Component.MSBuild",
2011
"Microsoft.VisualStudio.Component.TextTemplating",
21-
"Component.Microsoft.VisualStudio.RazorExtension",
2212
"Microsoft.VisualStudio.Component.IISExpress",
23-
"Microsoft.VisualStudio.Component.SQL.ADAL",
24-
"Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime",
25-
"Microsoft.VisualStudio.Component.Common.Azure.Tools",
26-
"Microsoft.VisualStudio.Component.SQL.CLR",
27-
"Microsoft.VisualStudio.Component.MSODBC.SQL",
28-
"Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils",
29-
"Microsoft.VisualStudio.Component.ManagedDesktop.Core",
30-
"Microsoft.VisualStudio.Component.SQL.SSDT",
31-
"Microsoft.VisualStudio.Component.SQL.DataSources",
3213
"Component.Microsoft.Web.LibraryManager",
3314
"Microsoft.VisualStudio.ComponentGroup.Web",
3415
"Microsoft.VisualStudio.Component.Web",
35-
"Microsoft.VisualStudio.Component.IntelliCode",
36-
"Component.Microsoft.VisualStudio.LiveShare",
3716
"Microsoft.VisualStudio.ComponentGroup.Web.Client",
38-
"Microsoft.Net.ComponentGroup.TargetingPacks.Common",
39-
"Component.Microsoft.VisualStudio.Web.AzureFunctions",
40-
"Microsoft.VisualStudio.ComponentGroup.AzureFunctions",
41-
"Microsoft.VisualStudio.Component.Azure.Compute.Emulator",
42-
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
43-
"Microsoft.VisualStudio.Component.Azure.ClientLibs",
44-
"Microsoft.VisualStudio.Component.Azure.AuthoringTools",
45-
"Microsoft.VisualStudio.Component.CloudExplorer",
46-
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
47-
"Microsoft.VisualStudio.Component.DiagnosticTools",
48-
"Microsoft.VisualStudio.Component.EntityFramework",
49-
"Microsoft.VisualStudio.Component.AspNet45",
50-
"Microsoft.VisualStudio.Component.AppInsights.Tools",
51-
"Microsoft.VisualStudio.Component.WebDeploy",
5217
"Microsoft.VisualStudio.Workload.NetWeb",
5318
"Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites",
54-
"Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools",
55-
"Microsoft.VisualStudio.Component.Azure.Waverton",
56-
"Microsoft.Component.Azure.DataLake.Tools",
57-
"Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools",
58-
"Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools",
59-
"Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools",
60-
"Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices",
61-
"Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools",
6219
"Microsoft.VisualStudio.Workload.Azure",
63-
"Microsoft.VisualStudio.Component.VC.CoreIde",
64-
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
65-
"Microsoft.VisualStudio.Component.Graphics.Tools",
6620
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
6721
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
68-
"Microsoft.ComponentGroup.Blend",
6922
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
7023
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
7124
"Microsoft.VisualStudio.Workload.ManagedDesktop",
72-
"Microsoft.VisualStudio.Component.Windows10SDK.18362",
7325
"Microsoft.Component.NetFX.Native",
74-
"Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard",
7526
"Microsoft.VisualStudio.Component.Graphics",
76-
"Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin",
77-
"Microsoft.VisualStudio.ComponentGroup.UWP.Support",
78-
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
79-
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
80-
"Microsoft.VisualStudio.Component.VC.Tools.ARM",
81-
"Microsoft.VisualStudio.ComponentGroup.UWP.VC",
82-
"Microsoft.VisualStudio.Workload.Universal",
8327
"Component.OpenJDK",
8428
"Microsoft.VisualStudio.Component.MonoDebugger",
8529
"Microsoft.VisualStudio.Component.Merq",
8630
"Component.Xamarin.RemotedSimulator",
8731
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine",
8832
"Component.Xamarin",
89-
"Component.Android.SDK28",
33+
"Component.Android.SDK32",
9034
"Microsoft.VisualStudio.Workload.NetCrossPlat",
9135
"Microsoft.VisualStudio.Workload.NetCoreTools",
92-
"Microsoft.VisualStudio.ComponentGroup.Maui.All",
36+
"Microsoft.VisualStudio.ComponentGroup.Maui.All"
9337
]
9438
}

src/SolutionTemplate/Uno.ProjectTemplates.Dotnet/content/unoapp/.vsconfig

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,92 +3,36 @@
33
"components": [
44
"Microsoft.VisualStudio.Component.CoreEditor",
55
"Microsoft.VisualStudio.Workload.CoreEditor",
6-
"Microsoft.NetCore.Component.Runtime.3.1",
76
"Microsoft.NetCore.Component.SDK",
8-
"Microsoft.VisualStudio.Component.NuGet",
9-
"Microsoft.VisualStudio.Component.Roslyn.Compiler",
10-
"Microsoft.VisualStudio.Component.Roslyn.LanguageServices",
117
"Microsoft.NetCore.Component.DevelopmentTools",
128
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions",
13-
"Microsoft.VisualStudio.Component.DockerTools",
149
"Microsoft.NetCore.Component.Web",
1510
"Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
16-
"Microsoft.VisualStudio.Component.TypeScript.4.0",
17-
"Microsoft.VisualStudio.Component.JavaScript.TypeScript",
18-
"Microsoft.VisualStudio.Component.JavaScript.Diagnostics",
19-
"Microsoft.Component.MSBuild",
2011
"Microsoft.VisualStudio.Component.TextTemplating",
21-
"Component.Microsoft.VisualStudio.RazorExtension",
2212
"Microsoft.VisualStudio.Component.IISExpress",
23-
"Microsoft.VisualStudio.Component.SQL.ADAL",
24-
"Microsoft.VisualStudio.Component.SQL.LocalDB.Runtime",
25-
"Microsoft.VisualStudio.Component.Common.Azure.Tools",
26-
"Microsoft.VisualStudio.Component.SQL.CLR",
27-
"Microsoft.VisualStudio.Component.MSODBC.SQL",
28-
"Microsoft.VisualStudio.Component.MSSQL.CMDLnUtils",
29-
"Microsoft.VisualStudio.Component.ManagedDesktop.Core",
30-
"Microsoft.VisualStudio.Component.SQL.SSDT",
31-
"Microsoft.VisualStudio.Component.SQL.DataSources",
3213
"Component.Microsoft.Web.LibraryManager",
3314
"Microsoft.VisualStudio.ComponentGroup.Web",
3415
"Microsoft.VisualStudio.Component.Web",
35-
"Microsoft.VisualStudio.Component.IntelliCode",
36-
"Component.Microsoft.VisualStudio.LiveShare",
3716
"Microsoft.VisualStudio.ComponentGroup.Web.Client",
38-
"Microsoft.Net.ComponentGroup.TargetingPacks.Common",
39-
"Component.Microsoft.VisualStudio.Web.AzureFunctions",
40-
"Microsoft.VisualStudio.ComponentGroup.AzureFunctions",
41-
"Microsoft.VisualStudio.Component.Azure.Compute.Emulator",
42-
"Microsoft.VisualStudio.Component.Azure.Storage.Emulator",
43-
"Microsoft.VisualStudio.Component.Azure.ClientLibs",
44-
"Microsoft.VisualStudio.Component.Azure.AuthoringTools",
45-
"Microsoft.VisualStudio.Component.CloudExplorer",
46-
"Microsoft.VisualStudio.ComponentGroup.Web.CloudTools",
47-
"Microsoft.VisualStudio.Component.DiagnosticTools",
48-
"Microsoft.VisualStudio.Component.EntityFramework",
49-
"Microsoft.VisualStudio.Component.AspNet45",
50-
"Microsoft.VisualStudio.Component.AppInsights.Tools",
51-
"Microsoft.VisualStudio.Component.WebDeploy",
5217
"Microsoft.VisualStudio.Workload.NetWeb",
5318
"Microsoft.VisualStudio.ComponentGroup.Azure.Prerequisites",
54-
"Microsoft.VisualStudio.Component.Azure.Waverton.BuildTools",
55-
"Microsoft.VisualStudio.Component.Azure.Waverton",
56-
"Microsoft.Component.Azure.DataLake.Tools",
57-
"Microsoft.VisualStudio.Component.Azure.Kubernetes.Tools",
58-
"Microsoft.VisualStudio.Component.Azure.ResourceManager.Tools",
59-
"Microsoft.VisualStudio.ComponentGroup.Azure.ResourceManager.Tools",
60-
"Microsoft.VisualStudio.ComponentGroup.Azure.CloudServices",
61-
"Microsoft.VisualStudio.Component.Azure.ServiceFabric.Tools",
6219
"Microsoft.VisualStudio.Workload.Azure",
63-
"Microsoft.VisualStudio.Component.VC.CoreIde",
64-
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
65-
"Microsoft.VisualStudio.Component.Graphics.Tools",
6620
"Microsoft.VisualStudio.Component.Windows10SDK.19041",
6721
"Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
68-
"Microsoft.ComponentGroup.Blend",
6922
"Microsoft.VisualStudio.Component.Debugger.JustInTime",
7023
"Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
7124
"Microsoft.VisualStudio.Workload.ManagedDesktop",
72-
"Microsoft.VisualStudio.Component.Windows10SDK.18362",
7325
"Microsoft.Component.NetFX.Native",
74-
"Microsoft.VisualStudio.ComponentGroup.UWP.NetCoreAndStandard",
7526
"Microsoft.VisualStudio.Component.Graphics",
76-
"Microsoft.VisualStudio.ComponentGroup.UWP.Xamarin",
77-
"Microsoft.VisualStudio.ComponentGroup.UWP.Support",
78-
"Microsoft.VisualStudio.Component.VC.Tools.ARM64",
79-
"Microsoft.VisualStudio.Component.UWP.VC.ARM64",
80-
"Microsoft.VisualStudio.Component.VC.Tools.ARM",
81-
"Microsoft.VisualStudio.ComponentGroup.UWP.VC",
82-
"Microsoft.VisualStudio.Workload.Universal",
8327
"Component.OpenJDK",
8428
"Microsoft.VisualStudio.Component.MonoDebugger",
8529
"Microsoft.VisualStudio.Component.Merq",
8630
"Component.Xamarin.RemotedSimulator",
8731
"Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.TemplateEngine",
8832
"Component.Xamarin",
89-
"Component.Android.SDK28",
33+
"Component.Android.SDK32",
9034
"Microsoft.VisualStudio.Workload.NetCrossPlat",
9135
"Microsoft.VisualStudio.Workload.NetCoreTools",
92-
"Microsoft.VisualStudio.ComponentGroup.Maui.All",
36+
"Microsoft.VisualStudio.ComponentGroup.Maui.All"
9337
]
9438
}

src/SourceGenerators/SourceGeneratorHelpers/Helpers/CompilationExtensions.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/SourceGenerators/SourceGeneratorHelpers/Helpers/RoslynMetadataHelper.cs

Lines changed: 4 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Text;
4-
using System.Threading.Tasks;
5-
using Uno.Extensions;
6-
using Microsoft.CodeAnalysis;
73
using System.Linq;
4+
using Microsoft.CodeAnalysis;
85
using Microsoft.CodeAnalysis.CSharp;
96
using Microsoft.CodeAnalysis.CSharp.Syntax;
10-
using System.Diagnostics;
11-
using System.Collections.Concurrent;
7+
using Uno.Extensions;
128

139
#if NETFRAMEWORK
14-
using Uno.SourceGeneration;
15-
using ISourceGenerator = Uno.SourceGeneration.SourceGenerator;
1610
using GeneratorExecutionContext = Uno.SourceGeneration.GeneratorExecutionContext;
1711
#endif
1812

@@ -23,28 +17,22 @@ internal class RoslynMetadataHelper
2317
private const string AdditionalTypesFileName = "additionalTypes.cs";
2418

2519
private readonly INamedTypeSymbol _nullableSymbol;
26-
private readonly Dictionary<string, INamedTypeSymbol> _legacyTypes;
27-
private readonly Func<string, ITypeSymbol[]> _findTypesByName;
2820
private readonly Func<string, ITypeSymbol> _findTypeByFullName;
2921
private readonly Func<INamedTypeSymbol, INamedTypeSymbol[]> _getAllTypesAttributedWith;
3022
private readonly Dictionary<string, INamedTypeSymbol> _additionalTypesMap;
31-
private readonly IReadOnlyDictionary<string, INamedTypeSymbol[]> _namedSymbolsLookup;
23+
3224
public Compilation Compilation { get; }
3325

3426
public string AssemblyName => Compilation.AssemblyName;
3527

36-
public RoslynMetadataHelper(GeneratorExecutionContext context, Dictionary<string, string> legacyTypes = null)
28+
public RoslynMetadataHelper(GeneratorExecutionContext context)
3729
{
3830
Compilation = context.Compilation;
3931
_additionalTypesMap = GenerateAdditionalTypesMap();
4032

41-
_findTypesByName = Funcs.Create<string, ITypeSymbol[]>(SourceFindTypesByName).AsLockedMemoized();
4233
_findTypeByFullName = Funcs.Create<string, ITypeSymbol>(SourceFindTypeByFullName).AsLockedMemoized();
43-
_legacyTypes = BuildLegacyTypes(legacyTypes);
4434
_getAllTypesAttributedWith = Funcs.Create<INamedTypeSymbol, INamedTypeSymbol[]>(SourceGetAllTypesAttributedWith).AsLockedMemoized();
4535
_nullableSymbol = Compilation.GetSpecialType(SpecialType.System_Nullable_T);
46-
47-
_namedSymbolsLookup = Compilation.GetSymbolNameLookup();
4836
}
4937

5038
private Dictionary<string, INamedTypeSymbol> GenerateAdditionalTypesMap()
@@ -86,65 +74,13 @@ INamedTypeSymbol GetFieldSymbol(FieldDeclarationSyntax fieldSyntax)
8674
}
8775
}
8876

89-
private Dictionary<string, INamedTypeSymbol> BuildLegacyTypes(Dictionary<string, string> legacyTypes)
90-
=> legacyTypes
91-
?.Select(t => (Key: t.Key, Metadata: Compilation.GetTypeByMetadataName(t.Value)))
92-
?.ToDictionary(t => t.Key, t => t.Metadata)
93-
?? new Dictionary<string, INamedTypeSymbol>();
94-
95-
public ITypeSymbol[] FindTypesByName(string name)
96-
{
97-
if (name.HasValue())
98-
{
99-
return _findTypesByName(name);
100-
}
101-
102-
return Array.Empty<ITypeSymbol>();
103-
}
104-
105-
private ITypeSymbol[] SourceFindTypesByName(string name)
106-
{
107-
var legacyType = _legacyTypes.UnoGetValueOrDefault(name);
108-
109-
if (name.HasValue())
110-
{
111-
// This validation ensure that the project has been loaded.
112-
Compilation.Validation().NotNull("Compilation");
113-
114-
var results = Compilation.GetSymbolsWithName(name, SymbolFilter.Type).OfType<INamedTypeSymbol>();
115-
116-
if (_namedSymbolsLookup.TryGetValue(name, out var metadataResults))
117-
{
118-
results = results.Concat(metadataResults);
119-
}
120-
121-
return results
122-
.Where(r => r.Kind != SymbolKind.ErrorType && r.TypeArguments.Length == 0)
123-
// Apply legacy
124-
.Where(r => legacyType == null || r.OriginalDefinition.Name != name || SymbolEqualityComparer.Default.Equals(r.OriginalDefinition, legacyType))
125-
.ToArray() ?? Array.Empty<ITypeSymbol>();
126-
}
127-
128-
return Array.Empty<ITypeSymbol>();
129-
}
130-
131-
public ITypeSymbol FindTypeByName(string name)
132-
{
133-
return FindTypesByName(name).FirstOrDefault();
134-
}
135-
13677
public ITypeSymbol FindTypeByFullName(string fullName)
13778
{
13879
return _findTypeByFullName(fullName);
13980
}
14081

14182
private ITypeSymbol SourceFindTypeByFullName(string fullName)
14283
{
143-
if (_legacyTypes.TryGetValue(GetTypeNameFromFullTypeName(fullName), out var legacyType))
144-
{
145-
return legacyType;
146-
}
147-
14884
var symbol = Compilation.GetTypeByMetadataName(fullName);
14985

15086
if (symbol?.Kind == SymbolKind.ErrorType)
@@ -189,18 +125,6 @@ private ITypeSymbol SourceFindTypeByFullName(string fullName)
189125
return symbol;
190126
}
191127

192-
private static string GetTypeNameFromFullTypeName(string fullName)
193-
{
194-
int index = fullName.LastIndexOf('.');
195-
196-
if (index != -1)
197-
{
198-
return fullName.Substring(index + 1);
199-
}
200-
201-
return fullName;
202-
}
203-
204128
public ITypeSymbol GetTypeByFullName(string fullName)
205129
{
206130
var symbol = FindTypeByFullName(fullName);

src/SourceGenerators/SourceGeneratorHelpers/Helpers/SymbolExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ public static IEnumerable<IFieldSymbol> GetFieldsWithAttribute(this ITypeSymbol
344344
return property?.GetAttributes().FirstOrDefault(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, attributeClassSymbol));
345345
}
346346

347-
public static AttributeData? FindAttributeFlattened(this ISymbol? property, INamedTypeSymbol attributeClassSymbol)
347+
public static AttributeData? FindAttributeFlattened(this ISymbol? property, INamedTypeSymbol? attributeClassSymbol)
348348
{
349349
return property?.GetAllAttributes().FirstOrDefault(a => SymbolEqualityComparer.Default.Equals(a.AttributeClass, attributeClassSymbol));
350350
}

src/SourceGenerators/SourceGeneratorHelpers/SourceGeneratorHelpers.projitems

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
</PropertyGroup>
1010
<ItemGroup>
1111
<Compile Include="$(MSBuildThisFileDirectory)Helpers\AnalyzerSuppressions.cs" />
12-
<Compile Include="$(MSBuildThisFileDirectory)Helpers\CompilationExtensions.cs" />
1312
<Compile Include="$(MSBuildThisFileDirectory)Helpers\DependenciesInitializer.cs" />
1413
<Compile Include="$(MSBuildThisFileDirectory)Helpers\DesignTimeHelper.cs" />
1514
<Compile Include="$(MSBuildThisFileDirectory)Helpers\GeneratorExecutionContextExtensions.cs" />

0 commit comments

Comments
 (0)