diff options
Diffstat (limited to 'src/main/java/org')
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( |
