src/main/java/xdean/annotation/processor/toolkit/XAbstractProcessor.java
@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);
  }
@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);
  }
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.