From 99562fbbb40c72722468e5dc8c84b3e28494a20f Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 14 Oct 2014 14:48:52 -0700 Subject: [PATCH] Check type resolution on declared methods and fields in ViewDebug BUG: 17375269 Change-Id: I8a74dfab1a1cf11b4240afb011d2729beea307c5 --- core/java/android/view/ViewDebug.java | 35 +++++++++++++++++++++------ 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/core/java/android/view/ViewDebug.java b/core/java/android/view/ViewDebug.java index 12a49d518fc11..531a99d1cf368 100644 --- a/core/java/android/view/ViewDebug.java +++ b/core/java/android/view/ViewDebug.java @@ -1005,12 +1005,21 @@ public class ViewDebug { return fields; } - final ArrayList foundFields = new ArrayList(); - fields = klass.getDeclaredFields(); + final ArrayList declaredFields = new ArrayList(); + klass.getDeclaredFields(false, declaredFields); - int count = fields.length; + final ArrayList foundFields = new ArrayList(); + final int count = declaredFields.size(); for (int i = 0; i < count; i++) { - final Field field = fields[i]; + final Field field = declaredFields.get(i); + + // Ensure the field type can be resolved. + try { + field.getType(); + } catch (NoClassDefFoundError e) { + continue; + } + if (field.isAnnotationPresent(ExportedProperty.class)) { field.setAccessible(true); foundFields.add(field); @@ -1039,12 +1048,22 @@ public class ViewDebug { return methods; } - final ArrayList foundMethods = new ArrayList(); - methods = klass.getDeclaredMethods(); + final ArrayList declaredMethods = new ArrayList(); + klass.getDeclaredMethods(false, declaredMethods); - int count = methods.length; + final ArrayList foundMethods = new ArrayList(); + final int count = declaredMethods.size(); for (int i = 0; i < count; i++) { - final Method method = methods[i]; + final Method method = declaredMethods.get(i); + + // Ensure the method return and parameter types can be resolved. + try { + method.getReturnType(); + method.getParameterTypes(); + } catch (NoClassDefFoundError e) { + continue; + } + if (method.getParameterTypes().length == 0 && method.isAnnotationPresent(ExportedProperty.class) && method.getReturnType() != Void.class) {