diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-01-10 17:07:05 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-01-10 17:07:05 +0000 |
commit | 19825166e6d38ce2b729affe67c946b998f542d4 (patch) | |
tree | 987ec457c31c8a82b81b0723ee2d26ddda58dc2d /compiler/src/main/java/android/databinding | |
parent | c56acaa6c114d8a4a463b97f6b02b6a1d508f152 (diff) | |
parent | 7cc79d3b3119b32ded177d93ea86bef8d8065020 (diff) | |
download | data-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.java | 8 | ||||
-rw-r--r-- | compiler/src/main/java/android/databinding/tool/reflection/ModelMethod.java | 7 |
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); } } |