private void validateConstructorParameters(Set<ValueAttribute> parameters) {
    if (kind().isValue() && !parameters.isEmpty()) {
      Set<Element> definingElements = Sets.newHashSet();
      for (ValueAttribute attribute : parameters) {
        definingElements.add(attribute.element.getEnclosingElement());
      }
      if (definingElements.size() != 1) {
        report().warning(About.SUBTYPE,
            "Constructor parameters should be better defined on the same level of inheritance hierarchy, "
                + " otherwise generated constructor API would be unstable: "
                + " parameter list can change the order of arguments."
                + " It is better redeclare (override) each inherited"
                + " attribute parameter in this abstract value type to avoid this warning."
                + " Or better have constructor parameters defined by only single supertype.");
      }
    }
  }
Means object hashcode is cached at some point. Either lazily (on first access)
or eagerly (during construction).
@see #isUseLazyhash()
@see #isUsePrehashed()
value-processor/src/org/immutables/value/processor/meta/ValueType.java