aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-12-06 11:22:36 +0000
committerMichael Williamson <mike@zwobble.org>2015-12-06 11:22:36 +0000
commitc0c4e25109fba5bb50c8fc647903a1951a63dfce (patch)
treefe601104378c4bdaa66d45c8b296c47eefce30d8 /src
parent51e8ff721cc7079212119ba44fcc4bf0f9818d1e (diff)
Extract common code for capture access
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java13
1 files changed, 7 insertions, 6 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 a9531e6..6f5780f 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -82,10 +82,7 @@ public class JavaReader {
{
Map<String, ExpressionNode> freeVariablesById = Maps.transformValues(
Maps.uniqueIndex(freeVariables, VariableDeclaration::getId),
- freeVariable -> fieldAccess(
- thisReference(className),
- freeVariable.getName(),
- freeVariable.getType()));
+ freeVariable -> captureAccess(className, freeVariable));
Function<ExpressionNode, ExpressionNode> replaceExpression = new CaptureReplacer(freeVariablesById);
return eagerMap(body, statement -> statement.replaceExpressions(replaceExpression));
}
@@ -109,11 +106,15 @@ public class JavaReader {
// TODO: generate fresh variables for captures
List<FormalArgumentNode> arguments = eagerMap(freeVariables, FormalArgumentNode::formalArg);
List<StatementNode> body = eagerMap(freeVariables, freeVariable -> assignStatement(
- fieldAccess(thisReference(type), freeVariable.getName(), freeVariable.getType()),
- reference(freeVariable)));
+ captureAccess(type, freeVariable),
+ reference(freeVariable)));
return constructor(arguments, body);
}
+ private FieldAccessNode captureAccess(TypeName type, VariableDeclaration freeVariable) {
+ return fieldAccess(thisReference(type), freeVariable.getName(), freeVariable.getType());
+ }
+
private TypeName generateClassName(LambdaExpression expression) {
return generateAnonymousClassName(expression.resolveMethodBinding().getDeclaringClass());
}