@Value.Lazy
	public AppliedNameForms factoryOf() {
		if (isFactory()) {
			if (protoclass().kind().isRecord()) {
				TypeElement recordType = (TypeElement) protoclass().sourceElement();

				return ImmutableConstitution.NameForms.builder()
						.simple(recordType.getSimpleName().toString())
						.relativeRaw(recordType.getQualifiedName().toString())
						.genericArgs(generics().args())
						.relativeAlreadyQualified(true)
						.packageOf(NA_ERROR)
						.visibility(protoclass().visibility())
						.build()
						.applied("new");
			}

			TypeElement enclosingType = (TypeElement) protoclass().sourceElement().getEnclosingElement();

			String invoke = protoclass().kind().isConstructor()
					? "new"
					: protoclass().sourceElement().getSimpleName().toString();

			return ImmutableConstitution.NameForms.builder()
					.simple(enclosingType.getSimpleName().toString())
					.relativeRaw(enclosingType.getQualifiedName().toString())
					.genericArgs(generics().args())
					.relativeAlreadyQualified(true)
					.packageOf(NA_ERROR)
					.visibility(protoclass().visibility())
					.build()
					.applied(invoke);
		}

		return applyFactoryNaming(names().namings.of);
	}
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