summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javapreciselymatchers/JavaPreciselyMatchersGenerator.java54
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaTypeRef.java8
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) {