@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 . 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
Value is the canonical outside look of the value type . It should be either {