csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.5 KiB
65 lines
2.5 KiB
using System.IO;
|
|
using System.Linq;
|
|
using Microsoft.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis.CSharp;
|
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
|
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
|
|
namespace Avalonia.SourceGenerator.CompositionGenerator
|
|
{
|
|
public partial class Generator
|
|
{
|
|
static void CleanDirectory(string path)
|
|
{
|
|
Directory.CreateDirectory(path);
|
|
Directory.Delete(path, true);
|
|
Directory.CreateDirectory(path);
|
|
}
|
|
|
|
CompilationUnitSyntax Unit()
|
|
=> CompilationUnit().WithUsings(List(new[]
|
|
{
|
|
"System",
|
|
"System.Text",
|
|
"System.Collections",
|
|
"System.Collections.Generic"
|
|
}
|
|
.Concat(_config.Usings
|
|
.Select(x => x.Name)).Select(u => UsingDirective(IdentifierName(u)))));
|
|
|
|
void SaveTo(CompilationUnitSyntax unit, params string[] path)
|
|
{
|
|
var text = @"
|
|
#nullable enable
|
|
#pragma warning disable CS0108, CS0114
|
|
|
|
" +
|
|
|
|
unit.NormalizeWhitespace().ToFullString();
|
|
_output.AddSource(string.Join("_", path), text);
|
|
}
|
|
|
|
static SyntaxToken Semicolon() => Token(SyntaxKind.SemicolonToken);
|
|
|
|
|
|
static FieldDeclarationSyntax DeclareConstant(string type, string name, LiteralExpressionSyntax value)
|
|
=> FieldDeclaration(
|
|
VariableDeclaration(ParseTypeName(type),
|
|
SingletonSeparatedList(
|
|
VariableDeclarator(name).WithInitializer(EqualsValueClause(value))
|
|
))
|
|
).WithSemicolonToken(Semicolon())
|
|
.WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.ConstKeyword)));
|
|
|
|
static FieldDeclarationSyntax DeclareField(string type, string name, params SyntaxKind[] modifiers) =>
|
|
DeclareField(type, name, null, modifiers);
|
|
|
|
static FieldDeclarationSyntax DeclareField(string type, string name, EqualsValueClauseSyntax? initializer,
|
|
params SyntaxKind[] modifiers) =>
|
|
FieldDeclaration(
|
|
VariableDeclaration(ParseTypeName(type),
|
|
SingletonSeparatedList(
|
|
VariableDeclarator(name).WithInitializer(initializer))))
|
|
.WithSemicolonToken(Semicolon())
|
|
.WithModifiers(TokenList(modifiers.Select(x => Token(x))));
|
|
}
|
|
}
|
|
|