diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-02 09:11:46 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-02 09:11:46 +0100 |
| commit | bf1d5239ea0b6a2017e8f82049446bfc3de2beda (patch) | |
| tree | 5ec65c0dcf7cd20bc71d9e5c859a5d374da9a6b3 /src/main/java/org/zwobble | |
| parent | e4a13a6b9132d25ecfe0580b7986c2531319a3f6 (diff) | |
Split writing of Java nodes from generation
Diffstat (limited to 'src/main/java/org/zwobble')
2 files changed, 20 insertions, 11 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 2f024be..6e876f2 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 @@ -32,13 +32,27 @@ public class JavaTypesGenerator implements Generator { @Override public void generate(List<TypedNamespaceNode> namespaces) throws IOException { for (var namespace : namespaces) { - generateNamespace(namespace); + var javaCompilationUnits = generateNamespace(namespace); + + for (var javaCompilationUnit : javaCompilationUnits) { + var javaCompilationUnitPath = this.sourceRootDirectory + .resolve(String.join(File.separator, javaCompilationUnit.packageName())) + .resolve(javaCompilationUnit.typeDeclaration().name() + ".java"); + try (var writer = new JavaWriter(CodeWriter.file(javaCompilationUnitPath))) { + writer.writeCompilationUnit(javaCompilationUnit); + } catch (Exception e) { + // TODO: better handling + throw new RuntimeException(e); + } + } } } - private void generateNamespace(TypedNamespaceNode namespace) throws IOException { + private List<JavaCompilationUnit> generateNamespace(TypedNamespaceNode namespace) { var packageParts = namespaceToJavaPackageParts(namespace.namespaceName()); + var javaCompilationUnits = new ArrayList<JavaCompilationUnit>(); + for (var statement : namespace.body()) { switch (statement) { case TypedStructDefinitionNode structDefinition -> { @@ -55,15 +69,7 @@ public class JavaTypesGenerator implements Generator { ) ); - var javaCompilationUnitPath = this.sourceRootDirectory - .resolve(String.join(File.separator, packageParts)) - .resolve(structDefinition.name() + ".java"); - try (var writer = new JavaWriter(CodeWriter.file(javaCompilationUnitPath))) { - writer.writeCompilationUnit(javaCompilationUnit); - } catch (Exception e) { - // TODO: better handling - throw new RuntimeException(e); - } + javaCompilationUnits.add(javaCompilationUnit); } case TypedSumDefinitionNode sumDefinition -> { @@ -71,6 +77,8 @@ public class JavaTypesGenerator implements Generator { } } } + + return javaCompilationUnits; } private ArrayList<String> namespaceToJavaPackageParts(NamespaceName namespaceName) { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/java/ast/JavaTypeDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/java/ast/JavaTypeDeclaration.java index 5f0a3a5..cffb58b 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/java/ast/JavaTypeDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/java/ast/JavaTypeDeclaration.java @@ -1,4 +1,5 @@ package org.zwobble.hobgoblin.compiler.output.java.ast; public sealed interface JavaTypeDeclaration permits JavaRecordDeclaration { + String name(); } |
