Browse Source

feat: Allow Name Generator to disable attach to DevTools (#14425)

pull/14430/head
workgroupengineering 2 years ago
committed by GitHub
parent
commit
55432bd8fb
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      packages/Avalonia/Avalonia.props
  2. 14
      packages/Avalonia/AvaloniaRules.Project.xml
  3. 2
      src/tools/Avalonia.Generators/Avalonia.Generators.props
  4. 6
      src/tools/Avalonia.Generators/GeneratorOptions.cs
  5. 2
      src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs
  6. 5
      src/tools/Avalonia.Generators/NameGenerator/InitializeComponentCodeGenerator.cs
  7. 3
      tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs

1
packages/Avalonia/Avalonia.props

@ -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"/>

14
packages/Avalonia/AvaloniaRules.Project.xml

@ -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"

2
src/tools/Avalonia.Generators/Avalonia.Generators.props

@ -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>

6
src/tools/Avalonia.Generators/GeneratorOptions.cs

@ -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();

2
src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs

@ -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()
};

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

@ -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
tests/Avalonia.Generators.Tests/InitializeComponent/InitializeComponentTests.cs

@ -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)

Loading…
Cancel
Save