diff options
author | George Mount <mount@google.com> | 2016-02-18 14:33:37 -0800 |
---|---|---|
committer | George Mount <mount@google.com> | 2016-03-08 15:38:00 -0800 |
commit | bb4a033fcd5cd20e5be46ef8ead442dc7db2454d (patch) | |
tree | a6eebe0a848983d8dad5662f674959e7e76b2c80 /compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java | |
parent | b7eeedbfadec03792551014e9dfa2bd384fc21a3 (diff) | |
download | data-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.java | 20 |
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(); + } } |