/** * Returns all fields from all {@link Bindable} types in the hierarchy of the provided * <code>clazz</code>. The collected fields gets cached. */ static Collection<Field> getFieldsFromBindableHierarchy(Class<?> clazz) { return getFieldsFromHierarchy(clazz, Bindable.class); }
/** * Returns all fields from all {@link Bindable} types in the hierarchy of the provided * <code>clazz</code>. The collected fields get cached. */ static Collection<Field> getFieldsFromHierarchy(Class<?> clazz, Class<? extends Annotation> marker) { synchronized (FIELD_CACHE) { final Pair<Class<? extends Annotation>, Class<?>> key = new Pair<Class<? extends Annotation>, Class<?>>(marker, clazz); Collection<Field> fields = FIELD_CACHE.get(key); if (fields == null) { fields = new LinkedHashSet<Field>(); if (clazz.getAnnotation(marker) != null) { fields.addAll(Arrays.asList(clazz.getDeclaredFields())); } final Class<?> superClass = clazz.getSuperclass(); if (superClass != null) { fields.addAll(getFieldsFromHierarchy(superClass, marker)); } FIELD_CACHE.put(key, fields); } return fields; } }
final Collection<Field> fieldSet = BindableUtils.getFieldsFromHierarchy( object.getClass(), markerAnnotation);