From 13a84774245b400c628f03506c02d60b64745d80 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 17:42:27 +0100 Subject: Push handling of namespace configs for Java packages into JavaGenerator --- .../output/generators/java/JavaGenerator.java | 22 ++++++++++++++-------- .../generators/java/JavaGeneratorConfig.java | 4 ++++ .../JavaPreciselyMatchersGenerator.java | 14 ++++++++------ .../generators/javatypes/JavaTypesGenerator.java | 16 +++++++--------- 4 files changed, 33 insertions(+), 23 deletions(-) (limited to 'src/main/java') 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 namespaceToJavaPackageParts( - List packageName, - NamespaceName namespaceName - ) { - var packageParts = new ArrayList<>(packageName); - packageParts.addAll(namespaceName.parts()); - return packageParts; + public List 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 nativeTypeConfig(SimpleNativeType type) { return Optional.ofNullable(this.nativeTypeConfigs.get(type)); } + + public Optional 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 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 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 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( -- cgit v1.2.3