diff options
Diffstat (limited to 'src/main')
3 files changed, 32 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 df23aa2..82ef0cd 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 @@ -160,7 +160,7 @@ public class JavaTypesGenerator implements Generator { .map(arg -> generateTypeRef(arg)) .toList(); // TODO: separate type for constructed types? - yield JavaTypeRef.generic(innerTypeRef.packageName(), innerTypeRef.name(), argRefs); + yield JavaTypeRef.generic(innerTypeRef.packageName(), innerTypeRef.typeNames(), argRefs); } case SimpleNativeType simpleNativeType -> { @@ -169,17 +169,17 @@ public class JavaTypesGenerator implements Generator { } else if (type.equals(NativeTypes.STRING)) { yield JavaTypeRef.STRING; } else if (type.equals(NativeTypes.LIST_INNER)) { - yield JavaTypeRef.ref(List.of("java", "util"), "List"); + yield JavaTypeRef.topLevel(List.of("java", "util"), "List"); } else { throw new UnsupportedOperationException("TODO"); } } case StructType structType -> - JavaTypeRef.ref(namespaceToJavaPackageParts(structType.namespaceName()), structType.name()); + JavaTypeRef.topLevel(namespaceToJavaPackageParts(structType.namespaceName()), structType.name()); case SumType sumType -> - JavaTypeRef.ref(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name()); + JavaTypeRef.topLevel(namespaceToJavaPackageParts(sumType.namespaceName()), sumType.name()); case TypeLevelValueType typeLevelValueType -> throw new UnsupportedOperationException("TODO"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java index 0d25a0e..1252777 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java @@ -225,7 +225,11 @@ public class JavaWriter implements AutoCloseable { writer.write("."); } - writer.write(type.name()); + writeWithSeparator( + type.typeNames(), + writer::write, + () -> writer.write(".") + ); if (!type.args().isEmpty()) { writer.write("<"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java index 88450ca..8fcac28 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java @@ -1,18 +1,35 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; +import java.util.Arrays; import java.util.List; -public record JavaTypeRef(List<String> packageName, String name, List<JavaTypeRef> args) { +public record JavaTypeRef(List<String> packageName, List<String> typeNames, List<JavaTypeRef> args) { private static JavaTypeRef primitive(String name) { - return new JavaTypeRef(List.of(), name, List.of()); + return new JavaTypeRef(List.of(), List.of(name), List.of()); } - public static JavaTypeRef ref(List<String> packageName, String name) { - return new JavaTypeRef(packageName, name, List.of()); + public static JavaTypeRef topLevel(List<String> packageName, String name) { + return new JavaTypeRef(packageName, List.of(name), List.of()); } - public static JavaTypeRef generic(List<String> packageName, String name, List<JavaTypeRef> args) { - return new JavaTypeRef(packageName, name, args); + public static JavaTypeRef inner(List<String> packageName, String... typeNames) { + return new JavaTypeRef(packageName, Arrays.asList(typeNames), List.of()); + } + + public static JavaTypeRef topLevelGeneric( + List<String> packageName, + String name, + List<JavaTypeRef> args + ) { + return new JavaTypeRef(packageName, List.of(name), args); + } + + public static JavaTypeRef generic( + List<String> packageName, + List<String> typeNames, + List<JavaTypeRef> args + ) { + return new JavaTypeRef(packageName, typeNames, args); } public static final JavaTypeRef INT = primitive("int"); |
