From ecebc9cbb2bec79abecc068eb5ca740bd36fd0fc Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 13 Jul 2026 20:44:01 +0100 Subject: Support array types in JavaTypeRef --- .../compiler/output/lang/java/JavaWriter.java | 4 +++ .../compiler/output/lang/java/ast/JavaTypeRef.java | 37 +++++++++++++++++----- 2 files changed, 33 insertions(+), 8 deletions(-) (limited to 'src/main/java/org/zwobble') 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 d1b0ccc..297bd27 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 @@ -361,6 +361,10 @@ public class JavaWriter implements AutoCloseable { ); writer.write(">"); } + + for (var dimensionIndex = 0; dimensionIndex < type.arrayDimensions(); dimensionIndex++) { + writer.write("[]"); + } } private static void writeTypeArg(JavaTypeArg arg, WriteString writer) throws IOException { 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 81e0acc..a50ed6e 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,17 +3,27 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; import java.util.Arrays; import java.util.List; -public record JavaTypeRef(JavaPackageName packageName, List typeNames, List args) { +public record JavaTypeRef( + JavaPackageName packageName, + List typeNames, + List args, + int arrayDimensions +) { private static JavaTypeRef primitive(String name) { - return new JavaTypeRef(JavaPackageName.EMPTY, List.of(JavaIdentifier.of(name)), List.of()); + return new JavaTypeRef( + JavaPackageName.EMPTY, + List.of(JavaIdentifier.of(name)), + List.of(), + 0 + ); } public static JavaTypeRef topLevel(JavaPackageName packageName, JavaIdentifier name) { - return new JavaTypeRef(packageName, List.of(name), List.of()); + return new JavaTypeRef(packageName, List.of(name), List.of(), 0); } public static JavaTypeRef inner(JavaPackageName packageName, JavaIdentifier... typeNames) { - return new JavaTypeRef(packageName, Arrays.asList(typeNames), List.of()); + return new JavaTypeRef(packageName, Arrays.asList(typeNames), List.of(), 0); } public static JavaTypeRef topLevelGeneric( @@ -21,7 +31,7 @@ public record JavaTypeRef(JavaPackageName packageName, List type JavaIdentifier name, List args ) { - return new JavaTypeRef(packageName, List.of(name), args); + return new JavaTypeRef(packageName, List.of(name), args, 0); } public static JavaTypeRef generic( @@ -29,7 +39,7 @@ public record JavaTypeRef(JavaPackageName packageName, List type List typeNames, List args ) { - return new JavaTypeRef(packageName, typeNames, args); + return new JavaTypeRef(packageName, typeNames, args, 0); } private static class JavaPackages { @@ -49,6 +59,15 @@ public record JavaTypeRef(JavaPackageName packageName, List type public static final JavaTypeRef STRING = primitive("String"); public static final JavaTypeRef VOID = primitive("void"); + public static JavaTypeRef array(JavaTypeRef elementType) { + return new JavaTypeRef( + elementType.packageName, + elementType.typeNames, + elementType.args, + elementType.arrayDimensions + 1 + ); + } + public static JavaTypeRef arrayList(JavaTypeRef elementType) { return JavaTypeRef.generic( JavaPackages.JAVA_UTIL, @@ -67,7 +86,8 @@ public record JavaTypeRef(JavaPackageName packageName, List type return new JavaTypeRef( LIST.packageName, LIST.typeNames, - List.of(JavaTypeArg.invariant(elementType)) + List.of(JavaTypeArg.invariant(elementType)), + 0 ); } @@ -79,7 +99,8 @@ public record JavaTypeRef(JavaPackageName packageName, List type return new JavaTypeRef( OPTIONAL.packageName, OPTIONAL.typeNames, - List.of(JavaTypeArg.invariant(elementType)) + List.of(JavaTypeArg.invariant(elementType)), + 0 ); } -- cgit v1.2.3