code: @SuppressWarnings("unchecked")
      public static Set<Field> getFieldsAnnotatedWith(Object object, Class<? extends Annotation> annotation,
                                                      Class<? extends Annotation>... additionalAnnotations) {
          Class<? extends Annotation>[] annotations = null;
          if (additionalAnnotations == null || additionalAnnotations.length == 0) {
              annotations = (Class<? extends Annotation>[]) new Class<?>[]{annotation};
          } else {
              annotations = (Class<? extends Annotation>[]) new Class<?>[additionalAnnotations.length + 1];
              annotations[0] = annotation;
              System.arraycopy(additionalAnnotations, 0, annotations, 1, additionalAnnotations.length);
          }
          return getFieldsAnnotatedWith(object, annotations);
      }
docs: Get all fields annotated with a particular annotation. This method
  traverses the class hierarchy when checking for the annotation.
  
  @param object                The object to look for annotations. Note that if're you're
  passing an object only instance fields are checked, passing a
  class will only check static fields.
  @param annotation            The annotation type to look for.
  @param additionalAnnotations Optionally more annotations to look for. If any of the
  annotations are associated with a particular field it will be
  added to the resulting {@code Set}.
  @return A set of all fields containing the particular annotation.