summaryrefslogtreecommitdiff
path: root/compiler/src/main/java/android/databinding/tool/reflection
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2017-05-03 14:29:02 -0700
committerGeorge Mount <mount@google.com>2017-05-04 07:38:17 -0700
commit2963075c4e43f05823eb5024ea6e6198f433e729 (patch)
tree94b3fe7753d11d0750297ad3c4fc786b4cdcf1f3 /compiler/src/main/java/android/databinding/tool/reflection
parentd3aa6e368c913fca9f8607cdd7f7992346d6bce0 (diff)
downloaddata-binding-2963075c4e43f05823eb5024ea6e6198f433e729.tar.gz
Fix generics use for field access.
Bug 37942402 Fields weren't taking the generic parameters into account when determining their type resulting in always resolving to Object types for generics. Test: ran TestApp tests Change-Id: I27f6f20a2372bc2f51b1d1ee63a30da59bb84ea4
Diffstat (limited to 'compiler/src/main/java/android/databinding/tool/reflection')
-rw-r--r--compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationClass.java2
-rw-r--r--compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationField.java18
2 files changed, 13 insertions, 7 deletions
diff --git a/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationClass.java b/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationClass.java
index a5f4d27f..a4f7eb9e 100644
--- a/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationClass.java
+++ b/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationClass.java
@@ -363,7 +363,7 @@ class AnnotationClass extends ModelClass {
List<VariableElement> fields = ElementFilter.fieldsIn(members);
declaredFields = new ModelField[fields.size()];
for (int i = 0; i < declaredFields.length; i++) {
- declaredFields[i] = new AnnotationField(typeElement, fields.get(i));
+ declaredFields[i] = new AnnotationField(declaredType, fields.get(i));
}
} else {
declaredFields = new ModelField[0];
diff --git a/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationField.java b/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationField.java
index be860570..25684b64 100644
--- a/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationField.java
+++ b/compiler/src/main/java/android/databinding/tool/reflection/annotation/AnnotationField.java
@@ -20,16 +20,18 @@ import android.databinding.tool.reflection.ModelClass;
import android.databinding.tool.reflection.ModelField;
import javax.lang.model.element.Modifier;
-import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeMirror;
+import javax.lang.model.util.Types;
class AnnotationField extends ModelField {
final VariableElement mField;
- final TypeElement mDeclaredClass;
+ final DeclaredType mDeclaredClass;
- public AnnotationField(TypeElement declaredClass, VariableElement field) {
+ public AnnotationField(DeclaredType declaredClass, VariableElement field) {
mDeclaredClass = declaredClass;
mField = field;
}
@@ -66,7 +68,9 @@ class AnnotationField extends ModelField {
@Override
public ModelClass getFieldType() {
- return new AnnotationClass(mField.asType());
+ Types typeUtils = AnnotationAnalyzer.get().getTypeUtils();
+ TypeMirror type = typeUtils.asMemberOf(mDeclaredClass, mField);
+ return new AnnotationClass(type);
}
@Override
@@ -78,8 +82,10 @@ class AnnotationField extends ModelField {
public boolean equals(Object obj) {
if (obj instanceof AnnotationField) {
AnnotationField that = (AnnotationField) obj;
- return mDeclaredClass.equals(that.mDeclaredClass) && AnnotationAnalyzer.get()
- .getTypeUtils().isSameType(mField.asType(), that.mField.asType());
+ Types typeUtils = AnnotationAnalyzer.get().getTypeUtils();
+ return typeUtils.isSameType(mDeclaredClass, that.mDeclaredClass)
+ && typeUtils.isSameType(mField.asType(), that.mField.asType())
+ && mField.getSimpleName().equals(that.mField.getSimpleName());
} else {
return false;
}