diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-14 10:49:41 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-14 10:49:41 +0100 |
| commit | 8811a6c2b0a80297d239cbcda169dca8c809458a (patch) | |
| tree | 1a5935efe28148c1983127666de4637ea96de83c /src | |
| parent | a8bdefad22ad6776aa8695dd403dcc300cf24543 (diff) | |
Extract generateTypeArg()
Diffstat (limited to 'src')
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( |
