diff options
author | George Mount <mount@google.com> | 2017-08-14 13:35:56 -0700 |
---|---|---|
committer | George Mount <mount@google.com> | 2017-08-14 15:49:54 -0700 |
commit | eaab6089f7c5f6eda2b19449501183c0537fbee0 (patch) | |
tree | cd23131ef1d994326d20fe6eabc7d34e8ff5df72 /compiler/src/main/java/android/databinding | |
parent | 698596486d1551c7bcc367e99efdb144c161e7fa (diff) | |
download | data-binding-eaab6089f7c5f6eda2b19449501183c0537fbee0.tar.gz |
Fix lambda expression referencing two-way bound property.
Bug 64645736
When a lambda expression referenced a two-way bound view property,
it would error. This fixes two problems. First, the sub-expression
wasn't being replaced in the lambda expression's model. Second,
the lambda expression was being sealed before the inverse binding
substitutions were being made.
Test: gw runAllTests
Change-Id: If8ac14f7203404da97f61e8dee7c44e338db0eba
Diffstat (limited to 'compiler/src/main/java/android/databinding')
-rw-r--r-- | compiler/src/main/java/android/databinding/tool/expr/FieldAccessExpr.java | 2 | ||||
-rw-r--r-- | compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/expr/FieldAccessExpr.java b/compiler/src/main/java/android/databinding/tool/expr/FieldAccessExpr.java index da932f9e..d51df2f3 100644 --- a/compiler/src/main/java/android/databinding/tool/expr/FieldAccessExpr.java +++ b/compiler/src/main/java/android/databinding/tool/expr/FieldAccessExpr.java @@ -334,7 +334,7 @@ public class FieldAccessExpr extends MethodBaseExpr { // the binding with that binding expression. for (Binding binding : bindingTarget.getBindings()) { if (attributeMatchesName(binding.getName(), mName)) { - final Expr replacement = binding.getExpr(); + final Expr replacement = binding.getExpr().cloneToModel(getModel()); replaceExpression(parent, replacement); return replacement; } diff --git a/compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java b/compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java index 847e906a..3ddb29ad 100644 --- a/compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java +++ b/compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java @@ -148,6 +148,8 @@ public class LambdaExpr extends Expr { args.get(i).setClassFromCallback(parameterTypes[i]); } } + getExpr().resolveTwoWayExpressions(this); + getExpr().getResolvedType(); // first convert to execution path because we may add additional expressions mExecutionPath = ExecutionPath.createRoot(); getExpr().toExecutionPath(mExecutionPath); |