code: public static Map<ExecutableElement, AnnotationValue> getElementValuesWithDefaults(AnnotationMirror annotMirror) {
          Map<ExecutableElement, AnnotationValue> valMap = Optional
                  .ofNullable((Map<ExecutableElement, AnnotationValue>)annotMirror.getElementValues())
                  .map(x -> new HashMap<>(x))
                  .orElse(new HashMap<>());
  
          ElementFilter.methodsIn(annotMirror.getAnnotationType().asElement().getEnclosedElements())
                  .stream()
                  .map(annot -> Tuple2.of(annot, annot.getDefaultValue()))
                  .filter(tuple2 -> tuple2._2() != null && !valMap.containsKey(tuple2._1()))
                  .forEach(tuple2 -> valMap.put(tuple2._1(), tuple2._2()));
  
          return valMap;
      }
docs: Returns the values of an annotation's attributes, including defaults.
  The method with the same name in JavacElements cannot be used directly,
  because it includes a cast to Attribute.Compound, which doesn't hold
  for annotations generated by the Checker Framework.
  
  @param annotMirror annotation to examine
  @return the values of the annotation's elements, including defaults
  @see AnnotationMirror#getElementValues()
  @see JavacElements#getElementValuesWithDefaults(AnnotationMirror)