@Value.Lazy
	public NameForms typeImmutable() {
		if (protoclass().kind().isConstructor() || protoclass().kind().isRecord()) {
			return typeValue();
		}
		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();
	}
Actual immutable value type generated implementation.
@return immutable implementation type name forms
value-processor/src/org/immutables/value/processor/meta/Constitution.java