private static void scanAndReportInvalidInheritance(
      Protoclass protoclass,
      Element element,
      Iterable<TypeElement> supertypes) {
    for (TypeElement s : supertypes) {
      if (!CachingElements.equals(element, s) && ImmutableMirror.isPresent(s)) {
        protoclass.report()
            .warning(About.SUBTYPE,
                "Should not inherit %s which is a value type itself."
                    + " Avoid extending from another abstract value type."
                    + " Better to share common abstract class or interface which"
                    + " are not carrying @%s annotation. If still extending from immutable"
                    + " abstract type be ready to face some incoherences in generated types.",
                s,
                ImmutableMirror.simpleName());
      }
    }
  }
It may grow later in some better abstraction, but as it stands now, currently it is
just a glue between new "protoclass" model and old discovery routines.
value-processor/src/org/immutables/value/processor/meta/ValueTypeComposer.java