K2: Refine how JDK members are mapped to built-in classes

Previously, the semantic was more-or-less correct for most of the cases
but some corner one, like `sort` in MutableList didn't work properly.

Namely, `sort` should be marked there in a way to forbid to call it
everywhere beside super-calls.
Also, overriding it should be allowed.

Mostly, the logic was re-written to K2 model from K1-related
JvmBuiltInsCustomizer.

^KT-57694 In progress
^KT-57269 Fixed
This commit is contained in:
Denis.Zharkov
2023-04-13 11:50:54 +02:00
committed by Space Team
parent 161fe1d2ca
commit 2e5b783cc6
59 changed files with 1225 additions and 595 deletions
@@ -1,21 +0,0 @@
// FULL_JDK
abstract class A : MutableList<String> {
<!NOTHING_TO_OVERRIDE!>override<!> fun sort(/*0*/ p0: java.util.Comparator<in String>) {
super.<!UNRESOLVED_REFERENCE!>sort<!>(p0)
}
}
fun foo(x: MutableList<String>, y: java.util.ArrayList<String>, z: A, p: java.util.Comparator<in String>) {
x.<!DEPRECATION_ERROR!>sort<!>(p)
y.sort(p)
z.sort(p)
}
fun bar(x: MutableList<String>, y: java.util.ArrayList<String>, z: A) {
x.<!DEPRECATION_ERROR!>sort<!> { a, b -> a.length - b.length }
y.sort { a, b -> a.length - b.length }
z.<!DEPRECATION_ERROR!>sort<!> { a, b -> a.length - b.length }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FULL_JDK
abstract class A : MutableList<String> {