aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org')
-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());
}