Browse Source

Reduce generated invocations to FindNameScope (#15370)

release/11.1.0-rc1
Alex 2 years ago
committed by Max Katz
parent
commit
98f0a8f00e
  1. 15
      src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs
  2. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedProps.txt
  3. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/AttachedPropsWithDevTools.txt
  4. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/ControlWithoutWindow.txt
  5. 7
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/CustomControls.txt
  6. 5
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/DataTemplates.txt
  7. 13
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/FieldModifier.txt
  8. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControl.txt
  9. 7
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/NamedControls.txt
  10. 21
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/SignUpView.txt
  11. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControl.txt
  12. 7
      tests/Avalonia.Generators.Tests/InitializeComponent/GeneratedInitializeComponent/xNamedControls.txt

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

@ -4,7 +4,7 @@ using XamlX.TypeSystem;
namespace Avalonia.Generators.NameGenerator; namespace Avalonia.Generators.NameGenerator;
internal class InitializeComponentCodeGenerator: ICodeGenerator internal class InitializeComponentCodeGenerator : ICodeGenerator
{ {
private readonly bool _diagnosticsAreConnected; private readonly bool _diagnosticsAreConnected;
private const string AttachDevToolsCodeBlock = @" private const string AttachDevToolsCodeBlock = @"
@ -29,11 +29,20 @@ internal class InitializeComponentCodeGenerator: ICodeGenerator
{ {
var properties = new List<string>(); var properties = new List<string>();
var initializations = new List<string>(); var initializations = new List<string>();
const string thisFindNameScopeVariable = " var __thisNameScope__ = this.FindNameScope();";
bool hasNames = false;
foreach (var resolvedName in names) foreach (var resolvedName in names)
{ {
if (!hasNames)
{
initializations.Add(thisFindNameScopeVariable);
}
var (typeName, name, fieldModifier) = resolvedName; var (typeName, name, fieldModifier) = resolvedName;
properties.Add($" {fieldModifier} {typeName} {name};"); 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); var attachDevTools = _diagnosticsAreConnected && IsWindow(xamlType);
@ -68,7 +77,7 @@ namespace {nameSpace}
}} }}
"; ";
} }
private static bool IsWindow(IXamlType xamlType) private static bool IsWindow(IXamlType xamlType)
{ {
var type = xamlType; var type = xamlType;

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

@ -22,7 +22,8 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
} }
} }
} }

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

@ -30,7 +30,8 @@ namespace Sample.App
} }
#endif #endif
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
} }
} }
} }

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

@ -22,7 +22,8 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
} }
} }
} }

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

@ -24,9 +24,10 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
ClrNamespaceRoutedViewHost = this.FindNameScope()?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("ClrNamespaceRoutedViewHost"); var __thisNameScope__ = this.FindNameScope();
UriRoutedViewHost = this.FindNameScope()?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("UriRoutedViewHost"); ClrNamespaceRoutedViewHost = __thisNameScope__?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("ClrNamespaceRoutedViewHost");
UserNameTextBox = this.FindNameScope()?.Find<global::Controls.CustomTextBox>("UserNameTextBox"); UriRoutedViewHost = __thisNameScope__?.Find<global::Avalonia.ReactiveUI.RoutedViewHost>("UriRoutedViewHost");
UserNameTextBox = __thisNameScope__?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
} }
} }
} }

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

@ -23,8 +23,9 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
NamedListBox = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>("NamedListBox"); UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
NamedListBox = __thisNameScope__?.Find<global::Avalonia.Controls.ListBox>("NamedListBox");
} }
} }
} }

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

@ -27,12 +27,13 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
FirstNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("FirstNameTextBox"); var __thisNameScope__ = this.FindNameScope();
LastNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("LastNameTextBox"); FirstNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("FirstNameTextBox");
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox"); LastNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("LastNameTextBox");
ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox"); PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton"); ConfirmPasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
RegisterButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("RegisterButton"); SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
RegisterButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("RegisterButton");
} }
} }
} }

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

@ -22,7 +22,8 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
} }
} }
} }

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

@ -24,9 +24,10 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox"); UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton"); PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
} }
} }
} }

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

@ -31,16 +31,17 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Controls.CustomTextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("UserNameValidation"); UserNameTextBox = __thisNameScope__?.Find<global::Controls.CustomTextBox>("UserNameTextBox");
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox"); UserNameValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("UserNameValidation");
PasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("PasswordValidation"); PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
AwesomeListView = this.FindNameScope()?.Find<global::Avalonia.Controls.ListBox>("AwesomeListView"); PasswordValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("PasswordValidation");
ConfirmPasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox"); AwesomeListView = __thisNameScope__?.Find<global::Avalonia.Controls.ListBox>("AwesomeListView");
ConfirmPasswordValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation"); ConfirmPasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("ConfirmPasswordTextBox");
SignUpButtonDescription = this.FindNameScope()?.Find<global::Avalonia.Controls.Documents.Run>("SignUpButtonDescription"); ConfirmPasswordValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("ConfirmPasswordValidation");
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton"); SignUpButtonDescription = __thisNameScope__?.Find<global::Avalonia.Controls.Documents.Run>("SignUpButtonDescription");
CompoundValidation = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBlock>("CompoundValidation"); SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
CompoundValidation = __thisNameScope__?.Find<global::Avalonia.Controls.TextBlock>("CompoundValidation");
} }
} }
} }

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

@ -22,7 +22,8 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
} }
} }
} }

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

@ -24,9 +24,10 @@ namespace Sample.App
AvaloniaXamlLoader.Load(this); AvaloniaXamlLoader.Load(this);
} }
UserNameTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox"); var __thisNameScope__ = this.FindNameScope();
PasswordTextBox = this.FindNameScope()?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox"); UserNameTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("UserNameTextBox");
SignUpButton = this.FindNameScope()?.Find<global::Avalonia.Controls.Button>("SignUpButton"); PasswordTextBox = __thisNameScope__?.Find<global::Avalonia.Controls.TextBox>("PasswordTextBox");
SignUpButton = __thisNameScope__?.Find<global::Avalonia.Controls.Button>("SignUpButton");
} }
} }
} }

Loading…
Cancel
Save