Fix problem with inverted unary expression.
Bug 33963737
The inverted unary expression was incorrected constructed, making
it ineffective.
Test: gradlew runTestsOfTestApp
Change-Id: Ie280ebfca41480b8c09f6aa93003210ec3c9b5ca
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 503b86f..875e239 100644
--- a/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
+++ b/compiler/src/main/java/android/databinding/tool/expr/UnaryExpr.java
@@ -41,7 +41,7 @@
@Override
public Expr generateInverse(ExprModel model, Expr value, String bindingClassName) {
- return model.unary(mOp, getExpr().generateInverse(model, value, bindingClassName));
+ return getExpr().generateInverse(model, model.unary(mOp, value), bindingClassName);
}
@Override
diff --git a/integration-tests/TestApp/app/src/androidTestApi9/java/android/databinding/testapp/TwoWayBindingAdapterTest.java b/integration-tests/TestApp/app/src/androidTestApi9/java/android/databinding/testapp/TwoWayBindingAdapterTest.java
index 58ac53d..6ecd017 100644
--- a/integration-tests/TestApp/app/src/androidTestApi9/java/android/databinding/testapp/TwoWayBindingAdapterTest.java
+++ b/integration-tests/TestApp/app/src/androidTestApi9/java/android/databinding/testapp/TwoWayBindingAdapterTest.java
@@ -1111,6 +1111,34 @@
assertTrue(mBinder.mixView2.isEnabled());
}
+ /**
+ * This tests whether the unary not properly converts back
+ */
+ public void testUnaryNot() throws Throwable {
+ mBindingObject.checked.set(false);
+ makeVisible(mBinder.unaryNot);
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mBinder.executePendingBindings();
+ }
+ });
+ assertTrue(mBinder.unaryNot.isChecked());
+ runTestOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ mBinder.unaryNot.setChecked(false);
+ }
+ });
+ waitWhile(new TestCondition() {
+ @Override
+ public boolean testValue() {
+ return !mBindingObject.checked.get();
+ }
+ });
+ assertTrue(mBindingObject.checked.get());
+ }
+
private void makeVisible(final View... views) throws Throwable {
runTestOnUiThread(new Runnable() {
@Override
@@ -1154,6 +1182,7 @@
mBinder.sameTarget.setVisibility(View.GONE);
mBinder.mixView1.setVisibility(View.GONE);
mBinder.mixView2.setVisibility(View.GONE);
+ mBinder.unaryNot.setVisibility(View.GONE);
for (View view : views) {
view.setVisibility(View.VISIBLE);
}
diff --git a/integration-tests/TestApp/app/src/main/res/layout/two_way.xml b/integration-tests/TestApp/app/src/main/res/layout/two_way.xml
index bf9ede7..3158f79 100644
--- a/integration-tests/TestApp/app/src/main/res/layout/two_way.xml
+++ b/integration-tests/TestApp/app/src/main/res/layout/two_way.xml
@@ -282,5 +282,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{obj.validate(mixView1.text)}"/>
+ <CheckBox
+ android:id="@+id/unaryNot"
+ android:checked="@={!obj.checked}"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"/>
</LinearLayout>
</layout>
diff --git a/integration-tests/TestApp/gradle/wrapper/gradle-wrapper.properties b/integration-tests/TestApp/gradle/wrapper/gradle-wrapper.properties
index 1081cc3..8c647a3 100644
--- a/integration-tests/TestApp/gradle/wrapper/gradle-wrapper.properties
+++ b/integration-tests/TestApp/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Apr 10 15:27:10 PDT 2013
+#Wed Jan 11 14:07:01 PST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip