summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-12 17:42:27 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-12 17:42:27 +0100
commit13a84774245b400c628f03506c02d60b64745d80 (patch)
tree8feae954076adee6fe75a58564dda2ef02ecf91f /src/main/java
parent97b73bfdcab8f408bed2ce40535d35784c96ff4c (diff)
Push handling of namespace configs for Java packages into JavaGenerator
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java22
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java14
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java16
4 files changed, 33 insertions, 23 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
index 1d55fd1..f0a1d18 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
@@ -11,7 +11,11 @@ import java.util.ArrayList;
import java.util.List;
public class JavaGenerator {
- private void JavaGenerator() {}
+ private final JavaGeneratorConfig config;
+
+ public JavaGenerator(JavaGeneratorConfig config) {
+ this.config = config;
+ }
public static void write(
Path sourceRootDirectory,
@@ -27,12 +31,14 @@ public class JavaGenerator {
}
}
- public static List<String> namespaceToJavaPackageParts(
- List<String> packageName,
- NamespaceName namespaceName
- ) {
- var packageParts = new ArrayList<>(packageName);
- packageParts.addAll(namespaceName.parts());
- return packageParts;
+ public List<String> namespaceToJavaPackageParts(NamespaceName namespaceName) {
+ // TODO: handle subpackages
+ return this.config.namespaceConfig(namespaceName)
+ .map(namespaceConfig -> namespaceConfig.packageName())
+ .orElseGet(() -> {
+ var packageParts = new ArrayList<>(this.config.packageName());
+ packageParts.addAll(namespaceName.parts());
+ return packageParts;
+ });
}
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
index b7bd6c5..4f2fe07 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGeneratorConfig.java
@@ -77,4 +77,8 @@ public record JavaGeneratorConfig(
public Optional<JavaNativeTypeConfig> nativeTypeConfig(SimpleNativeType type) {
return Optional.ofNullable(this.nativeTypeConfigs.get(type));
}
+
+ public Optional<JavaNamespaceConfig> namespaceConfig(NamespaceName namespaceName) {
+ return Optional.ofNullable(this.namespaceConfigs.get(namespaceName));
+ }
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index 38cd938..ab15e64 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -8,6 +8,7 @@ import org.zwobble.hobgoblin.compiler.ast.typed.TypedSumDefinitionNode;
import org.zwobble.hobgoblin.compiler.config.OutputConfig;
import org.zwobble.hobgoblin.compiler.output.generators.Generator;
import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGenerator;
+import org.zwobble.hobgoblin.compiler.output.generators.java.JavaGeneratorConfig;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*;
import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo;
import org.zwobble.hobgoblin.compiler.types.*;
@@ -27,18 +28,19 @@ public class JavaPreciselyMatchersGenerator implements Generator {
return () -> {
var relativeOutputPath = output.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
- var packageName = output.getString("packageName").value();
+ var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+ var javaGenerator = new JavaGenerator(javaConfig);
- return new JavaPreciselyMatchersGenerator(outputPath, packageName);
+ return new JavaPreciselyMatchersGenerator(outputPath, javaGenerator);
};
}
private final Path sourceRootDirectory;
- private final List<String> packageName;
+ private final JavaGenerator javaGenerator;
- public JavaPreciselyMatchersGenerator(Path sourceRootDirectory, String packageName) {
+ public JavaPreciselyMatchersGenerator(Path sourceRootDirectory, JavaGenerator javaGenerator) {
this.sourceRootDirectory = sourceRootDirectory;
- this.packageName = List.of(packageName.split("\\."));;
+ this.javaGenerator = javaGenerator;
}
@Override
@@ -202,7 +204,7 @@ public class JavaPreciselyMatchersGenerator implements Generator {
}
private List<String> namespaceToJavaPackageParts(NamespaceName namespaceName) {
- return JavaGenerator.namespaceToJavaPackageParts(this.packageName, namespaceName);
+ return this.javaGenerator.namespaceToJavaPackageParts(namespaceName);
}
private static class Context {
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 ab156da..c22ff14 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
@@ -27,20 +27,24 @@ public class JavaTypesGenerator implements Generator {
var relativeOutputPath = output.getString("path").value();
var outputPath = projectRoot.resolve(relativeOutputPath);
var javaConfig = JavaGeneratorConfig.parseOutputConfig(output);
+ var javaGenerator = new JavaGenerator(javaConfig);
- return new JavaTypesGenerator(outputPath, javaConfig);
+ return new JavaTypesGenerator(outputPath, javaConfig, javaGenerator);
};
}
private final Path sourceRootDirectory;
private final JavaGeneratorConfig javaGeneratorConfig;
+ private final JavaGenerator javaGenerator;
public JavaTypesGenerator(
Path sourceRootDirectory,
- JavaGeneratorConfig javaGeneratorConfig
+ JavaGeneratorConfig javaGeneratorConfig,
+ JavaGenerator javaGenerator
) {
this.sourceRootDirectory = sourceRootDirectory;
this.javaGeneratorConfig = javaGeneratorConfig;
+ this.javaGenerator = javaGenerator;
}
@Override
@@ -243,13 +247,7 @@ public class JavaTypesGenerator implements Generator {
}
private List<String> namespaceToJavaPackageParts(NamespaceName namespaceName) {
- // TODO: handle subpackages
- var namespaceConfig = this.javaGeneratorConfig.namespaceConfigs().get(namespaceName);
- if (namespaceConfig != null) {
- return namespaceConfig.packageName();
- }
-
- return JavaGenerator.namespaceToJavaPackageParts(this.javaGeneratorConfig.packageName(), namespaceName);
+ return this.javaGenerator.namespaceToJavaPackageParts(namespaceName);
}
private JavaTypeRef generateTypeRef(