diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 13 |
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()); } |
