code: @Nonnull
      public static Map<String, Map.Entry<? extends ExecutableElement, ? extends AnnotationValue>> keyAnnotationAttributesByName(
          @Nonnull Map<? extends ExecutableElement, ? extends AnnotationValue> attributes) {
          Map<String, Map.Entry<? extends ExecutableElement, ? extends AnnotationValue>> result = new LinkedHashMap<>();
          for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> e : attributes.entrySet()) {
              result.put(e.getKey().getSimpleName().toString(), e);
          }
  
          return result;
      }
docs: Extracts the names of the attributes from the executable elements that represents them in the given map and
  returns a map keyed by those names.
  <p>
  I.e. while representing annotation attributes on an annotation type by executable elements is technically
  correct
  it is more convenient to address them simply by their names, which, in case of annotation types, are unique
  (i.e. you cannot overload an annotation attribute, because they cannot have method parameters).
  
  @param attributes the attributes as obtained by
  {@link javax.lang.model.element.AnnotationMirror#getElementValues()}
  
  @return the equivalent of the supplied map keyed by attribute names instead of the full-blown executable elements