summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java37
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
);
}