Browse Source
feat: Allow Name Generator to disable attach to DevTools (#14425)
pull/14430/head
workgroupengineering
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with
26 additions and
7 deletions
-
packages/Avalonia/Avalonia.props
-
packages/Avalonia/AvaloniaRules.Project.xml
-
src/tools/Avalonia.Generators/Avalonia.Generators.props
-
src/tools/Avalonia.Generators/GeneratorOptions.cs
-
src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs
-
src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs
-
tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs
|
|
|
@ -8,6 +8,7 @@ |
|
|
|
<EnableAvaloniaXamlCompilation Condition="'$(EnableAvaloniaXamlCompilation)'==''">true</EnableAvaloniaXamlCompilation> |
|
|
|
<AvaloniaXamlIlVerifyIl Condition="'$(AvaloniaXamlIlVerifyIl)'==''">false</AvaloniaXamlIlVerifyIl> |
|
|
|
<AvaloniaUseCompiledBindingsByDefault Condition="'$(AvaloniaUseCompiledBindingsByDefault)'==''">false</AvaloniaUseCompiledBindingsByDefault> |
|
|
|
<AvaloniaNameGeneratorAttachDevTools Condition="'$(AvaloniaNameGeneratorAttachDevTools)' == ''">true</AvaloniaNameGeneratorAttachDevTools> |
|
|
|
</PropertyGroup> |
|
|
|
<Import Project="$(MSBuildThisFileDirectory)\AvaloniaBuildTasks.props"/> |
|
|
|
<Import Project="$(MSBuildThisFileDirectory)\Avalonia.Generators.props"/> |
|
|
|
|
|
|
|
@ -50,7 +50,7 @@ |
|
|
|
<BoolProperty Name="AvaloniaNameGeneratorIsEnabled" |
|
|
|
DisplayName="Use Name Generator" |
|
|
|
Description="Enable/Disable Avalonia Name Source Generator" |
|
|
|
HelpUrl="https://github.com/AvaloniaUI/Avalonia/blob/master/src/tools/Avalonia.Generators/README.md" |
|
|
|
HelpUrl="https://github.com/AvaloniaUI/Avalonia/blob/master/src/tools/Avalonia.Generators/README.md#advanced-usage" |
|
|
|
Category="NameGenerator" /> |
|
|
|
|
|
|
|
<EnumProperty Name="AvaloniaNameGeneratorBehavior" |
|
|
|
@ -67,6 +67,18 @@ |
|
|
|
</EnumProperty.Metadata> |
|
|
|
</EnumProperty> |
|
|
|
|
|
|
|
<BoolProperty Name="AvaloniaNameGeneratorAttachDevTools" |
|
|
|
DisplayName="Attach Dev Tools" |
|
|
|
Description="Allowed to automatic attach DevTools in Window InitializeComponent method." |
|
|
|
Category="NameGenerator"> |
|
|
|
<BoolProperty.Metadata> |
|
|
|
<NameValuePair Name="DependsOn" Value="Avalonia::AvaloniaNameGeneratorBehavior" /> |
|
|
|
<NameValuePair Name="VisibilityCondition"> |
|
|
|
<NameValuePair.Value>(has-evaluated-value "Avalonia" "AvaloniaNameGeneratorBehavior" "InitializeComponent")</NameValuePair.Value> |
|
|
|
</NameValuePair> |
|
|
|
</BoolProperty.Metadata> |
|
|
|
</BoolProperty> |
|
|
|
|
|
|
|
<EnumProperty Name="AvaloniaNameGeneratorDefaultFieldModifier" |
|
|
|
DisplayName="Default Class Field/Property Modifier" |
|
|
|
Description="Defines the access modifiers used for generated members" |
|
|
|
|
|
|
|
@ -6,6 +6,7 @@ |
|
|
|
<AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath> |
|
|
|
<AvaloniaNameGeneratorFilterByNamespace Condition="'$(AvaloniaNameGeneratorFilterByNamespace)' == ''">*</AvaloniaNameGeneratorFilterByNamespace> |
|
|
|
<AvaloniaNameGeneratorViewFileNamingStrategy Condition="'$(AvaloniaNameGeneratorViewFileNamingStrategy)' == ''">NamespaceAndClassName</AvaloniaNameGeneratorViewFileNamingStrategy> |
|
|
|
<AvaloniaNameGeneratorAttachDevTools Condition="'$(AvaloniaNameGeneratorAttachDevTools)' == ''">true</AvaloniaNameGeneratorAttachDevTools> |
|
|
|
</PropertyGroup> |
|
|
|
<ItemGroup> |
|
|
|
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="SourceItemGroup"/> |
|
|
|
@ -15,6 +16,7 @@ |
|
|
|
<CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByPath" /> |
|
|
|
<CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByNamespace" /> |
|
|
|
<CompilerVisibleProperty Include="AvaloniaNameGeneratorViewFileNamingStrategy" /> |
|
|
|
<CompilerVisibleProperty Include="AvaloniaNameGeneratorAttachDevTools"/> |
|
|
|
</ItemGroup> |
|
|
|
<Target Name="_InjectAdditionalFiles" BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun"> |
|
|
|
<ItemGroup> |
|
|
|
|
|
|
|
@ -14,7 +14,7 @@ internal enum BuildProperties |
|
|
|
AvaloniaNameGeneratorFilterByPath = 3, |
|
|
|
AvaloniaNameGeneratorFilterByNamespace = 4, |
|
|
|
AvaloniaNameGeneratorViewFileNamingStrategy = 5, |
|
|
|
|
|
|
|
AvaloniaNameGeneratorAttachDevTools = 6, |
|
|
|
// TODO add other generators properties here.
|
|
|
|
} |
|
|
|
|
|
|
|
@ -48,6 +48,10 @@ internal class GeneratorOptions |
|
|
|
BuildProperties.AvaloniaNameGeneratorFilterByNamespace, |
|
|
|
"*"); |
|
|
|
|
|
|
|
public bool AvaloniaNameGeneratorAttachDevTools => GetBoolProperty( |
|
|
|
BuildProperties.AvaloniaNameGeneratorAttachDevTools, |
|
|
|
true); |
|
|
|
|
|
|
|
private string[] GetStringArrayProperty(BuildProperties name, string defaultValue) |
|
|
|
{ |
|
|
|
var key = name.ToString(); |
|
|
|
|
|
|
|
@ -68,7 +68,7 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator |
|
|
|
var types = new RoslynTypeSystem((CSharpCompilation)context.Compilation); |
|
|
|
ICodeGenerator generator = options.AvaloniaNameGeneratorBehavior switch { |
|
|
|
Behavior.OnlyProperties => new OnlyPropertiesCodeGenerator(), |
|
|
|
Behavior.InitializeComponent => new InitializeComponentCodeGenerator(types), |
|
|
|
Behavior.InitializeComponent => new InitializeComponentCodeGenerator(types, options.AvaloniaNameGeneratorAttachDevTools), |
|
|
|
_ => throw new ArgumentOutOfRangeException() |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
@ -19,9 +19,10 @@ internal class InitializeComponentCodeGenerator: ICodeGenerator |
|
|
|
= @" /// <param name=""attachDevTools"">Should the dev tools be attached.</param>
|
|
|
|
";
|
|
|
|
|
|
|
|
public InitializeComponentCodeGenerator(IXamlTypeSystem types) |
|
|
|
|
|
|
|
public InitializeComponentCodeGenerator(IXamlTypeSystem types, bool avaloniaNameGeneratorAttachDevTools) |
|
|
|
{ |
|
|
|
_diagnosticsAreConnected = types.FindAssembly("Avalonia.Diagnostics") != null; |
|
|
|
_diagnosticsAreConnected = avaloniaNameGeneratorAttachDevTools && types.FindAssembly("Avalonia.Diagnostics") != null; |
|
|
|
} |
|
|
|
|
|
|
|
public string GenerateCode(string className, string nameSpace, IXamlType xamlType, IEnumerable<ResolvedName> names) |
|
|
|
|
|
|
|
@ -3,7 +3,6 @@ using Avalonia.Generators.Common; |
|
|
|
using Avalonia.Generators.Compiler; |
|
|
|
using Avalonia.Generators.NameGenerator; |
|
|
|
using Avalonia.Generators.Tests.InitializeComponent.GeneratedInitializeComponent; |
|
|
|
using Avalonia.Generators.Tests.OnlyProperties.GeneratedCode; |
|
|
|
using Avalonia.Generators.Tests.Views; |
|
|
|
using Microsoft.CodeAnalysis.CSharp; |
|
|
|
using Xunit; |
|
|
|
@ -48,7 +47,7 @@ public class InitializeComponentTests |
|
|
|
var nameResolver = new XamlXNameResolver(); |
|
|
|
var names = nameResolver.ResolveNames(classInfo.Xaml); |
|
|
|
|
|
|
|
var generator = new InitializeComponentCodeGenerator(types); |
|
|
|
var generator = new InitializeComponentCodeGenerator(types, devToolsMode); |
|
|
|
|
|
|
|
var code = generator |
|
|
|
.GenerateCode("SampleView", "Sample.App", classInfo.XamlType, names) |
|
|
|
|