From f20705b9d152a1656c7496e18fb0d69942d597a5 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 16:28:00 +0100 Subject: Introduce JavaTypeArg --- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 6 +++++- .../compiler/output/lang/java/ast/JavaTypeArg.java | 7 +++++++ .../compiler/output/lang/java/ast/JavaTypeRef.java | 15 +++++++++++---- 3 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeArg.java (limited to 'src/main/java') 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 bcb2778..656636d 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 @@ -405,6 +405,10 @@ public class JavaWriter implements AutoCloseable { this.writer.write("\""); } + private static void writeTypeArg(JavaTypeArg arg, WriteString writer) throws IOException { + writeTypeRef(arg.type(), writer); + } + void writeTypeRef(JavaTypeRef type) throws IOException { writeTypeRef(type, writer::write); } @@ -425,7 +429,7 @@ public class JavaWriter implements AutoCloseable { writer.write("<"); writeWithSeparator( type.args(), - arg -> writeTypeRef(arg, writer), + arg -> writeTypeArg(arg, writer), () -> writer.write(", ") ); writer.write(">"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeArg.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeArg.java new file mode 100644 index 0000000..0d1b290 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeArg.java @@ -0,0 +1,7 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaTypeArg(JavaTypeRef type) { + public static JavaTypeArg invariant(JavaTypeRef type) { + return new JavaTypeArg(type); + } +} 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 74dbbfb..55b8546 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 @@ -3,7 +3,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; import java.util.Arrays; import java.util.List; -public record JavaTypeRef(List packageName, List typeNames, List args) { +public record JavaTypeRef(List packageName, List typeNames, List args) { private static JavaTypeRef primitive(String name) { return new JavaTypeRef(List.of(), List.of(name), List.of()); } @@ -21,14 +21,17 @@ public record JavaTypeRef(List packageName, List typeNames, List String name, List args ) { - return new JavaTypeRef(packageName, List.of(name), args); + return generic(packageName, List.of(name), args); } public static JavaTypeRef generic( List packageName, List typeNames, - List args + List argTypes ) { + var args = argTypes.stream() + .map(arg -> JavaTypeArg.invariant(arg)) + .toList(); return new JavaTypeRef(packageName, typeNames, args); } @@ -40,7 +43,11 @@ public record JavaTypeRef(List packageName, List typeNames, List public static final JavaTypeRef LIST = topLevel(List.of("java", "util"), "List"); public static JavaTypeRef list(JavaTypeRef elementType) { - return new JavaTypeRef(LIST.packageName, LIST.typeNames, List.of(elementType)); + return new JavaTypeRef( + LIST.packageName, + LIST.typeNames, + List.of(JavaTypeArg.invariant(elementType)) + ); } public static final JavaTypeRef OBJECT = topLevel(List.of("java", "lang"), "Object"); -- cgit v1.2.3