diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-12-06 11:22:36 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-12-06 11:22:36 +0000 |
| commit | c0c4e25109fba5bb50c8fc647903a1951a63dfce (patch) | |
| tree | fe601104378c4bdaa66d45c8b296c47eefce30d8 /src/main/java/org/zwobble | |
| parent | 51e8ff721cc7079212119ba44fcc4bf0f9818d1e (diff) | |
Extract common code for capture access
Diffstat (limited to 'src/main/java/org/zwobble')
| -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()); } |
