diff options
Diffstat (limited to 'src/main/java/org/zwobble')
2 files changed, 29 insertions, 33 deletions
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 b693ef3..03d6ae7 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 @@ -206,41 +206,29 @@ public class JavaPreciselyMatchersGenerator implements Generator { new JavaParam(genericMatcherRef(JavaTypeArg.superType(javaFieldTypeRef)), javaFieldName) ), new JavaBlock(List.of( - // TODO: avoid using Java streams here + new JavaLocalVariableDeclaration( + submatchersIdentifier, + new JavaNewExpression( + JavaTypeRef.arrayList(genericMatcherRef(JavaTypeArg.superType(javaStructTypeRef))), + List.of(new JavaFieldAccess(JavaRef.THIS, submatchersIdentifier)) + ) + ), + new JavaExpressionStatement(new JavaMethodCall( + new JavaRef(submatchersIdentifier), + JavaIdentifier.of("add"), + List.of(new JavaStaticMethodCall( + MATCHERS_REF, + JavaIdentifier.of("has"), + List.of( + new JavaStringLiteral(field.name()), + new JavaMethodRef(javaStructTypeRef, javaFieldName), + new JavaRef(javaFieldName) + ) + )) + )), new JavaReturn(new JavaNewExpression( javaMatcherTypeRef, - List.of( - new JavaMethodCall( - new JavaStaticMethodCall( - JavaTypeRef.STREAM, - JavaIdentifier.of("concat"), - List.of( - new JavaMethodCall( - new JavaFieldAccess(JavaRef.THIS, submatchersIdentifier), - JavaIdentifier.of("stream"), - List.of() - ), - new JavaStaticMethodCall( - JavaTypeRef.STREAM, - JavaIdentifier.of("of"), - List.of( - new JavaStaticMethodCall( - MATCHERS_REF, - JavaIdentifier.of("has"), - List.of( - new JavaStringLiteral(field.name()), - new JavaMethodRef(javaStructTypeRef, javaFieldName), - new JavaRef(javaFieldName) - ) - ) - ) - ) - ) - ), - JavaIdentifier.of("toList"), - List.of() - ) - ) + List.of(new JavaRef(submatchersIdentifier)) )) )) )); 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 0050eb8..8fd536b 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 @@ -45,6 +45,14 @@ public record JavaTypeRef(JavaPackageName packageName, List<JavaIdentifier> type public static final JavaTypeRef STRING = primitive("String"); public static final JavaTypeRef VOID = primitive("void"); + public static JavaTypeRef arrayList(JavaTypeRef elementType) { + return JavaTypeRef.generic( + JavaPackages.JAVA_UTIL, + List.of(JavaIdentifier.of("ArrayList")), + List.of(JavaTypeArg.invariant(elementType)) + ); + } + public static final JavaTypeRef LIST = topLevel(JavaPackages.JAVA_UTIL, JavaIdentifier.of("List")); public static JavaTypeRef list(JavaTypeRef elementType) { |
