summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-08-14 10:49:41 +0100
committerMichael Williamson <mike@zwobble.org>2026-08-14 10:49:41 +0100
commit8811a6c2b0a80297d239cbcda169dca8c809458a (patch)
tree1a5935efe28148c1983127666de4637ea96de83c
parenta8bdefad22ad6776aa8695dd403dcc300cf24543 (diff)
Extract generateTypeArg()
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java21
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java8
2 files changed, 17 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
index 5421e58..61fc237 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/java/JavaGenerator.java
@@ -12,6 +12,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Collectors;
public class JavaGenerator {
@@ -151,6 +152,18 @@ public class JavaGenerator {
return this.generateTypeRef(type, true, wildcardTypeParams);
}
+ public JavaTypeArg generateTypeArg(
+ Type type,
+ Set<TypeParam> wildcardTypeParams,
+ Function<JavaTypeRef, JavaTypeArg> variance
+ ) {
+ if (wildcardTypeParams.contains(type)) {
+ return JavaTypeArg.wildcard();
+ } else {
+ return variance.apply(generateTypeRef(type, true, wildcardTypeParams));
+ }
+ }
+
private JavaTypeRef generateTypeRef(Type type, boolean referenceType, Set<TypeParam> wildcardTypeParams) {
return switch (collapseType(type)) {
case ConstructedType constructedType -> {
@@ -161,13 +174,7 @@ public class JavaGenerator {
);
var javaArgs = constructedType.args().stream()
- .map(arg -> {
- if (wildcardTypeParams.contains(arg)) {
- return JavaTypeArg.wildcard();
- } else {
- return JavaTypeArg.invariant(generateTypeRef(arg, true, wildcardTypeParams));
- }
- })
+ .map(arg -> this.generateTypeArg(arg, wildcardTypeParams, JavaTypeArg::invariant))
.toList();
yield JavaTypeRef.generic(innerTypeRef.packageName(), innerTypeRef.typeNames(), javaArgs);
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
index 5b1a282..2950006 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java
@@ -233,11 +233,9 @@ public class JavaPreciselyMatchersGenerator implements Generator {
case TypeOrConstructor.Type<SimpleStructType> _ ->
Set.<TypeParam>of();
};
- var javaFieldMatcherTypeRef = !typeParams.isEmpty() && typeParams.contains(fieldType)
- ? genericMatcherRef(JavaTypeArg.wildcard())
- : genericMatcherRef(JavaTypeArg.superType(
- this.javaGenerator.generateReferenceTypeRef(fieldType, typeParams)
- ));
+ var javaFieldMatcherTypeRef = genericMatcherRef(
+ this.javaGenerator.generateTypeArg(fieldType, typeParams, JavaTypeArg::superType)
+ );
var javaFieldName = this.javaGenerator.generateFieldName(field.name());
methods.add(new JavaMethodDeclaration(