summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2017-08-14 13:35:56 -0700
committerGeorge Mount <mount@google.com>2017-08-14 15:49:54 -0700
commiteaab6089f7c5f6eda2b19449501183c0537fbee0 (patch)
treecd23131ef1d994326d20fe6eabc7d34e8ff5df72 /compiler/src/main/java/android/databinding
parent698596486d1551c7bcc367e99efdb144c161e7fa (diff)
downloaddata-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.java2
-rw-r--r--compiler/src/main/java/android/databinding/tool/expr/LambdaExpr.java2
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);