aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/FreeVariables.java7
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java5
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/FreeVariablesTests.java8
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)));