code: @Value.Lazy
    public NameForms typeImmutable() {
      String simple, relative;
  
      if (protoclass().kind().isNested()) {
        String enclosingSimpleName = typeImmutableEnclosingSimpleName();
        simple = names().typeImmutableNested();
        relative = inPackage(enclosingSimpleName, simple);
      } else if (hasImmutableInBuilder()) {
        simple = names().typeImmutable;
        relative = inPackage(typeBuilderSimpleName(), simple);
      } else {
        simple = names().typeImmutable;
        relative = inPackage(simple);
      }
  
      return ImmutableConstitution.NameForms.builder()
          .simple(simple)
          .relativeRaw(relative)
          .genericArgs(generics().args())
          .packageOf(implementationPackage())
          .visibility(implementationVisibility())
          .build();
    }
docs: Actual immutable value type generated implementation.
  @return immutable implementation type name forms