docs: public static Map<String, Object> getAnnotation(Class<?> annotationType, Element element) {
      for (AnnotationMirror annotation : element.getAnnotationMirrors()) {
        if (!rawTypeToString(annotation.getAnnotationType(), '$')
            .equals(annotationType.getName())) {
          continue;
        }
  
        Map<String, Object> result = new LinkedHashMap<String, Object>();
        for (Method m : annotationType.getMethods()) {
          result.put(m.getName(), m.getDefaultValue());
        }
        for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> e
            : annotation.getElementValues().entrySet()) {
          String name = e.getKey().getSimpleName().toString();
          Object value = e.getValue().accept(VALUE_EXTRACTOR, null);
          Object defaultValue = result.get(name);
          if (!lenientIsInstance(defaultValue.getClass(), value)) {
            throw new IllegalStateException(String.format(
                "Value of %s.%s is a %s but expected a %s\n    value: %s",
                annotationType, name, value.getClass().getName(), defaultValue.getClass().getName(),
                value instanceof Object[] ? Arrays.toString((Object[]) value) : value));
          }
          result.put(name, value);
        }
        return result;
      }
      return null; // Annotation not found.
    }