code: @Override
    public Set<String> getSupportedAnnotationTypes() {
      Set<String> set = new HashSet<>();
      // Analyze @SupportedAnnotationTypes
      SupportedAnnotationTypes sat = this.getClass().getAnnotation(SupportedAnnotationTypes.class);
      if (sat != null) {
        Arrays.stream(sat.value()).forEach(set::add);
      }
      // Analyze @SupportedAnnotation
      SupportedAnnotation sa = this.getClass().getAnnotation(SupportedAnnotation.class);
      if (sa != null) {
        Arrays.stream(sa.value()).map(Class::getCanonicalName).forEach(set::add);
      }
      if (set.isEmpty() && isInitialized()) {
        debug().log("No SupportedAnnotationTypes annotation found on " + this.getClass().getName()
            + ", returning an empty set.");
      }
      return Collections.unmodifiableSet(set);
    }
docs: If the processor class is annotated with {@link SupportedAnnotation} or
  {@link SupportedAnnotationTypes}, return an unmodifiable set with the same
  set of strings as the annotation. If the class is not so annotated, an
  empty set is returned.