summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2015-09-30 13:23:48 -0700
committerGeorge Mount <mount@google.com>2015-09-30 13:58:52 -0700
commit975c05c00dae9193a636c4775df81d8665fc6749 (patch)
treebb532733cdb01554a7b03b4d0de513d0db275502 /compiler
parenta128d1c99ea98bb48c45d648906652e3d618d513 (diff)
downloaddata-binding-975c05c00dae9193a636c4775df81d8665fc6749.tar.gz
Fix resolving listeners for multi-attribute binding adapters.
Bug 24538724 Change-Id: I39a72fd701abf9d2368d2a0a7fc5a4c1ac63c0a0
Diffstat (limited to 'compiler')
-rw-r--r--compiler/src/main/java/android/databinding/tool/Binding.java17
-rw-r--r--compiler/src/main/java/android/databinding/tool/BindingTarget.java6
-rw-r--r--compiler/src/main/java/android/databinding/tool/LayoutBinder.java1
-rw-r--r--compiler/src/main/java/android/databinding/tool/MergedBinding.java12
4 files changed, 29 insertions, 7 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/Binding.java b/compiler/src/main/java/android/databinding/tool/Binding.java
index 57f6489e..c2bee938 100644
--- a/compiler/src/main/java/android/databinding/tool/Binding.java
+++ b/compiler/src/main/java/android/databinding/tool/Binding.java
@@ -33,19 +33,13 @@ import java.util.List;
public class Binding implements LocationScopeProvider {
private final String mName;
- private final Expr mExpr;
+ private Expr mExpr;
private final BindingTarget mTarget;
private SetterStore.SetterCall mSetterCall;
public Binding(BindingTarget target, String name, Expr expr) {
mTarget = target;
mName = name;
- final ModelClass listenerParameter = getListenerParameter(target, name, expr);
- Expr listenerExpr = expr.resolveListeners(listenerParameter, null);
- if (listenerExpr != expr) {
- listenerExpr.setBindingExpression(true);
- expr = listenerExpr;
- }
mExpr = expr;
}
@@ -54,6 +48,15 @@ public class Binding implements LocationScopeProvider {
return mExpr.getLocations();
}
+ public void resolveListeners() {
+ final ModelClass listenerParameter = getListenerParameter(mTarget, mName, mExpr);
+ Expr listenerExpr = mExpr.resolveListeners(listenerParameter, null);
+ if (listenerExpr != mExpr) {
+ listenerExpr.setBindingExpression(true);
+ mExpr = listenerExpr;
+ }
+ }
+
private SetterStore.BindingSetterCall getSetterCall() {
if (mSetterCall == null) {
try {
diff --git a/compiler/src/main/java/android/databinding/tool/BindingTarget.java b/compiler/src/main/java/android/databinding/tool/BindingTarget.java
index 5c3fac5e..9a05d8d2 100644
--- a/compiler/src/main/java/android/databinding/tool/BindingTarget.java
+++ b/compiler/src/main/java/android/databinding/tool/BindingTarget.java
@@ -114,6 +114,12 @@ public class BindingTarget implements LocationScopeProvider {
mModel = model;
}
+ public void resolveListeners() {
+ for (Binding binding : mBindings) {
+ binding.resolveListeners();
+ }
+ }
+
/**
* Called after BindingTarget is finalized.
* <p>
diff --git a/compiler/src/main/java/android/databinding/tool/LayoutBinder.java b/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
index fc31affc..1871577b 100644
--- a/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
+++ b/compiler/src/main/java/android/databinding/tool/LayoutBinder.java
@@ -203,6 +203,7 @@ public class LayoutBinder implements FileScopeProvider {
parse(bindingBundle.getExpr(), bindingBundle.getValueLocation()));
}
bindingTarget.resolveMultiSetters();
+ bindingTarget.resolveListeners();
} finally {
Scope.exit();
}
diff --git a/compiler/src/main/java/android/databinding/tool/MergedBinding.java b/compiler/src/main/java/android/databinding/tool/MergedBinding.java
index 195e8280..53278752 100644
--- a/compiler/src/main/java/android/databinding/tool/MergedBinding.java
+++ b/compiler/src/main/java/android/databinding/tool/MergedBinding.java
@@ -19,6 +19,7 @@ package android.databinding.tool;
import android.databinding.tool.expr.ArgListExpr;
import android.databinding.tool.expr.Expr;
import android.databinding.tool.expr.ExprModel;
+import android.databinding.tool.reflection.ModelClass;
import android.databinding.tool.store.SetterStore;
import android.databinding.tool.util.L;
import android.databinding.tool.writer.WriterPackage;
@@ -40,6 +41,17 @@ public class MergedBinding extends Binding {
mMultiAttributeSetter = multiAttributeSetter;
}
+ @Override
+ public void resolveListeners() {
+ ModelClass[] parameters = mMultiAttributeSetter.getParameterTypes();
+ List<Expr> children = getExpr().getChildren();
+ final Expr expr = getExpr();
+ for (int i = 0; i < children.size(); i++) {
+ final Expr child = children.get(i);
+ child.resolveListeners(parameters[i], expr);
+ }
+ }
+
private static Expr createArgListExpr(ExprModel model, final Iterable<Binding> bindings) {
List<Expr> args = new ArrayList<>();
for (Binding binding : bindings) {