summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2018-01-10 17:07:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-01-10 17:07:05 +0000
commit19825166e6d38ce2b729affe67c946b998f542d4 (patch)
tree987ec457c31c8a82b81b0723ee2d26ddda58dc2d /compiler/src/main/java/android/databinding
parentc56acaa6c114d8a4a463b97f6b02b6a1d508f152 (diff)
parent7cc79d3b3119b32ded177d93ea86bef8d8065020 (diff)
downloaddata-binding-19825166e6d38ce2b729affe67c946b998f542d4.tar.gz
Merge "Default to unwrapping ObservableFields for Object method params" into studio-master-dev
Diffstat (limited to 'compiler/src/main/java/android/databinding')
-rw-r--r--compiler/src/main/java/android/databinding/tool/expr/Expr.java8
-rw-r--r--compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java7
2 files changed, 11 insertions, 4 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/expr/Expr.java b/compiler/src/main/java/android/databinding/tool/expr/Expr.java
index 4a3dd324..d1798443 100644
--- a/compiler/src/main/java/android/databinding/tool/expr/Expr.java
+++ b/compiler/src/main/java/android/databinding/tool/expr/Expr.java
@@ -897,8 +897,7 @@ abstract public class Expr implements VersionProvider, LocationScopeProvider {
Expr expr = child;
String simpleGetterName;
while ((simpleGetterName = expr.getResolvedType().getObservableGetterName()) != null
- && (type == null || (!type.isAssignableFrom(expr.getResolvedType())
- && !ModelMethod.isImplicitConversion(expr.getResolvedType(), type)))) {
+ && shouldUnwrap(type, expr.getResolvedType())) {
unwrapped = mModel.methodCall(expr, simpleGetterName, Collections.EMPTY_LIST);
if (unwrapped == this) {
L.w(ErrorMessages.OBSERVABLE_FIELD_GET, this);
@@ -914,6 +913,11 @@ abstract public class Expr implements VersionProvider, LocationScopeProvider {
}
}
+ private static boolean shouldUnwrap(ModelClass from, ModelClass to) {
+ return (to == null || to.isObject() || !to.isAssignableFrom(from))
+ && !ModelMethod.isImplicitConversion(from, to);
+ }
+
/**
* Called after experiment model is sealed to avoid NPE problems caused by boxed primitives.
*/
diff --git a/compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java b/compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java
index b83ad214..f8c57a0f 100644
--- a/compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java
+++ b/compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java
@@ -212,7 +212,10 @@ public abstract class ModelMethod {
}
public static boolean isImplicitConversion(ModelClass from, ModelClass to) {
- if (from != null && to != null && from.isPrimitive() && to.isPrimitive()) {
+ if (from == null || to == null) {
+ return false;
+ }
+ if (from.isPrimitive() && to.isPrimitive()) {
if (from.isBoolean() || to.isBoolean() || to.isChar()) {
return false;
}
@@ -222,7 +225,7 @@ public abstract class ModelMethod {
} else {
ModelClass unboxedFrom = from.unbox();
ModelClass unboxedTo = to.unbox();
- if (unboxedFrom != from || unboxedTo != to) {
+ if (!from.equals(unboxedFrom) || !to.equals(unboxedTo)) {
return isImplicitConversion(unboxedFrom, unboxedTo);
}
}