summaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-19 18:30:28 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-19 18:30:28 +0100
commitf4bccfa54ba5158d00f866d4265a04cb049f7dbd (patch)
treeb3dac4d10f035ec95f8210e9682f1aa40be105ef /src/main/java/org
parent64344428233e3ed4250477b52f5eb560e168c29b (diff)
Generate Java types for enum
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
index a0f92ce..4001b01 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java
@@ -65,8 +65,13 @@ public class JavaTypesGenerator implements Generator {
for (var statement : namespace.body()) {
switch (statement) {
- case TypedEnumDefinitionNode enumDefinitionNode -> {
- throw new UnsupportedOperationException("TODO");
+ case TypedEnumDefinitionNode enumDefinition -> {
+ var javaCompilationUnit = new JavaCompilationUnit(
+ packageParts,
+ generateEnumDefinition(enumDefinition, context)
+ );
+
+ javaCompilationUnits.add(javaCompilationUnit);
}
case TypedNativeTypeDefinitionNode nativeTypeDefinition -> {
@@ -95,6 +100,20 @@ public class JavaTypesGenerator implements Generator {
return javaCompilationUnits;
}
+ private JavaTypeDeclaration generateEnumDefinition(
+ TypedEnumDefinitionNode enumDefinition,
+ Context context
+ ) {
+ return new JavaEnumDeclaration(
+ enumDefinition.name(),
+ enumDefinition.variants().stream()
+ .map(variant -> new JavaEnumConstant(variant.name()))
+ .toList(),
+ JavaCustomArea.forType(generateTypeRef(enumDefinition.type(), context), "body"),
+ enumDefinition.docComment()
+ );
+ }
+
private JavaRecordDeclaration generateStructDefinition(
TypedStructDefinitionNode structDefinition,
Context context