summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2016-02-18 14:33:37 -0800
committerGeorge Mount <mount@google.com>2016-03-08 15:38:00 -0800
commitbb4a033fcd5cd20e5be46ef8ead442dc7db2454d (patch)
treea6eebe0a848983d8dad5662f674959e7e76b2c80 /compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
parentb7eeedbfadec03792551014e9dfa2bd384fc21a3 (diff)
downloaddata-binding-bb4a033fcd5cd20e5be46ef8ead442dc7db2454d.tar.gz
Have two-way binding use localized variables to prevent NPE.
Bug 26962999 Two-way binding was using the inverted expressions directly without localizing variables. That meant that if there was a variable set to null during evaluation, it may get a NullPointerException even though it checked for null on the value previously. This CL localizes the variables so that cannot happen. Change-Id: Ia55955ce0f1cb750e6a678e72e0cda03f0e3c9b6
Diffstat (limited to 'compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java')
-rw-r--r--compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java20
1 files changed, 15 insertions, 5 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java b/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
index 881a352c..18e5985f 100644
--- a/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
+++ b/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
@@ -36,17 +36,22 @@ public class UnaryExpr extends Expr {
@Override
protected String computeUniqueKey() {
- return addTwoWay(join(getOpStr(), getExpr().getUniqueKey()));
+ return join(getOpStr(), getExpr().getUniqueKey());
}
@Override
- public KCode toInverseCode(KCode value) {
- return getExpr().toInverseCode(new KCode().app(mOp, value));
+ public Expr generateInverse(ExprModel model, Expr value, String bindingClassName) {
+ return model.unary(mOp, getExpr().generateInverse(model, value, bindingClassName));
}
@Override
- protected KCode generateCode(boolean expand) {
- return new KCode().app(getOp(), getExpr().toCode(expand));
+ public Expr cloneToModel(ExprModel model) {
+ return model.unary(mOp, getExpr().cloneToModel(model));
+ }
+
+ @Override
+ protected KCode generateCode() {
+ return new KCode().app(getOp(), getExpr().toCode());
}
@Override
@@ -76,4 +81,9 @@ public class UnaryExpr extends Expr {
public Expr getExpr() {
return getChildren().get(0);
}
+
+ @Override
+ public String toString() {
+ return mOp + getExpr();
+ }
}