private void checkForMutableFields(Protoclass protoclass, TypeElement element) {
    Elements elementUtils = protoclass.environment().processing().getElementUtils();

    for (VariableElement field : ElementFilter.fieldsIn(
        elementUtils.getAllMembers(CachingElements.getDelegate(element)))) {
      if (!field.getModifiers().contains(Modifier.FINAL)) {
        Reporter report = protoclass.report();
        boolean ownField = CachingElements.equals(element, field.getEnclosingElement());
        if (ownField) {
          report.withElement(field)
              .warning(About.INCOMPAT,
                  "Avoid introduction of fields (except constants) in abstract value types");
        } else {
          report.warning(About.INCOMPAT,
              "Abstract value type inherits mutable fields");
        }
      }
    }
  }
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