code: protected PreferredType findPreferredType(EObject owner, EReference reference, String text) {
  		JvmIdentifiableElement referencedThing = getReferencedElement(owner, reference);
  		JvmDeclaredType referencedType = null;
  		if (referencedThing instanceof JvmDeclaredType) {
  			referencedType = (JvmDeclaredType) referencedThing;
  		} else if (referencedThing instanceof JvmMember) {
  			referencedType = ((JvmMember) referencedThing).getDeclaringType();
  		} else if(referencedThing instanceof JvmType) {
  			if (referencedThing.eIsProxy()) {
  				String importedName = getFirstNameSegment(owner, reference);
  				return new PreferredType(importedName);
  			}
  			return null;
  		}
  		return findPreferredType(referencedType, text);
  	}
docs: Tries to locate the syntax for the type reference that the user used in the original code.
  Especially interesting for nested types, where one could prefer the (arguably) more explicit (or verbose)
  {@code Resource$Factory} with an import of {@code org.eclipse.emf.core.Resource} over the probably shorter
  {@code Factory} with an import of {@code org.eclipse.emf.core.Resource$Factory}.
  
  The function relies on a node model to be available. Otherwise the actually referenced type is
  used as the preferred type.
  
  @param owner the referrer to the JVM concept.
  @param reference a reference to a {@link JvmType} or {@link JvmMember} that is declared in a type.
  @return the referenced type or one of its containers.