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,9 +1,6 @@
// WITH_STDLIB
// FULL_JDK
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57269 K2: collection stub for `sort` is not generated for custom List subclasses
import java.util.*
class ListSet<out E : Any> : List<E>, Set<E> {
@@ -1,8 +1,5 @@
// FULL_JDK
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57269 K2: collection stub for `sort` is not generated for custom List subclasses
class DStringIterator(d: Iterator<String>) : Iterator<String> by d
class DStringListIterator(d: ListIterator<String>) : ListIterator<String> by d
@@ -1,9 +1,6 @@
// FULL_JDK
// See also: https://youtrack.jetbrains.com/issue/KT-42330
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57269 K2: collection stub for `sort` is not generated for custom List subclasses
class DIntIterator(d: Iterator<Int>) : Iterator<Int> by d
class DIntListIterator(d: ListIterator<Int>) : ListIterator<Int> by d
@@ -1,8 +1,5 @@
// FULL_JDK
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57269 K2: collection stub for `sort` is not generated for custom List subclasses
class DGenericIterator<T>(d: Iterator<T>) : Iterator<T> by d
class DGenericListIterator<T>(d: ListIterator<T>) : ListIterator<T> by d
@@ -1,9 +1,6 @@
// FULL_JDK
// See: KT-42114, KT-42115
// IGNORE_BACKEND_K2: JVM_IR
// FIR status: KT-57269 K2: collection stub for `sort` is not generated for custom List subclasses
abstract class AbstractIterator : Iterator<String>
abstract class AbstractIterable : Iterable<String>