Skip to content

Commit 98f0a8f

Browse files
Rekkonnectmaxkatz6
authored andcommitted
Reduce generated invocations to FindNameScope (#15370)
1 parent e959210 commit 98f0a8f

File tree

12 files changed

+55
-35
lines changed

12 files changed

+55
-35
lines changed

src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Avalonia.Generators.NameGenerator;
66

7-
internal class InitializeComponentCodeGenerator: ICodeGenerator
7+
internal class InitializeComponentCodeGenerator : ICodeGenerator
88
{
99
private readonly bool _diagnosticsAreConnected;
1010
private const string AttachDevToolsCodeBlock = @"
@@ -29,11 +29,20 @@ public string GenerateCode(string className, string nameSpace, IXamlType xamlTyp
2929
{
3030
var properties = new List<string>();
3131
var initializations = new List<string>();
32+
const string thisFindNameScopeVariable = " var __thisNameScope__ = this.FindNameScope();";
33+
bool hasNames = false;
3234
foreach (var resolvedName in names)
3335
{
36+
if (!hasNames)
37+
{
38+
initializations.Add(thisFindNameScopeVariable);
39+
}
40+
3441
var (typeName, name, fieldModifier) = resolvedName;
3542
properties.Add($" {fieldModifier} {typeName} {name};");
36-
initializations.Add($" {name} = this.FindNameScope()?.Find<{typeName}>(\"{name}\");");
43+
initializations.Add($" {name} = __thisNameScope__?.Find<{typeName}>(\"{name}\");");
44+
45+
hasNames = true;
3746
}
3847

3948
var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType);
@@ -68,7 +77,7 @@ public void InitializeComponent(bool loadXaml = true{(attachDevTools ? ", bool a
6877
}}
6978
";
7079
}
71-
80+
7281
private static bool IsWindow(IXamlType xamlType)
7382
{
7483
var type = xamlType;

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace Sample.App
2222
AvaloniaXamlLoader.Load(this);
2323
}
2424

25-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
25+
var __thisNameScope__ = this.FindNameScope();
26+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
2627
}
2728
}
2829
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ namespace Sample.App
3030
}
3131
#endif
3232

33-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
33+
var __thisNameScope__ = this.FindNameScope();
34+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
3435
}
3536
}
3637
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace Sample.App
2222
AvaloniaXamlLoader.Load(this);
2323
}
2424

25-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
25+
var __thisNameScope__ = this.FindNameScope();
26+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
2627
}
2728
}
2829
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ namespace Sample.App
2424
AvaloniaXamlLoader.Load(this);
2525
}
2626

27-
ClrNamespaceRoutedViewHost = this.FindNameScope()?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("ClrNamespaceRoutedViewHost");
28-
UriRoutedViewHost = this.FindNameScope()?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("UriRoutedViewHost");
29-
UserNameTextBox = this.FindNameScope()?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
27+
var __thisNameScope__ = this.FindNameScope();
28+
ClrNamespaceRoutedViewHost = __thisNameScope__?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("ClrNamespaceRoutedViewHost");
29+
UriRoutedViewHost = __thisNameScope__?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("UriRoutedViewHost");
30+
UserNameTextBox = __thisNameScope__?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
3031
}
3132
}
3233
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ namespace Sample.App
2323
AvaloniaXamlLoader.Load(this);
2424
}
2525

26-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
27-
NamedListBox = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>("NamedListBox");
26+
var __thisNameScope__ = this.FindNameScope();
27+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
28+
NamedListBox = __thisNameScope__?.Find<global::Avalonia.Controls.ListBox>("NamedListBox");
2829
}
2930
}
3031
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ namespace Sample.App
2727
AvaloniaXamlLoader.Load(this);
2828
}
2929

30-
FirstNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("FirstNameTextBox");
31-
LastNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("LastNameTextBox");
32-
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
33-
ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
34-
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton");
35-
RegisterButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("RegisterButton");
30+
var __thisNameScope__ = this.FindNameScope();
31+
FirstNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("FirstNameTextBox");
32+
LastNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("LastNameTextBox");
33+
PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
34+
ConfirmPasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
35+
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
36+
RegisterButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("RegisterButton");
3637
}
3738
}
3839
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace Sample.App
2222
AvaloniaXamlLoader.Load(this);
2323
}
2424

25-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
25+
var __thisNameScope__ = this.FindNameScope();
26+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
2627
}
2728
}
2829
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ namespace Sample.App
2424
AvaloniaXamlLoader.Load(this);
2525
}
2626

27-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
28-
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
29-
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton");
27+
var __thisNameScope__ = this.FindNameScope();
28+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
29+
PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
30+
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
3031
}
3132
}
3233
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,17 @@ namespace Sample.App
3131
AvaloniaXamlLoader.Load(this);
3232
}
3333

34-
UserNameTextBox = this.FindNameScope()?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
35-
UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("UserNameValidation");
36-
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
37-
PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("PasswordValidation");
38-
AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>("AwesomeListView");
39-
ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
40-
ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation");
41-
SignUpButtonDescription = this.FindNameScope()?.Find<global::Avalonia.Controls.Documents.Run>("SignUpButtonDescription");
42-
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton");
43-
CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("CompoundValidation");
34+
var __thisNameScope__ = this.FindNameScope();
35+
UserNameTextBox = __thisNameScope__?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
36+
UserNameValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("UserNameValidation");
37+
PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
38+
PasswordValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("PasswordValidation");
39+
AwesomeListView = __thisNameScope__?.Find<global::Avalonia.Controls.ListBox>("AwesomeListView");
40+
ConfirmPasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
41+
ConfirmPasswordValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation");
42+
SignUpButtonDescription = __thisNameScope__?.Find<global::Avalonia.Controls.Documents.Run>("SignUpButtonDescription");
43+
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
44+
CompoundValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("CompoundValidation");
4445
}
4546
}
4647
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace Sample.App
2222
AvaloniaXamlLoader.Load(this);
2323
}
2424

25-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
25+
var __thisNameScope__ = this.FindNameScope();
26+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
2627
}
2728
}
2829
}

tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@ namespace Sample.App
2424
AvaloniaXamlLoader.Load(this);
2525
}
2626

27-
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
28-
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
29-
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton");
27+
var __thisNameScope__ = this.FindNameScope();
28+
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
29+
PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
30+
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
3031
}
3132
}
3233
}

0 commit comments

Comments
 (0)