public Set<String> getNonAttributeAbstractMethodSignatures() {
    if (element.getKind().isClass() || element.getKind().isInterface()) {
      Set<String> signatures = new LinkedHashSet<>();

      List<? extends Element> members = constitution.protoclass()
          .environment()
          .processing()
          .getElementUtils()
          .getAllMembers(CachingElements.getDelegate((TypeElement) element));

      for (ExecutableElement m : ElementFilter.methodsIn(members)) {
        if (!m.getParameters().isEmpty()
            || m.getSimpleName().contentEquals(AccessorAttributesCollector.HASH_CODE_METHOD)
            || m.getSimpleName().contentEquals(AccessorAttributesCollector.TO_STRING_METHOD)) {

          if (m.getModifiers().contains(Modifier.ABSTRACT)) {
            TypeMirror returnType = m.getReturnType();
            if (!ProcessingEnvironments.isEclipseImplementation(constitution.protoclass().processing())) {
              returnType = AccessorAttributesCollector.asInheritedMemberReturnType(
                  constitution.protoclass().processing(),
                  CachingElements.getDelegate((TypeElement) element),
                  m);
            }
            signatures.add(toSignature(m, returnType));
          }
        }
      }

      return signatures;
    }
    return Collections.emptySet();
  }
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