code: protected LightweightTypeReference normalizeElementType(LightweightTypeReference collectionElementType, LightweightTypeReference expectedCollectionType, ITypeReferenceOwner owner) {
  		if (isIterableExpectation(expectedCollectionType)) {
  			LightweightTypeReference expectedElementType = getElementOrComponentType(expectedCollectionType, owner);
  			return doNormalizeElementType(collectionElementType, expectedElementType);
  		}
  		return normalizeFunctionTypeReference(collectionElementType);
  	}
docs: The expected collection type may drive the type of the elements in the collection if the type is used as an
  invariant type. In other word, an expectation of the form
  {@code Collection<CharSequence>} may yield a type {@code List<CharSequence>} for the literal
  {@code ['a']} even though it would be {@code List<? extends String>} if no expectation was given.