From 258f84d01efb7cea534491046bcbb0b0b63dad98 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 15 Jan 2025 16:49:46 -0500 Subject: [PATCH] fix: Fix invalid code gen of top resource dictionnaries --- .../Given_HotReloadService.cs | 8 ++--- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 4 ++- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 30 +++++++++---------- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 17 ++++++----- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 4 ++- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 4 ++- ...ionary_b7707bcf1e73425b710b6a5d04177088.cs | 8 +++-- ...ionary_92716e07ff456818f6d4125e055d4d57.cs | 21 +++++-------- ...inPage_d6cd66944958ced0c513e0a04797b51d.cs | 7 ++--- ...mplate_66bf0a54f1801c397a6fa4930a237eca.cs | 7 ++--- ..._Event_6d62c5ee15120ed189e095faf6d37e20.cs | 7 ++--- .../XamlGenerator/Subclass.cs | 16 +--------- .../XamlGenerator/XamlFileGenerator.cs | 29 +++++++++++------- 13 files changed, 79 insertions(+), 83 deletions(-) diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/MetadataUpdateTests/Given_HotReloadService.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/MetadataUpdateTests/Given_HotReloadService.cs index 69b36c196b5e..c3890597245b 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/MetadataUpdateTests/Given_HotReloadService.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/MetadataUpdateTests/Given_HotReloadService.cs @@ -62,18 +62,18 @@ public record DiagnosticsResult(string Id); foreach (var scenarioFolder in Directory.EnumerateDirectories(ScenariosFolder, "*.*", SearchOption.TopDirectoryOnly)) { var scenarioName = Path.GetFileName(scenarioFolder); - var path = Path.Combine(scenarioFolder, "Scenario.json"); + var scenarioConfig = Path.Combine(scenarioFolder, "Scenario.json"); #if DEBUG && false - if (!path.Contains("When_DataTemplate_Root_Remove")) + if (!scenarioName.Contains("When_DataTemplate_Event_Add")) { continue; } #endif - if (File.Exists(path)) + if (File.Exists(scenarioConfig)) { - var scenariosDescriptor = ReadScenarioConfig(path); + var scenariosDescriptor = ReadScenarioConfig(scenarioConfig); if (scenariosDescriptor is not null) { diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SBUIIOFFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SBUIIOFFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index 6232e61aca02..1f52182fe9cd 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SBUIIOFFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SBUIIOFFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -105,7 +105,9 @@ private void ApplyMethod_3(global::Microsoft.UI.Xaml.Controls.Page __p1, MainPag } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage + { + } private interface IMainPage_Bindings { void Initialize(); diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIIOFDOTAFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIIOFDOTAFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index 7a031a142323..8411aad58b33 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIIOFDOTAFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIIOFDOTAFE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -104,7 +104,7 @@ private void InitializeComponent() new global::Uno.UI.Xaml.WeakResourceInitializer(this, __ResourceOwner_1 => { return - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new SubClasses._MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage.SC0().Build(__owner) ) .GenericApply(__that, __nameScope, (ApplyMethod_6 )) ; } @@ -116,7 +116,7 @@ private void InitializeComponent() { IsParsing = true, Name = "TheListView", - HeaderTemplate = new global::Microsoft.UI.Xaml.DataTemplate(this, (__owner) => new SubClasses._MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC1().Build(__owner) + HeaderTemplate = new global::Microsoft.UI.Xaml.DataTemplate(this, (__owner) => new __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage.SC1().Build(__owner) ) .GenericApply(__that, __nameScope, (ApplyMethod_7 )) , // Source 0\MainPage.xaml (Line 40:4) @@ -323,13 +323,12 @@ private void ApplyMethod_10(global::Microsoft.UI.Xaml.Controls.Page __p1, MainPa } } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/"; @@ -400,7 +399,7 @@ private void __UpdateBindingsAndResources(global::Microsoft.UI.Xaml.FrameworkEle var owner = this; _component_0.UpdateResourceBindings(); } - private void ApplyMethod_17(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_17(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { __p1.SetBinding( global::Microsoft.UI.Xaml.Controls.TextBlock.TextProperty, @@ -413,7 +412,7 @@ private void ApplyMethod_17(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, _ __p1.CreationComplete(); } - private void ApplyMethod_18(global::Microsoft.UI.Xaml.Controls.Button __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_18(global::Microsoft.UI.Xaml.Controls.Button __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { /* _isTopLevelDictionary:False */ __that._component_0 = __p1; @@ -422,22 +421,21 @@ private void ApplyMethod_18(global::Microsoft.UI.Xaml.Controls.Button __p1, _Mai __p1.CreationComplete(); } - private void ApplyMethod_19(global::Microsoft.UI.Xaml.Controls.StackPanel __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_19(global::Microsoft.UI.Xaml.Controls.StackPanel __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { global::Uno.UI.FrameworkElementHelper.SetBaseUri(__p1, __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d, "file:///C:/Project/0/MainPage.xaml", 14, 8); __p1.CreationComplete(); } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_MyProject__ResourcesSC0_TestReproMainPage + { + } } - } - partial class SubClasses - { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC1 + public class SC1 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/"; @@ -470,14 +468,16 @@ public _View Build(object __ResourceOwner_1) } return __rootInstance; } - private void ApplyMethod_20(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC1 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_20(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, SC1 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { global::Uno.UI.FrameworkElementHelper.SetBaseUri(__p1, __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d, "file:///C:/Project/0/MainPage.xaml", 43, 10); __p1.CreationComplete(); } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_MyProject__ResourcesSC1_TestReproMainPage + { + } } } private global::Microsoft.UI.Xaml.Markup.ComponentHolder _component_0_Holder { get; } = new global::Microsoft.UI.Xaml.Markup.ComponentHolder(isWeak: true); diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLR/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLR/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index cdea90203bbf..696642ab9a10 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLR/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLR/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -104,7 +104,7 @@ private void InitializeComponent() new global::Uno.UI.Xaml.WeakResourceInitializer(this, __ResourceOwner_1 => { return - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new SubClasses._MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage.SC0().Build(__owner) ) .GenericApply(__that, __nameScope, (ApplyMethod_6 )) ; } @@ -173,13 +173,12 @@ private void ApplyMethod_9(global::Microsoft.UI.Xaml.Controls.Page __p1, MainPag } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/"; @@ -250,7 +249,7 @@ private void __UpdateBindingsAndResources(global::Microsoft.UI.Xaml.FrameworkEle var owner = this; _component_0.UpdateResourceBindings(); } - private void ApplyMethod_10(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_10(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { __p1.SetBinding( global::Microsoft.UI.Xaml.Controls.TextBlock.TextProperty, @@ -263,7 +262,7 @@ private void ApplyMethod_10(global::Microsoft.UI.Xaml.Controls.TextBlock __p1, _ __p1.CreationComplete(); } - private void ApplyMethod_11(global::Microsoft.UI.Xaml.Controls.Button __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_11(global::Microsoft.UI.Xaml.Controls.Button __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { /* _isTopLevelDictionary:False */ __that._component_0 = __p1; @@ -272,14 +271,16 @@ private void ApplyMethod_11(global::Microsoft.UI.Xaml.Controls.Button __p1, _Mai __p1.CreationComplete(); } - private void ApplyMethod_12(global::Microsoft.UI.Xaml.Controls.StackPanel __p1, _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) + private void ApplyMethod_12(global::Microsoft.UI.Xaml.Controls.StackPanel __p1, SC0 __that, global::Microsoft.UI.Xaml.NameScope __nameScope) { global::Uno.UI.FrameworkElementHelper.SetBaseUri(__p1, __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d, "file:///C:/Project/0/MainPage.xaml", 14, 8); __p1.CreationComplete(); } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_MyProject__ResourcesSC0_TestReproMainPage + { + } } } private global::Microsoft.UI.Xaml.Markup.ComponentHolder _component_0_Holder { get; } = new global::Microsoft.UI.Xaml.Markup.ComponentHolder(isWeak: true); diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLS/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLS/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index c906bd3d3ce1..18ac3dcda7a8 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLS/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFPLS/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -156,7 +156,9 @@ private void ApplyMethod_8(global::Microsoft.UI.Xaml.Controls.Page __p1, MainPag } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage + { + } private global::Microsoft.UI.Xaml.Markup.ComponentHolder _component_0_Holder { get; } = new global::Microsoft.UI.Xaml.Markup.ComponentHolder(isWeak: true); private global::Microsoft.UI.Xaml.Controls.Page _component_0 { diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFRT/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFRT/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index f22baf0ea692..99d4ec4fed63 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFRT/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFRT/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -122,7 +122,9 @@ private void ApplyMethod_3(global::Microsoft.UI.Xaml.Controls.Page __p1, MainPag } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage + { + } private global::Microsoft.UI.Xaml.Markup.ComponentHolder _component_0_Holder { get; } = new global::Microsoft.UI.Xaml.Markup.ComponentHolder(isWeak: true); private global::Microsoft.UI.Xaml.Controls.Page _component_0 { diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFTLRD/XamlCodeGenerator_MyDictionary_b7707bcf1e73425b710b6a5d04177088.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFTLRD/XamlCodeGenerator_MyDictionary_b7707bcf1e73425b710b6a5d04177088.cs index 5d9d6aa4a23c..0b5f097c6e97 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFTLRD/XamlCodeGenerator_MyDictionary_b7707bcf1e73425b710b6a5d04177088.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/SOSLIOFTLRD/XamlCodeGenerator_MyDictionary_b7707bcf1e73425b710b6a5d04177088.cs @@ -47,7 +47,9 @@ public void InitializeComponent() } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; + private class __MyDictionary_b7707bcf1e73425b710b6a5d04177088_TestNamespaceTestClass + { + } } } namespace MyProject @@ -119,5 +121,7 @@ public ResourceDictionarySingleton__MyDictionary_b7707bcf1e73425b710b6a5d0417708 namespace MyProject.__Resources { [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - internal partial class SubClasses; + internal class __MyDictionary_b7707bcf1e73425b710b6a5d04177088_MyDictionaryRD + { + } } diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TDBMIDTIRD/XamlCodeGenerator_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TDBMIDTIRD/XamlCodeGenerator_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57.cs index d2403e893330..b4ed794ea47f 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TDBMIDTIRD/XamlCodeGenerator_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TDBMIDTIRD/XamlCodeGenerator_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57.cs @@ -48,7 +48,7 @@ public void InitializeComponent() new global::Uno.UI.Xaml.WeakResourceInitializer(this, __ResourceOwner_1 => { return - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new SubClasses._MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_TestReproMyResourceDictionarySC0().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_TestReproMyResourceDictionary.SC0().Build(__owner) ) ; } ) @@ -56,13 +56,12 @@ public void InitializeComponent() } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_TestReproMyResourceDictionary { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_TestReproMyResourceDictionarySC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57 = "ms-appx:///TestProject/"; @@ -196,7 +195,7 @@ public ResourceDictionarySingleton__MyResourceDictionary_92716e07ff456818f6d4125 [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] private object Get_1(object __ResourceOwner_1) => - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __Resources.SubClasses._MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRDSC1().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __Resources.__MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRD.SC1().Build(__owner) ) ; private global::Microsoft.UI.Xaml.ResourceDictionary _MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_ResourceDictionary; @@ -217,7 +216,7 @@ private object Get_1(object __ResourceOwner_1) => new global::Uno.UI.Xaml.WeakResourceInitializer(this, __ResourceOwner_1 => { return - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __Resources.SubClasses._MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRDSC2().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __Resources.__MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRD.SC2().Build(__owner) ) ; } ) @@ -240,13 +239,12 @@ private object Get_1(object __ResourceOwner_1) => namespace MyProject.__Resources { [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - internal partial class SubClasses; - partial class SubClasses + internal class __MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRD { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRDSC1 + public class SC1 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57 = "ms-appx:///TestProject/"; @@ -337,13 +335,10 @@ private static bool TryGetInstance_xBind_2(global::TestRepro.MyModel ___tctx, ou return true; } } - } - partial class SubClasses - { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MyResourceDictionary_92716e07ff456818f6d4125e055d4d57_MyResourceDictionaryRDSC2 + public class SC2 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MyResourceDictionary_92716e07ff456818f6d4125e055d4d57 = "ms-appx:///TestProject/"; diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TTIXLE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TTIXLE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs index 6f846fd1bd79..d5ce0df5afdf 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TTIXLE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/TTIXLE/XamlCodeGenerator_MainPage_d6cd66944958ced0c513e0a04797b51d.cs @@ -99,7 +99,7 @@ private void InitializeComponent() { IsParsing = true, Name = "inner2", - Template = new global::Microsoft.UI.Xaml.Controls.ControlTemplate(this, (__owner) => new SubClasses._MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0().Build(__owner) + Template = new global::Microsoft.UI.Xaml.Controls.ControlTemplate(this, (__owner) => new __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage.SC0().Build(__owner) ) , // Source 0\MainPage.xaml (Line 15:5) } @@ -321,13 +321,12 @@ private void __UpdateBindingsAndResources(global::Microsoft.UI.Xaml.FrameworkEle } } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPage { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _MainPage_d6cd66944958ced0c513e0a04797b51d_TestReproMainPageSC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/"; diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WBENIT/XamlCodeGenerator_Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WBENIT/XamlCodeGenerator_Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca.cs index f8f39095ef68..0d6f3374454c 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WBENIT/XamlCodeGenerator_Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WBENIT/XamlCodeGenerator_Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca.cs @@ -59,7 +59,7 @@ private void InitializeComponent() IsParsing = true, Name = "topLevel", Tag = @"42", - ContentTemplate = new global::Microsoft.UI.Xaml.DataTemplate(this, (__owner) => new SubClasses._Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca_UnoUITestsWindows_UI_Xaml_DataBindingTestsControlsBinding_ElementName_In_TemplateSC0().Build(__owner) + ContentTemplate = new global::Microsoft.UI.Xaml.DataTemplate(this, (__owner) => new __Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca_UnoUITestsWindows_UI_Xaml_DataBindingTestsControlsBinding_ElementName_In_Template.SC0().Build(__owner) ) , // Source 0\Binding_ElementName_In_Template.xaml (Line 11:4) } @@ -116,13 +116,12 @@ private void InitializeComponent() } } [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca_UnoUITestsWindows_UI_Xaml_DataBindingTestsControlsBinding_ElementName_In_Template { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca_UnoUITestsWindows_UI_Xaml_DataBindingTestsControlsBinding_ElementName_In_TemplateSC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_Binding_ElementName_In_Template_66bf0a54f1801c397a6fa4930a237eca = "ms-appx:///TestProject/"; diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WNWSRAE/XamlCodeGenerator_ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20.cs b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WNWSRAE/XamlCodeGenerator_ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20.cs index 68627a4ef302..a1bd941513c5 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WNWSRAE/XamlCodeGenerator_ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Out/WNWSRAE/XamlCodeGenerator_ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20.cs @@ -52,7 +52,7 @@ private void InitializeComponent() new global::Uno.UI.Xaml.WeakResourceInitializer(this, __ResourceOwner_1 => { return - new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new SubClasses._ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20_UnoUITestsGiven_ResourceDictionaryWhen_Nested_With_Sibling_Ref_And_EventSC0().Build(__owner) + new global::Microsoft.UI.Xaml.DataTemplate(__ResourceOwner_1, (__owner) => new __ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20_UnoUITestsGiven_ResourceDictionaryWhen_Nested_With_Sibling_Ref_And_Event.SC0().Build(__owner) ) ; } ) @@ -81,13 +81,12 @@ private void InitializeComponent() } partial void OnInitializeCompleted(); [global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate] - private partial class SubClasses; - partial class SubClasses + private class __ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20_UnoUITestsGiven_ResourceDictionaryWhen_Nested_With_Sibling_Ref_And_Event { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026")] [global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2111")] - public class _ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20_UnoUITestsGiven_ResourceDictionaryWhen_Nested_With_Sibling_Ref_And_EventSC0 + public class SC0 { [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)] private const string __baseUri_prefix_ResourceDictionary_When_Nested_With_Sibling_Ref_And_Event_6d62c5ee15120ed189e095faf6d37e20 = "ms-appx:///TestProject/"; diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Subclass.cs b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Subclass.cs index 359f3b29fa38..e62597c79186 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Subclass.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Subclass.cs @@ -8,19 +8,5 @@ namespace Uno.UI.SourceGenerators.XamlGenerator { - internal class Subclass - { - public Subclass(XamlMemberDefinition contentOwner, string returnType, string defaultBindMode) - { - ContentOwner = contentOwner; - ReturnType = returnType; - DefaultBindMode = defaultBindMode; - } - - public XamlMemberDefinition ContentOwner { get; } - - public string ReturnType { get; } - - public string DefaultBindMode { get; } - } + internal record Subclass(XamlMemberDefinition ContentOwner, string ReturnType, string DefaultBindMode); } diff --git a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs index c8b0917bc376..d16ed2dcc7e9 100644 --- a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs +++ b/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs @@ -899,17 +899,24 @@ private void BuildChildSubclasses(IIndentedStringBuilder writer, bool isTopLevel _isInChildSubclass = true; TryAnnotateWithGeneratorSource(writer); var ns = $"{_defaultNamespace}.__Resources"; - var disposable = isTopLevel ? writer.BlockInvariant($"namespace {ns}") : null; - using (disposable) + IDisposable? SubClassesRoot() { - if (_isHotReloadEnabled || CurrentScope.Subclasses is { Count: > 0 }) + if (_isHotReloadEnabled || CurrentScope.Subclasses is { Count: >= 1 }) { - // If _isHotReloadEnabled we generate it anyway so we can remove classes without causing rude edit. + // If _isHotReloadEnabled we generate it anyway so we can remove sub-classes without causing rude edit. writer.AppendLineIndented("[global::System.Runtime.CompilerServices.CreateNewOnMetadataUpdate]"); - writer.AppendLineIndented($"{(isTopLevel ? "internal" : "private")} partial class SubClasses;"); + return writer.BlockInvariant($"{(isTopLevel ? "internal" : "private")} class __{_fileUniqueId}_{string.Join("_", _scopeStack.Select(scope => scope.Name))}"); } + else + { + return null; + } + } + using (isTopLevel ? writer.BlockInvariant($"namespace {ns}") : null) + using (SubClassesRoot()) + { foreach (var kvp in CurrentScope.Subclasses) { var className = kvp.Key; @@ -918,7 +925,6 @@ private void BuildChildSubclasses(IIndentedStringBuilder writer, bool isTopLevel using (TrySetDefaultBindMode(contentOwner.Owner, kvp.Value.DefaultBindMode)) { using (Scope(ns, className)) - using (writer.BlockInvariant("partial class SubClasses")) { writer.AppendLineIndented("[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]"); writer.AppendLineIndented("[global::System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage(\"Trimming\", \"IL2026\")]"); @@ -6601,16 +6607,17 @@ bool IsValid(string mode) private void BuildChildThroughSubclass(IIndentedStringBuilder writer, XamlMemberDefinition contentOwner, string returnType) { TryAnnotateWithGeneratorSource(writer); - // To prevent conflicting names whenever we are working with dictionaries, subClass index is a Guid in those cases - var subClassPrefix = _scopeStack.Aggregate("", (val, scope) => val + scope.Name); - var namespacePrefix = _scopeStack.Count == 1 && _scopeStack.Last().Name.EndsWith("RD", StringComparison.Ordinal) ? "__Resources." : ""; + var isTopLevel = _scopeStack.Count == 1 && _scopeStack.Last().Name.EndsWith("RD", StringComparison.Ordinal); - var subclassName = $"_{_fileUniqueId}_{subClassPrefix}SC{(_subclassIndex++).ToString(CultureInfo.InvariantCulture)}"; + // To prevent conflicting names whenever we are working with dictionaries, subClass index is a Guid in those cases + var namespacePrefix = isTopLevel ? "__Resources." : ""; + var subClassesRoot = $"__{_fileUniqueId}_{string.Join("_", _scopeStack.Select(scope => scope.Name))}"; + var subclassName = $"SC{(_subclassIndex++).ToString(CultureInfo.InvariantCulture)}"; RegisterChildSubclass(subclassName, contentOwner, returnType); - var activator = $"new {namespacePrefix}SubClasses.{subclassName}()"; + var activator = $"new {namespacePrefix}{subClassesRoot}.{subclassName}()"; #if USE_NEW_TP_CODEGEN writer.AppendLineIndented($"{activator}.Build(__owner, __settings)");