aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-24 18:10:50 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-24 18:12:11 +0000
commitac32b4030f744f25144ef23d62216a01a68d9b0e (patch)
treeb3a741a00b2b9862ed802e957e855a723008dfb1 /src/main/java/org/zwobble/couscous/frontends
parent5fe2fa7934197d73bc1f6a3e361149923279b35a (diff)
Tidy up NodeTransformer
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java19
1 files changed, 3 insertions, 16 deletions
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 f9cfd85..35ed03e 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -7,6 +7,7 @@ import org.eclipse.jdt.core.dom.*;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.sugar.AnonymousClass;
import org.zwobble.couscous.ast.sugar.Lambda;
+import org.zwobble.couscous.ast.visitors.NodeTransformer;
import org.zwobble.couscous.util.ExtraLists;
import java.io.IOException;
@@ -117,22 +118,8 @@ public class JavaReader {
Map<ExpressionNode, ExpressionNode> replacements = Maps.transformValues(
Maps.uniqueIndex(freeVariables, variable -> variable.freeVariable),
freeVariable -> captureAccess(className, freeVariable));
- Function<ExpressionNode, ExpressionNode> replaceExpression = new CaptureReplacer(replacements);
- return eagerMap(body, statement -> statement.replaceExpressions(replaceExpression));
- }
-
- private class CaptureReplacer implements Function<ExpressionNode, ExpressionNode> {
- private final Map<ExpressionNode, ExpressionNode> replacements;
-
- public CaptureReplacer(Map<ExpressionNode, ExpressionNode> replacements) {
- this.replacements = replacements;
- }
-
- @Override
- public ExpressionNode apply(ExpressionNode expression) {
- return Optional.ofNullable(replacements.get(expression))
- .orElseGet(() -> expression.replaceExpressions(this));
- }
+ NodeTransformer transformer = NodeTransformer.replaceExpressions(replacements);
+ return eagerMap(body, statement -> statement.transform(transformer));
}
private ConstructorNode buildConstructor(Scope outerScope, TypeName type, List<CapturedVariable> freeVariables) {