value-processor/src/org/immutables/value/processor/meta/Constitution.java
@Value.Lazy
  public NameForms typeValue() {
    if (protoclass().kind().isValue()) {
      return returnsAbstractValueType()
          ? typeAbstract()
          : typeImmutable();
    }
    if (isFactory()) {

      if (protoclass().kind().isConstructor()) {
        TypeElement enclosingType = (TypeElement) protoclass().sourceElement().getEnclosingElement();

        return ImmutableConstitution.NameForms.builder()
            .simple(enclosingType.getSimpleName().toString())
            .relativeRaw(enclosingType.getQualifiedName().toString())
            .genericArgs(generics().args())
            .relativeAlreadyQualified(true)
            .packageOf(NA_ERROR)
            .visibility(protoclass().visibility())
            .build();
      }

      ExecutableElement method = (ExecutableElement) protoclass().sourceElement();
      String type = method.getReturnType().toString();

      return ImmutableConstitution.NameForms.builder()
          .simple(NA_ERROR)
          .relativeRaw(type)
          .packageOf(NA_ERROR)
          .relativeAlreadyQualified(true)
          .visibility(protoclass().visibility())
          .build();
    }
    return typeEnclosing();
  }
@Value.Lazy
  public NameForms typeValue() {
    if (protoclass().kind().isValue()) {
      return returnsAbstractValueType()
          ? typeAbstract()
          : typeImmutable();
    }
    if (isFactory()) {

      if (protoclass().kind().isConstructor()) {
        TypeElement enclosingType = (TypeElement) protoclass().sourceElement().getEnclosingElement();

        return ImmutableConstitution.NameForms.builder()
            .simple(enclosingType.getSimpleName().toString())
            .relativeRaw(enclosingType.getQualifiedName().toString())
            .genericArgs(generics().args())
            .relativeAlreadyQualified(true)
            .packageOf(NA_ERROR)
            .visibility(protoclass().visibility())
            .build();
      }

      ExecutableElement method = (ExecutableElement) protoclass().sourceElement();
      String type = method.getReturnType().toString();

      return ImmutableConstitution.NameForms.builder()
          .simple(NA_ERROR)
          .relativeRaw(type)
          .packageOf(NA_ERROR)
          .relativeAlreadyQualified(true)
          .visibility(protoclass().visibility())
          .build();
    }
    return typeEnclosing();
  }
Value is the canonical outside look of the value type. It should be either
{@link #typeAbstract()} or {@link #typeImmutable()}.
For factory it is a special surrogate.
@return canonical value type name forms