summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-06-12 17:49:47 +0100
committerMichael Williamson <mike@zwobble.org>2026-06-12 17:49:47 +0100
commit8fc6e639dec14ddd7de7cf980a5b8556ba76cf3f (patch)
tree79f11211fa9f88a0b590b4931b917df90cbb17cf /src
parent2ca3465468350235a3204c336175e26e6615a96f (diff)
Move generateTypeRef() to JavaGenerator
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java40
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java37
2 files changed, 41 insertions, 36 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 f0a1d18..732a533 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
@@ -2,7 +2,9 @@ package org.zwobble.hobgoblin.compiler.output.generators.java;
import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter;
import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaCompilationUnit;
-import org.zwobble.hobgoblin.compiler.types.NamespaceName;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeArg;
+import org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaTypeRef;
+import org.zwobble.hobgoblin.compiler.types.*;
import java.io.File;
import java.io.IOException;
@@ -41,4 +43,40 @@ public class JavaGenerator {
return packageParts;
});
}
+
+ public JavaTypeRef generateTypeRef(Type type) {
+ return switch (type) {
+ case ConstructedNativeType constructedNativeType -> {
+ var innerTypeRef = generateTypeRef(
+ constructedNativeType.constructor().genericType()
+ );
+ var javaArgs = constructedNativeType.args().stream()
+ .map(arg -> JavaTypeArg.invariant(generateTypeRef(arg)))
+ .toList();
+ // TODO: separate type for constructed types?
+ yield JavaTypeRef.generic(innerTypeRef.packageName(), innerTypeRef.typeNames(), javaArgs);
+ }
+
+ case SimpleNativeType simpleNativeType -> {
+ var nativeTypeConfig = this.config.nativeTypeConfig(simpleNativeType);
+ if (nativeTypeConfig.isPresent()) {
+ yield nativeTypeConfig.get().javaTypeRef();
+ } else {
+ throw new UnsupportedOperationException("TODO: " + type.describe());
+ }
+ }
+
+ case StructType structType ->
+ JavaTypeRef.topLevel(namespaceToJavaPackageParts(structType.namespaceName()), structType.name());
+
+ case SumType sumType ->
+ JavaTypeRef.topLevel(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name());
+
+ case TypeLevelValueType typeLevelValueType ->
+ throw new UnsupportedOperationException("TODO");
+
+ case TypeParam typeParam ->
+ throw new UnsupportedOperationException("TODO");
+ };
+ }
}
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 c22ff14..fe25a04 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
@@ -255,44 +255,11 @@ public class JavaTypesGenerator implements Generator {
Context context
) {
var type = typeNode.value();
- return generateTypeRef(type, context);
+ return this.javaGenerator.generateTypeRef(type);
}
private JavaTypeRef generateTypeRef(Type type, Context context) {
- return switch (type) {
- case ConstructedNativeType constructedNativeType -> {
- var innerTypeRef = generateTypeRef(
- constructedNativeType.constructor().genericType(),
- context
- );
- var javaArgs = constructedNativeType.args().stream()
- .map(arg -> JavaTypeArg.invariant(generateTypeRef(arg, context)))
- .toList();
- // TODO: separate type for constructed types?
- yield JavaTypeRef.generic(innerTypeRef.packageName(), innerTypeRef.typeNames(), javaArgs);
- }
-
- case SimpleNativeType simpleNativeType -> {
- var nativeTypeConfig = nativeTypeConfig(simpleNativeType);
- if (nativeTypeConfig.isPresent()) {
- yield nativeTypeConfig.get().javaTypeRef();
- } else {
- throw new UnsupportedOperationException("TODO: " + type.describe());
- }
- }
-
- case StructType structType ->
- JavaTypeRef.topLevel(namespaceToJavaPackageParts(structType.namespaceName()), structType.name());
-
- case SumType sumType ->
- JavaTypeRef.topLevel(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name());
-
- case TypeLevelValueType typeLevelValueType ->
- throw new UnsupportedOperationException("TODO");
-
- case TypeParam typeParam ->
- throw new UnsupportedOperationException("TODO");
- };
+ return this.javaGenerator.generateTypeRef(type);
}
private Optional<JavaTypeRef> generateBuilderTypeRef(Type type) {