diff options
Diffstat (limited to 'src')
3 files changed, 7 insertions, 13 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java b/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java index bd55979..99cc9b4 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java @@ -12,13 +12,10 @@ import static org.zwobble.couscous.util.Casts.tryCast; import static org.zwobble.couscous.util.ExtraStreams.toStream; public class FreeVariables { - public static List<VariableDeclaration> findFreeVariables(List<FormalArgumentNode> formalArguments, List<? extends Node> body) { + public static List<VariableDeclaration> findFreeVariables(List<? extends Node> body) { Stream<VariableDeclaration> referencedDeclarations = body.stream() .flatMap(FreeVariables::findReferencedDeclarations); - Stream<VariableDeclaration> declarations = Stream.concat( - formalArguments.stream() - .map(argument -> argument.getDeclaration()), - body.stream().flatMap(FreeVariables::findDeclarations)); + Stream<VariableDeclaration> declarations = body.stream().flatMap(FreeVariables::findDeclarations); return Sets.difference( referencedDeclarations.collect(Collectors.toSet()), declarations.collect(Collectors.toSet())).stream().collect(Collectors.toList()); diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 0d04d02..8ca1a5f 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -49,8 +49,9 @@ public class JavaReader { String className = generateClassName(expression); LambdaDeclarationAdaptor lambda = new LambdaDeclarationAdaptor(expression); List<VariableDeclaration> freeVariables = findFreeVariables( - lambda.getFormalArguments().collect(Collectors.toList()), - lambda.getBody()); + Stream.concat( + lambda.getFormalArguments(), + lambda.getBody().stream()).collect(Collectors.toList())); ClassNode classNode = new ClassNodeBuilder(className) .constructor(buildConstructor(TypeName.of(className), freeVariables)) diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java index 4461e7c..bd860f7 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java @@ -1,8 +1,6 @@ package org.zwobble.couscous.tests.frontends.java; import org.junit.Test; -import org.zwobble.couscous.ast.FormalArgumentNode; -import org.zwobble.couscous.ast.LocalVariableDeclarationNode; import org.zwobble.couscous.ast.VariableDeclaration; import org.zwobble.couscous.values.StringValue; @@ -22,7 +20,7 @@ public class FreeVariablesTests { @Test public void referenceIsFreeIfThereIsNoAssociatedDeclaration() { VariableDeclaration declaration = var("[id]", "[name]", StringValue.REF); - List<VariableDeclaration> freeVariables = findFreeVariables(emptyList(), asList(reference(declaration))); + List<VariableDeclaration> freeVariables = findFreeVariables(asList(reference(declaration))); assertEquals(asList(declaration), freeVariables); } @@ -30,8 +28,7 @@ public class FreeVariablesTests { public void referenceIsNotFreeIfIsDeclaredAsArgument() { VariableDeclaration declaration = var("[id]", "[name]", StringValue.REF); List<VariableDeclaration> freeVariables = findFreeVariables( - asList(formalArg(declaration)), - asList(reference(declaration))); + asList(formalArg(declaration), reference(declaration))); assertEquals(emptyList(), freeVariables); } @@ -39,7 +36,6 @@ public class FreeVariablesTests { public void referenceIsNotFreeIfIsReferenceToLocalDefinedInBody() { VariableDeclaration declaration = var("[id]", "[name]", StringValue.REF); List<VariableDeclaration> freeVariables = findFreeVariables( - emptyList(), asList( localVariableDeclaration(declaration, literal("[value]")), reference(declaration))); |
