Data Type

This commit is contained in:
h z
2024-07-11 11:21:29 +01:00
commit 00bf1b438e
5 changed files with 108 additions and 0 deletions

View 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));
}
}
}