public boolean isUseConstructor() {
    return !getConstructorArguments().isEmpty()
        || (getSettableAttributes().isEmpty()
        && !isUseBuilder()
        && !immutableFeatures.singleton()
        && !style().attributelessSingleton());  // don't use !isUseSingleton() to avoid unresolvable recursion
  }
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