From 3aec3caf949c246855a0d655eb359935605930c4 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 13 Aug 2026 17:30:22 +0100 Subject: Make JavaTypeArg a sealed interface --- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 10 +++++----- .../compiler/output/lang/java/ast/JavaTypeArg.java | 16 +++++++++++----- .../compiler/output/lang/java/ast/JavaTypeVariance.java | 6 ------ 3 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeVariance.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 29bb762..1d14b29 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 @@ -422,15 +422,15 @@ public class JavaWriter implements AutoCloseable { } private static void writeTypeArg(JavaTypeArg arg, WriteString writer) throws IOException { - switch (arg.variance()) { - case INVARIANT -> { - // Do nothing. + switch (arg) { + case JavaTypeArg.Invariant invariant -> { + writeTypeRef(invariant.type(), writer); } - case SUPER -> { + case JavaTypeArg.SuperType superType -> { writer.write("? super "); + writeTypeRef(superType.type(), writer); } } - writeTypeRef(arg.type(), writer); } // == Visibility == 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 index 6bbee59..8253275 100644 --- 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 @@ -1,11 +1,17 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; -public record JavaTypeArg(JavaTypeVariance variance, JavaTypeRef type) { - public static JavaTypeArg invariant(JavaTypeRef type) { - return new JavaTypeArg(JavaTypeVariance.INVARIANT, type); +public sealed interface JavaTypeArg { + static JavaTypeArg invariant(JavaTypeRef type) { + return new Invariant(type); } - public static JavaTypeArg superType(JavaTypeRef type) { - return new JavaTypeArg(JavaTypeVariance.SUPER, type); + record Invariant(JavaTypeRef type) implements JavaTypeArg { + } + + static JavaTypeArg superType(JavaTypeRef type) { + return new SuperType(type); + } + + record SuperType(JavaTypeRef type) implements JavaTypeArg { } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeVariance.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeVariance.java deleted file mode 100644 index 00a671d..0000000 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeVariance.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.zwobble.hobgoblin.compiler.output.lang.java.ast; - -public enum JavaTypeVariance { - INVARIANT, - SUPER -} -- cgit v1.2.3