@Value.Lazy
	public NameForms typeAbstract() {
		if (protoclass().kind().isConstructor() || protoclass().kind().isRecord()) {
			return typeValue();
		}

		List<String> classSegments = Lists.newArrayListWithExpectedSize(2);
		Element e = SourceNames.collectClassSegments(protoclass().sourceElement(), classSegments);
		verify(e instanceof PackageElement);

		String packageOf = ((PackageElement) e).getQualifiedName().toString();
		String relative = DOT_JOINER.join(classSegments);
		boolean relativeAlreadyQualified = false;

		if (!implementationPackage().equals(packageOf)) {
			relative = DOT_JOINER.join(packageOf, relative);
			relativeAlreadyQualified = true;
		}

		return ImmutableConstitution.NameForms.builder()
				.simple(names().typeAbstract)
				.relativeRaw(relative)
				.packageOf(packageOf)
				.genericArgs(generics().args())
				.relativeAlreadyQualified(relativeAlreadyQualified)
				.visibility(protoclass().visibility())
				.build();
	}
Actual abstract value type that is definitive model for the value type.
@return abstract value type name forms
value-processor/src/org/immutables/value/processor/meta/Constitution.java