Browse Source

Add AvaloniaNameGeneratorIsEnabled parameter

pull/10407/head
Max Katz 4 years ago
parent
commit
f4c82105ce
  1. 1
      src/tools/Avalonia.Generators/Avalonia.Generators.csproj
  2. 2
      src/tools/Avalonia.Generators/Avalonia.Generators.props
  3. 25
      src/tools/Avalonia.Generators/GeneratorOptions.cs
  4. 10
      src/tools/Avalonia.Generators/NameGenerator/AvaloniaNameSourceGenerator.cs
  5. 8
      src/tools/Avalonia.Generators/Properties/launchSettings.json

1
src/tools/Avalonia.Generators/Avalonia.Generators.csproj

@ -5,6 +5,7 @@
<PackageId>Avalonia.Generators</PackageId>
<DefineConstants>$(DefineConstants);XAMLX_INTERNAL</DefineConstants>
<IsPackable>true</IsPackable>
<IsRoslynComponent>true</IsRoslynComponent>
</PropertyGroup>
<ItemGroup>

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

@ -1,5 +1,6 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AvaloniaNameGeneratorIsEnabled Condition="'$(AvaloniaNameGeneratorIsEnabled)' == ''">true</AvaloniaNameGeneratorIsEnabled>
<AvaloniaNameGeneratorBehavior Condition="'$(AvaloniaNameGeneratorBehavior)' == ''">InitializeComponent</AvaloniaNameGeneratorBehavior>
<AvaloniaNameGeneratorDefaultFieldModifier Condition="'$(AvaloniaNameGeneratorDefaultFieldModifier)' == ''">internal</AvaloniaNameGeneratorDefaultFieldModifier>
<AvaloniaNameGeneratorFilterByPath Condition="'$(AvaloniaNameGeneratorFilterByPath)' == ''">*</AvaloniaNameGeneratorFilterByPath>
@ -7,6 +8,7 @@
</PropertyGroup>
<ItemGroup>
<CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="SourceItemGroup"/>
<CompilerVisibleProperty Include="AvaloniaNameGeneratorIsEnabled" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorBehavior" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorDefaultFieldModifier" />
<CompilerVisibleProperty Include="AvaloniaNameGeneratorFilterByPath" />

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

@ -5,13 +5,17 @@ using Microsoft.CodeAnalysis;
namespace Avalonia.Generators;
// When update these enum values, don't forget to update Avalonia.Generators.props.
internal enum BuildProperties
{
AvaloniaNameGeneratorBehavior = 0,
AvaloniaNameGeneratorDefaultFieldModifier = 1,
AvaloniaNameGeneratorFilterByPath = 2,
AvaloniaNameGeneratorFilterByNamespace = 3,
AvaloniaNameGeneratorViewFileNamingStrategy = 4,
AvaloniaNameGeneratorIsEnabled = 0,
AvaloniaNameGeneratorBehavior = 1,
AvaloniaNameGeneratorDefaultFieldModifier = 2,
AvaloniaNameGeneratorFilterByPath = 3,
AvaloniaNameGeneratorFilterByNamespace = 4,
AvaloniaNameGeneratorViewFileNamingStrategy = 5,
// TODO add other generators properties here.
}
internal class GeneratorOptions
@ -20,6 +24,10 @@ internal class GeneratorOptions
public GeneratorOptions(GeneratorExecutionContext context) => _context = context;
public bool AvaloniaNameGeneratorIsEnabled => GetBoolProperty(
BuildProperties.AvaloniaNameGeneratorIsEnabled,
true);
public Behavior AvaloniaNameGeneratorBehavior => GetEnumProperty(
BuildProperties.AvaloniaNameGeneratorBehavior,
Behavior.InitializeComponent);
@ -53,4 +61,11 @@ internal class GeneratorOptions
var value = _context.GetMsBuildProperty(key, defaultValue.ToString());
return Enum.TryParse(value, true, out TEnum behavior) ? behavior : defaultValue;
}
private bool GetBoolProperty(BuildProperties name, bool defaultValue)
{
var key = name.ToString();
var value = _context.GetMsBuildProperty(key, defaultValue.ToString());
return bool.TryParse(value, out var result) ? result : defaultValue;
}
}

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

@ -17,6 +17,11 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator
try
{
var generator = CreateNameGenerator(context);
if (generator is null)
{
return;
}
var partials = generator.GenerateNameReferences(context.AdditionalFiles);
foreach (var (fileName, content) in partials) context.AddSource(fileName, content);
}
@ -29,6 +34,11 @@ public class AvaloniaNameSourceGenerator : ISourceGenerator
private static INameGenerator CreateNameGenerator(GeneratorExecutionContext context)
{
var options = new GeneratorOptions(context);
if (!options.AvaloniaNameGeneratorIsEnabled)
{
return null;
}
var types = new RoslynTypeSystem((CSharpCompilation)context.Compilation);
ICodeGenerator generator = options.AvaloniaNameGeneratorBehavior switch {
Behavior.OnlyProperties => new OnlyPropertiesCodeGenerator(),

8
src/tools/Avalonia.Generators/Properties/launchSettings.json

@ -0,0 +1,8 @@
{
"profiles": {
"Profile 1": {
"commandName": "DebugRoslynComponent",
"targetProject": "..\\..\\..\\samples\\Generators.Sandbox\\Generators.Sandbox.csproj"
}
}
}
Loading…
Cancel
Save