From 8fc6e639dec14ddd7de7cf980a5b8556ba76cf3f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 17:49:47 +0100 Subject: Move generateTypeRef() to JavaGenerator --- .../output/generators/java/JavaGenerator.java | 40 +++++++++++++++++++++- .../generators/javatypes/JavaTypesGenerator.java | 37 ++------------------ 2 files changed, 41 insertions(+), 36 deletions(-) (limited to 'src/main/java/org/zwobble') 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 generateBuilderTypeRef(Type type) { -- cgit v1.2.3