From fe54cc3637f335c035641511b799882d003f8cfe Mon Sep 17 00:00:00 2001 From: copygirl Date: Mon, 8 May 2023 19:42:38 +0200 Subject: [PATCH] Fix IModuleInitializer.Initialize not being called --- src/gaemstone.SourceGen/ModuleGenerator.cs | 3 +++ src/gaemstone.SourceGen/Structure/MethodEntityInfo.cs | 2 ++ src/gaemstone.SourceGen/Structure/ModuleEntityInfo.cs | 7 +++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gaemstone.SourceGen/ModuleGenerator.cs b/src/gaemstone.SourceGen/ModuleGenerator.cs index 3049e2c..1d85ee4 100644 --- a/src/gaemstone.SourceGen/ModuleGenerator.cs +++ b/src/gaemstone.SourceGen/ModuleGenerator.cs @@ -132,6 +132,9 @@ public class ModuleGenerator // TODO: Can BuiltIn modules have systems and such? + if (module.HasInitializer) + sb.AppendLine("\t\tInitialize(module);"); + sb.AppendLine("\t}"); sb.AppendLine("}"); diff --git a/src/gaemstone.SourceGen/Structure/MethodEntityInfo.cs b/src/gaemstone.SourceGen/Structure/MethodEntityInfo.cs index 8fb5c6f..43a0067 100644 --- a/src/gaemstone.SourceGen/Structure/MethodEntityInfo.cs +++ b/src/gaemstone.SourceGen/Structure/MethodEntityInfo.cs @@ -25,6 +25,8 @@ public class MethodEntityInfo : BaseEntityInfo public bool HasPhaseSet { get; private set; } public override bool HasEntitiesToAdd => base.HasEntitiesToAdd || !HasPhaseSet; + // TODO: Support [Source]. + public MethodEntityInfo(ISymbol symbol) : base(symbol) { diff --git a/src/gaemstone.SourceGen/Structure/ModuleEntityInfo.cs b/src/gaemstone.SourceGen/Structure/ModuleEntityInfo.cs index a5c0573..6bee8aa 100644 --- a/src/gaemstone.SourceGen/Structure/ModuleEntityInfo.cs +++ b/src/gaemstone.SourceGen/Structure/ModuleEntityInfo.cs @@ -11,15 +11,18 @@ public class ModuleEntityInfo : TypeEntityInfo { public bool IsPartial { get; } public bool IsBuiltIn { get; } - - // TODO: Support [Source]. + public bool HasInitializer { get; } public ModuleEntityInfo(ISymbol symbol) : base(symbol) { var classDecl = (TypeDeclarationSyntax)Symbol.DeclaringSyntaxReferences.First().GetSyntax(); IsPartial = classDecl.Modifiers.Any(t => t.IsKind(SyntaxKind.PartialKeyword)); + IsBuiltIn = Has("BuiltIn"); + + HasInitializer = Symbol.AllInterfaces.Any(i => + i.GetFullName(FullNameStyle.NoGeneric) == "gaemstone.ECS.IModuleInitializer"); } protected override IEnumerable ValidateSelf()