summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java6
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeArg.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java15
3 files changed, 23 insertions, 5 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 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<String> packageName, List<String> typeNames, List<JavaTypeRef> args) {
+public record JavaTypeRef(List<String> packageName, List<String> typeNames, List<JavaTypeArg> 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<String> packageName, List<String> typeNames, List
String name,
List<JavaTypeRef> args
) {
- return new JavaTypeRef(packageName, List.of(name), args);
+ return generic(packageName, List.of(name), args);
}
public static JavaTypeRef generic(
List<String> packageName,
List<String> typeNames,
- List<JavaTypeRef> args
+ List<JavaTypeRef> 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<String> packageName, List<String> 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");