Data Type
This commit is contained in:
52
DataTypes/DataTypeGenerator.cs
Normal file
52
DataTypes/DataTypeGenerator.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.Text;
|
||||
|
||||
namespace Nocturnis.Generators.DataTypes;
|
||||
[Generator]
|
||||
public class DataTypeGenerator : ISourceGenerator
|
||||
{
|
||||
public void Initialize(GeneratorInitializationContext context)
|
||||
{
|
||||
}
|
||||
|
||||
public void Execute(GeneratorExecutionContext context)
|
||||
{
|
||||
var classesTxt = context.AdditionalFiles
|
||||
.FirstOrDefault(f => Path.GetFileName(f.Path) == "BaseTypes");
|
||||
if (classesTxt != null)
|
||||
{
|
||||
IEnumerable<string>? types =
|
||||
classesTxt.GetText(context.CancellationToken)?.ToString().Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (types == null)
|
||||
return;
|
||||
StringBuilder sb = new();
|
||||
sb.AppendLine("using Godot;");
|
||||
sb.AppendLine("using Nocturnis.DataStructures.DataTypes;");
|
||||
sb.AppendLine("namespace Nocturnis.GlobalManagement.Constants;");
|
||||
sb.AppendLine("public static partial class DataTypeConstant");
|
||||
sb.AppendLine("{");
|
||||
sb.AppendLine(" public static class BaseDataTypeNames");
|
||||
sb.AppendLine(" {");
|
||||
StringBuilder sxa = new();
|
||||
foreach (string? type in types)
|
||||
{
|
||||
sb.AppendLine($" public static StringName {type} = \"{type}\";");
|
||||
sxa.AppendLine($" public static DataType {type} = new DataType(BaseDataTypeNames.{type});");
|
||||
sxa.AppendLine($" public static DataType {type}Array = new DataType({type})");
|
||||
}
|
||||
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" public static class BaseDataTypes");
|
||||
sb.AppendLine(" {");
|
||||
sb.Append(sxa);
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine("}");
|
||||
context.AddSource("DataTypeConstant.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user