diff --git a/src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs b/src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs index d2a59511e1..295104abe4 100644 --- a/src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs +++ b/src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs @@ -4,7 +4,7 @@ using XamlX.TypeSystem; namespace Avalonia.Generators.NameGenerator; -internal class InitializeComponentCodeGenerator: ICodeGenerator +internal class InitializeComponentCodeGenerator : ICodeGenerator { private readonly bool _diagnosticsAreConnected; private const string AttachDevToolsCodeBlock = @" @@ -29,11 +29,20 @@ internal class InitializeComponentCodeGenerator: ICodeGenerator { var properties = new List(); var initializations = new List(); + const string thisFindNameScopeVariable = " var __thisNameScope__ = this.FindNameScope();"; + bool hasNames = false; foreach (var resolvedName in names) { + if (!hasNames) + { + initializations.Add(thisFindNameScopeVariable); + } + var (typeName, name, fieldModifier) = resolvedName; properties.Add($" {fieldModifier} {typeName} {name};"); - initializations.Add($" {name} = this.FindNameScope()?.Find<{typeName}>(\"{name}\");"); + initializations.Add($" {name} = __thisNameScope__?.Find<{typeName}>(\"{name}\");"); + + hasNames = true; } var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType); @@ -68,7 +77,7 @@ namespace {nameSpace} }} "; } - + private static bool IsWindow(IXamlType xamlType) { var type = xamlType; diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt index 42f6801af0..836f366d69 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt @@ -22,7 +22,8 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt index c7ca9f20c1..2b7562947f 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt @@ -30,7 +30,8 @@ namespace Sample.App } #endif - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt index 42f6801af0..836f366d69 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt @@ -22,7 +22,8 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt index 2e9a534b3a..843f1b9af1 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt @@ -24,9 +24,10 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - ClrNamespaceRoutedViewHost = this.FindNameScope()?.Find("ClrNamespaceRoutedViewHost"); - UriRoutedViewHost = this.FindNameScope()?.Find("UriRoutedViewHost"); - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + ClrNamespaceRoutedViewHost = __thisNameScope__?.Find("ClrNamespaceRoutedViewHost"); + UriRoutedViewHost = __thisNameScope__?.Find("UriRoutedViewHost"); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt index fff718517c..4bb89b83f5 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt @@ -23,8 +23,9 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); - NamedListBox = this.FindNameScope()?.Find("NamedListBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); + NamedListBox = __thisNameScope__?.Find("NamedListBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt index b0ba74ca17..2e458f62a4 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt @@ -27,12 +27,13 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - FirstNameTextBox = this.FindNameScope()?.Find("FirstNameTextBox"); - LastNameTextBox = this.FindNameScope()?.Find("LastNameTextBox"); - PasswordTextBox = this.FindNameScope()?.Find("PasswordTextBox"); - ConfirmPasswordTextBox = this.FindNameScope()?.Find("ConfirmPasswordTextBox"); - SignUpButton = this.FindNameScope()?.Find("SignUpButton"); - RegisterButton = this.FindNameScope()?.Find("RegisterButton"); + var __thisNameScope__ = this.FindNameScope(); + FirstNameTextBox = __thisNameScope__?.Find("FirstNameTextBox"); + LastNameTextBox = __thisNameScope__?.Find("LastNameTextBox"); + PasswordTextBox = __thisNameScope__?.Find("PasswordTextBox"); + ConfirmPasswordTextBox = __thisNameScope__?.Find("ConfirmPasswordTextBox"); + SignUpButton = __thisNameScope__?.Find("SignUpButton"); + RegisterButton = __thisNameScope__?.Find("RegisterButton"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt index 42f6801af0..836f366d69 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt @@ -22,7 +22,8 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt index 3451718ce5..644e8b5a91 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt @@ -24,9 +24,10 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); - PasswordTextBox = this.FindNameScope()?.Find("PasswordTextBox"); - SignUpButton = this.FindNameScope()?.Find("SignUpButton"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); + PasswordTextBox = __thisNameScope__?.Find("PasswordTextBox"); + SignUpButton = __thisNameScope__?.Find("SignUpButton"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt index 541a6f7106..747692c481 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt @@ -31,16 +31,17 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); - UserNameValidation = this.FindNameScope()?.Find("UserNameValidation"); - PasswordTextBox = this.FindNameScope()?.Find("PasswordTextBox"); - PasswordValidation = this.FindNameScope()?.Find("PasswordValidation"); - AwesomeListView = this.FindNameScope()?.Find("AwesomeListView"); - ConfirmPasswordTextBox = this.FindNameScope()?.Find("ConfirmPasswordTextBox"); - ConfirmPasswordValidation = this.FindNameScope()?.Find("ConfirmPasswordValidation"); - SignUpButtonDescription = this.FindNameScope()?.Find("SignUpButtonDescription"); - SignUpButton = this.FindNameScope()?.Find("SignUpButton"); - CompoundValidation = this.FindNameScope()?.Find("CompoundValidation"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); + UserNameValidation = __thisNameScope__?.Find("UserNameValidation"); + PasswordTextBox = __thisNameScope__?.Find("PasswordTextBox"); + PasswordValidation = __thisNameScope__?.Find("PasswordValidation"); + AwesomeListView = __thisNameScope__?.Find("AwesomeListView"); + ConfirmPasswordTextBox = __thisNameScope__?.Find("ConfirmPasswordTextBox"); + ConfirmPasswordValidation = __thisNameScope__?.Find("ConfirmPasswordValidation"); + SignUpButtonDescription = __thisNameScope__?.Find("SignUpButtonDescription"); + SignUpButton = __thisNameScope__?.Find("SignUpButton"); + CompoundValidation = __thisNameScope__?.Find("CompoundValidation"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt index 42f6801af0..836f366d69 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt @@ -22,7 +22,8 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); } } } diff --git a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt index 3451718ce5..644e8b5a91 100644 --- a/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt +++ b/tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt @@ -24,9 +24,10 @@ namespace Sample.App AvaloniaXamlLoader.Load(this); } - UserNameTextBox = this.FindNameScope()?.Find("UserNameTextBox"); - PasswordTextBox = this.FindNameScope()?.Find("PasswordTextBox"); - SignUpButton = this.FindNameScope()?.Find("SignUpButton"); + var __thisNameScope__ = this.FindNameScope(); + UserNameTextBox = __thisNameScope__?.Find("UserNameTextBox"); + PasswordTextBox = __thisNameScope__?.Find("PasswordTextBox"); + SignUpButton = __thisNameScope__?.Find("SignUpButton"); } } }