From 6c4c70d1302d88b8ee87451424cdfec0522ea88e Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 24 Nov 2015 21:12:50 +0000 Subject: Take single list of nodes when finding free variables --- .../java/org/zwobble/couscous/frontends/java/FreeVariables.java | 7 ++----- src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 5 +++-- .../zwobble/couscous/tests/frontends/java/FreeVariablesTests.java | 8 ++------ 3 files changed, 7 insertions(+), 13 deletions(-) (limited to 'src') 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 findFreeVariables(List formalArguments, List body) { + public static List findFreeVariables(List body) { Stream referencedDeclarations = body.stream() .flatMap(FreeVariables::findReferencedDeclarations); - Stream declarations = Stream.concat( - formalArguments.stream() - .map(argument -> argument.getDeclaration()), - body.stream().flatMap(FreeVariables::findDeclarations)); + Stream 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 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 freeVariables = findFreeVariables(emptyList(), asList(reference(declaration))); + List 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 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 freeVariables = findFreeVariables( - emptyList(), asList( localVariableDeclaration(declaration, literal("[value]")), reference(declaration))); -- cgit v1.2.3