summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java30
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/java/ast/JavaTypeDeclaration.java1
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();
}