diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java | 4 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java | 37 |
2 files changed, 33 insertions, 8 deletions
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<JavaIdentifier> typeNames, List<JavaTypeArg> args) { +public record JavaTypeRef( + JavaPackageName packageName, + List<JavaIdentifier> typeNames, + List<JavaTypeArg> 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<JavaIdentifier> type JavaIdentifier name, List<JavaTypeArg> 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<JavaIdentifier> type List<JavaIdentifier> typeNames, List<JavaTypeArg> 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<JavaIdentifier> 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<JavaIdentifier> 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<JavaIdentifier> type return new JavaTypeRef( OPTIONAL.packageName, OPTIONAL.typeNames, - List.of(JavaTypeArg.invariant(elementType)) + List.of(JavaTypeArg.invariant(elementType)), + 0 ); } |
