K2: repeat K1 representation for flexible type parameters

This commit changes the behavior of KT-59138 effectively declining it in 2.0.
However, we plan to implement KT-59138 behavior under a feature
flag in 2.0 (see KT-66447), and switch this feature on version 2.x.

Also, this commit implements the LC resolution about postponing
KT-57014 change. We don't have KT-57014 described behavior in 2.0 anymore.
However, we plan to implement a deprecation warning here, see KT-65578.

After this commit, 6 diagnostic tests become incorrectly broken:
- 5 tests from PurelyImplementedCollection group
- a test platformTypes/nullableTypeArgument.kt

This commit also breaks currently fixed-in-k2 KT-50134
(it is fixed again in the following commits),
as well as KT-58933 (it will remain not fixed till we enable KT-59138
behavior again).

#KT-65596 In Progress
#KT-57014 In Progress
#KT-58933 Submitted
This commit is contained in:
Denis.Zharkov
2024-02-06 15:33:03 +01:00
committed by Space Team
parent 7fd46f1450
commit 81414d758d
160 changed files with 343 additions and 479 deletions
@@ -1,6 +1,6 @@
public abstract interface DeeplySubstitutedClassParameter : R|kotlin/Any| {
public abstract interface Middle<E : R|kotlin/Any!|> : R|test/DeeplySubstitutedClassParameter.Super<ft<E & Any, E?>>| {
public abstract fun foo(p: R|ft<E & Any, E?>|): R|kotlin/Unit|
public abstract interface Middle<E : R|kotlin/Any!|> : R|test/DeeplySubstitutedClassParameter.Super<E!>| {
public abstract fun foo(p: R|E!|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/DeeplySubstitutedClassParameter.Middle<kotlin/String!>| {
@@ -8,7 +8,7 @@ public abstract interface DeeplySubstitutedClassParameter : R|kotlin/Any| {
}
public abstract interface Super<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(p: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(p: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
@@ -1,12 +1,12 @@
public abstract interface DeeplySubstitutedClassParameter2 : R|kotlin/Any| {
public abstract interface Middle<E : R|kotlin/Any!|> : R|test/DeeplySubstitutedClassParameter2.Super<ft<E & Any, E?>>| {
public abstract interface Middle<E : R|kotlin/Any!|> : R|test/DeeplySubstitutedClassParameter2.Super<E!>| {
}
public abstract interface Sub : R|test/DeeplySubstitutedClassParameter2.Middle<kotlin/String!>| {
public abstract fun foo(p: R|kotlin/String!|): R|kotlin/Unit|
}
public abstract interface Super<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(p: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(p: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
@@ -10,7 +10,7 @@ public abstract interface Kt3302 : R|kotlin/Any| {
}
public abstract interface LinkedHashMap<K : R|kotlin/Any!|, V : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun put(key: R|ft<K & Any, K?>|, value: R|ft<V & Any, V?>|): R|ft<V & Any, V?>|
public abstract fun put(key: R|K!|, value: R|V!|): R|V!|
public abstract fun dummy(): R|kotlin/Unit|
@@ -1,10 +1,10 @@
public abstract interface OverrideWithErasedParameter : R|kotlin/Any| {
public abstract interface Sub<T : R|kotlin/Any!|> : R|test/OverrideWithErasedParameter.Super<ft<T & Any, T?>>| {
public abstract interface Sub<T : R|kotlin/Any!|> : R|test/OverrideWithErasedParameter.Super<T!>| {
public abstract fun foo(o: R|kotlin/Any!|): R|kotlin/Unit|
}
public abstract interface Super<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(t: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(t: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
@@ -1,6 +1,6 @@
public abstract interface SubclassFromGenericAndNot : R|kotlin/Any| {
public abstract interface Generic<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(key: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(key: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
@@ -4,7 +4,7 @@ public abstract interface SubstitutedClassParameter : R|kotlin/Any| {
}
public abstract interface Super<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(p: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(p: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
@@ -4,13 +4,13 @@ public abstract interface SubstitutedClassParameters : R|kotlin/Any| {
}
public abstract interface Super1<T : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(p: R|ft<T & Any, T?>|): R|kotlin/Unit|
public abstract fun foo(p: R|T!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|
}
public abstract interface Super2<E : R|kotlin/Any!|> : R|kotlin/Any| {
public abstract fun foo(p: R|ft<E & Any, E?>|): R|kotlin/Unit|
public abstract fun foo(p: R|E!|): R|kotlin/Unit|
public abstract fun dummy(): R|kotlin/Unit|