@Value.Lazy
	public NameForms typeImplementationBuilder() {
		TypeNames names = names();

		boolean outside = isOutsideBuilder();
		boolean nested = protoclass().kind().isNested()
				|| protoclass().kind() == Protoclass.Kind.DEFINED_NESTED_RECORD;

		String simple = typeBuilderSimpleName();
		String relative;

		if (outside && nested) {
			relative = inPackage(typeImmutableEnclosingSimpleName(), simple);
		} else if (outside) {
			relative = inPackage(simple);
		} else if (nested) {
			relative = inPackage(inPackage(typeImmutableEnclosingSimpleName(), names.typeImmutableNested(), simple));
		} else {
			relative = inPackage(inPackage(names.typeImmutable, simple));
		}

		Visibility visibility = builderVisibility();

		return ImmutableConstitution.NameForms.builder()
				.simple(simple)
				.relativeRaw(relative)
				.genericArgs(generics().args())
				.packageOf(implementationPackage())
				.visibility(visibility)
				.build();
	}
Walks to the enclosing type's simple names and applies naming convention.
This shortcut/fix shows deficiency of model (it's probably more complicated than needed).
@return enclosing immutable name
value-processor/src/org/immutables/value/processor/meta/Constitution.java