/** * Gets all entries from the specified class or its super-classes that have * been annotated with annotation provided. * * @param cls Class in which search for methods. * @param dep Deployment. * @param annCls Annotation. * @return Set of entries with given annotations. */ private List<GridResourceField> getFieldsWithAnnotation(@Nullable GridDeployment dep, Class<?> cls, Class<? extends Annotation> annCls) { List<GridResourceField> fields = getFieldsFromCache(cls, annCls); if (fields == null) { fields = new ArrayList<>(); for (Class cls0 = cls; !cls0.equals(Object.class); cls0 = cls0.getSuperclass()) { for (Field field : cls0.getDeclaredFields()) { Annotation ann = field.getAnnotation(annCls); if (ann != null || GridResourceUtils.mayRequireResources(field)) // Account for anonymous inner classes. fields.add(new GridResourceField(field, ann)); } } cacheFields(dep, cls, annCls, fields); } return fields; }