diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/AttachedProps.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/AttachedProps.txt index 9626d6ed5f..5d1da033c2 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/AttachedProps.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/AttachedProps.txt @@ -7,7 +7,7 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/CustomControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/CustomControls.txt index f97368f68c..39f6c4b0d9 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/CustomControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/CustomControls.txt @@ -7,9 +7,9 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.ReactiveUI.RoutedViewHost ClrNamespaceRoutedViewHost {get; set;} - internal global::Avalonia.ReactiveUI.RoutedViewHost UriRoutedViewHost {get; set;} - internal global::Controls.CustomTextBox UserNameTextBox {get; set;} + internal global::Avalonia.ReactiveUI.RoutedViewHost ClrNamespaceRoutedViewHost { get; set; } + internal global::Avalonia.ReactiveUI.RoutedViewHost UriRoutedViewHost { get; set; } + internal global::Controls.CustomTextBox UserNameTextBox { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/DataTemplates.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/DataTemplates.txt index 9d1141bb64..d47b1fede3 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/DataTemplates.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/DataTemplates.txt @@ -7,8 +7,8 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} - internal global::Avalonia.Controls.ListBox NamedListBox {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } + internal global::Avalonia.Controls.ListBox NamedListBox { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/FieldModifier.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/FieldModifier.txt index e71dd6a5ed..43fa735f36 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/FieldModifier.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/FieldModifier.txt @@ -7,12 +7,12 @@ namespace Sample.App { partial class SampleView { - public global::Avalonia.Controls.TextBox FirstNameTextBox {get; set;} - public global::Avalonia.Controls.TextBox LastNameTextBox {get; set;} - protected global::Avalonia.Controls.TextBox PasswordTextBox {get; set;} - private global::Avalonia.Controls.TextBox ConfirmPasswordTextBox {get; set;} - internal global::Avalonia.Controls.Button SignUpButton {get; set;} - internal global::Avalonia.Controls.Button RegisterButton {get; set;} + public global::Avalonia.Controls.TextBox FirstNameTextBox { get; set; } + public global::Avalonia.Controls.TextBox LastNameTextBox { get; set; } + protected global::Avalonia.Controls.TextBox PasswordTextBox { get; set; } + private global::Avalonia.Controls.TextBox ConfirmPasswordTextBox { get; set; } + internal global::Avalonia.Controls.Button SignUpButton { get; set; } + internal global::Avalonia.Controls.Button RegisterButton { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControl.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControl.txt index 9626d6ed5f..5d1da033c2 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControl.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControl.txt @@ -7,7 +7,7 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControls.txt index 7eda2d8811..0993a82e2f 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/NamedControls.txt @@ -7,9 +7,9 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} - internal global::Avalonia.Controls.TextBox PasswordTextBox {get; set;} - internal global::Avalonia.Controls.Button SignUpButton {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } + internal global::Avalonia.Controls.TextBox PasswordTextBox { get; set; } + internal global::Avalonia.Controls.Button SignUpButton { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/SignUpView.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/SignUpView.txt index 3a6473127b..b04353dfa4 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/SignUpView.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/SignUpView.txt @@ -7,15 +7,15 @@ namespace Sample.App { partial class SampleView { - internal global::Controls.CustomTextBox UserNameTextBox {get; set;} - internal global::Avalonia.Controls.TextBlock UserNameValidation {get; set;} - internal global::Avalonia.Controls.TextBox PasswordTextBox {get; set;} - internal global::Avalonia.Controls.TextBlock PasswordValidation {get; set;} - internal global::Avalonia.Controls.ListBox AwesomeListView {get; set;} - internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox {get; set;} - internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation {get; set;} - internal global::Avalonia.Controls.Button SignUpButton {get; set;} - internal global::Avalonia.Controls.TextBlock CompoundValidation {get; set;} + internal global::Controls.CustomTextBox UserNameTextBox { get; set; } + internal global::Avalonia.Controls.TextBlock UserNameValidation { get; set; } + internal global::Avalonia.Controls.TextBox PasswordTextBox { get; set; } + internal global::Avalonia.Controls.TextBlock PasswordValidation { get; set; } + internal global::Avalonia.Controls.ListBox AwesomeListView { get; set; } + internal global::Avalonia.Controls.TextBox ConfirmPasswordTextBox { get; set; } + internal global::Avalonia.Controls.TextBlock ConfirmPasswordValidation { get; set; } + internal global::Avalonia.Controls.Button SignUpButton { get; set; } + internal global::Avalonia.Controls.TextBlock CompoundValidation { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControl.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControl.txt index 9626d6ed5f..5d1da033c2 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControl.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControl.txt @@ -7,7 +7,7 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControls.txt b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControls.txt index 7eda2d8811..0993a82e2f 100644 --- a/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControls.txt +++ b/src/Avalonia.NameGenerator.Tests/InitializeComponent/GeneratedCode/xNamedControls.txt @@ -7,9 +7,9 @@ namespace Sample.App { partial class SampleView { - internal global::Avalonia.Controls.TextBox UserNameTextBox {get; set;} - internal global::Avalonia.Controls.TextBox PasswordTextBox {get; set;} - internal global::Avalonia.Controls.Button SignUpButton {get; set;} + internal global::Avalonia.Controls.TextBox UserNameTextBox { get; set; } + internal global::Avalonia.Controls.TextBox PasswordTextBox { get; set; } + internal global::Avalonia.Controls.Button SignUpButton { get; set; } public void InitializeComponent(bool loadXaml = true) { diff --git a/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs b/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs index 67a6eba284..acfdab35f5 100644 --- a/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs +++ b/src/Avalonia.NameGenerator/AvaloniaNameSourceGenerator.cs @@ -1,5 +1,4 @@ using System; -using System.Diagnostics; using System.Runtime.CompilerServices; using Avalonia.NameGenerator.Compiler; using Avalonia.NameGenerator.Domain; @@ -11,21 +10,9 @@ using Microsoft.CodeAnalysis.CSharp; namespace Avalonia.NameGenerator { - public enum BuildProperties - { - AvaloniaNameGeneratorBehavior = 0 - } - - public enum Behaviors - { - OnlyProperties = 0, - InitializeComponent, - } - [Generator] public class AvaloniaNameSourceGenerator : ISourceGenerator { - public void Initialize(GeneratorInitializationContext context) { } public void Execute(GeneratorExecutionContext context) @@ -33,21 +20,14 @@ namespace Avalonia.NameGenerator var compilation = (CSharpCompilation)context.Compilation; var types = new RoslynTypeSystem(compilation); var compiler = MiniCompiler.CreateDefault(types, MiniCompiler.AvaloniaXmlnsDefinitionAttribute); - - var behaviorName = context.GetMSBuildProperty(nameof(BuildProperties.AvaloniaNameGeneratorBehavior), ""); - - if(!Behaviors.TryParse(behaviorName, out Behaviors behavior)) - { - behavior = Behaviors.OnlyProperties; - } - - ICodeGenerator generator = behavior switch { - Behaviors.OnlyProperties => new OnlyPropertiesCodeGenerator(), - Behaviors.InitializeComponent => new InitializeComponentCodeGenerator(), + + var options = new GeneratorOptions(context); + ICodeGenerator generator = options.AvaloniaNameGeneratorBehavior switch { + Behavior.OnlyProperties => new OnlyPropertiesCodeGenerator(), + Behavior.InitializeComponent => new InitializeComponentCodeGenerator(), _ => throw new ArgumentOutOfRangeException() }; - - + INameGenerator avaloniaNameGenerator = new AvaloniaNameGenerator( new XamlXViewResolver(types, compiler, true, type => ReportInvalidType(context, type)), diff --git a/src/Avalonia.NameGenerator/Generator.props b/src/Avalonia.NameGenerator/Generator.props index 0d5cf5fb85..5965e7d6f6 100644 --- a/src/Avalonia.NameGenerator/Generator.props +++ b/src/Avalonia.NameGenerator/Generator.props @@ -1,11 +1,11 @@  + + OnlyProperties + - - OnlyProperties - diff --git a/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs b/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs index 247774a651..330885d72e 100644 --- a/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs +++ b/src/Avalonia.NameGenerator/Generator/InitializeComponentCodeGenerator.cs @@ -12,7 +12,7 @@ namespace Avalonia.NameGenerator.Generator var initializations = new List(); foreach (var info in names) { - properties.Add($" {info.FieldModifier} global::{info.TypeName} {info.Name} {{get; set;}}"); + properties.Add($" {info.FieldModifier} global::{info.TypeName} {info.Name} {{ get; set; }}"); initializations.Add($" {info.Name} = this.FindControl(\"{info.Name}\");"); } diff --git a/src/Avalonia.NameGenerator/GeneratorOptions.cs b/src/Avalonia.NameGenerator/GeneratorOptions.cs new file mode 100644 index 0000000000..efa10b39cf --- /dev/null +++ b/src/Avalonia.NameGenerator/GeneratorOptions.cs @@ -0,0 +1,38 @@ +using System; +using Microsoft.CodeAnalysis; + +namespace Avalonia.NameGenerator +{ + public enum BuildProperties + { + AvaloniaNameGeneratorBehavior = 0 + } + + public enum Behavior + { + OnlyProperties = 0, + InitializeComponent = 1, + } + + public class GeneratorOptions + { + private readonly GeneratorExecutionContext _context; + + public GeneratorOptions(GeneratorExecutionContext context) => _context = context; + + public Behavior AvaloniaNameGeneratorBehavior + { + get + { + var propertyValue = _context + .GetMSBuildProperty( + nameof(BuildProperties.AvaloniaNameGeneratorBehavior), + nameof(Behavior.OnlyProperties)); + + if (!Enum.TryParse(propertyValue, out Behavior behavior)) + return Behavior.OnlyProperties; + return behavior; + } + } + } +} \ No newline at end of file