K1: Change how Kotlin sees some of the new JDK 21 collections members
- Make addFirst/Last and removeFirst/removeLast as members - Leave getFirst/getLast unprocessed, thus visible for K1, but marked as deprecated Though the implementations of getFirst/getLast and synthetic property access to them are expected to be deprecated as well, it's expected to be fixed in later commits. ^KT-60659 In Progress ^KT-60769 In Progress
This commit is contained in:
committed by
Space Team
parent
d99f8ac9b4
commit
1e86a82ee1
+6
@@ -24,6 +24,12 @@ public class FirLightTreeJdk21DiagnosticTestGenerated extends AbstractFirLightTr
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("implementationsForSequencedCollection.kt")
|
||||||
|
public void testImplementationsForSequencedCollection() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithJdk21/implementationsForSequencedCollection.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("newListMethods.kt")
|
@TestMetadata("newListMethods.kt")
|
||||||
public void testNewListMethods() throws Exception {
|
public void testNewListMethods() throws Exception {
|
||||||
|
|||||||
+6
@@ -24,6 +24,12 @@ public class FirPsiJdk21DiagnosticTestGenerated extends AbstractFirPsiJdk21Diagn
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("implementationsForSequencedCollection.kt")
|
||||||
|
public void testImplementationsForSequencedCollection() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithJdk21/implementationsForSequencedCollection.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("newListMethods.kt")
|
@TestMetadata("newListMethods.kt")
|
||||||
public void testNewListMethods() throws Exception {
|
public void testNewListMethods() throws Exception {
|
||||||
|
|||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
// WITH_STDLIB
|
||||||
|
|
||||||
|
fun foo(ll: java.util.LinkedList<String>, al: ArrayList<String>, ad: ArrayDeque<String>, jad: java.util.ArrayDeque<String>) {
|
||||||
|
ll.addFirst("")
|
||||||
|
ll.addLast("")
|
||||||
|
ll.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
ll.<!INVISIBLE_REFERENCE!>first<!> // synthetic property for getFirst()
|
||||||
|
ll.first() // stdlib extension on List
|
||||||
|
ll.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
ll.<!INVISIBLE_REFERENCE!>last<!>
|
||||||
|
ll.last()
|
||||||
|
ll.removeFirst()
|
||||||
|
ll.removeLast()
|
||||||
|
ll.reversed()
|
||||||
|
|
||||||
|
al.addFirst("")
|
||||||
|
al.addLast("")
|
||||||
|
al.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
al.<!FUNCTION_CALL_EXPECTED!>first<!>
|
||||||
|
al.first()
|
||||||
|
al.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
al.<!FUNCTION_CALL_EXPECTED!>last<!>
|
||||||
|
al.last()
|
||||||
|
al.removeFirst()
|
||||||
|
al.removeLast()
|
||||||
|
al.reversed()
|
||||||
|
|
||||||
|
ad.addFirst("")
|
||||||
|
ad.addLast("")
|
||||||
|
ad.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
ad.<!FUNCTION_CALL_EXPECTED!>first<!>
|
||||||
|
ad.first()
|
||||||
|
ad.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
ad.<!FUNCTION_CALL_EXPECTED!>last<!>
|
||||||
|
ad.last()
|
||||||
|
ad.removeFirst()
|
||||||
|
ad.removeLast()
|
||||||
|
ad.reversed()
|
||||||
|
|
||||||
|
jad.addFirst("")
|
||||||
|
jad.addLast("")
|
||||||
|
jad.getFirst()
|
||||||
|
jad.first
|
||||||
|
jad.first()
|
||||||
|
jad.getLast()
|
||||||
|
jad.last
|
||||||
|
jad.last()
|
||||||
|
jad.removeFirst()
|
||||||
|
jad.removeLast()
|
||||||
|
jad.reversed()
|
||||||
|
}
|
||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
// WITH_STDLIB
|
||||||
|
|
||||||
|
fun foo(ll: java.util.LinkedList<String>, al: ArrayList<String>, ad: ArrayDeque<String>, jad: java.util.ArrayDeque<String>) {
|
||||||
|
ll.addFirst("")
|
||||||
|
ll.addLast("")
|
||||||
|
ll.getFirst()
|
||||||
|
ll.first // synthetic property for getFirst()
|
||||||
|
ll.first() // stdlib extension on List
|
||||||
|
ll.getLast()
|
||||||
|
ll.last
|
||||||
|
ll.last()
|
||||||
|
ll.<!DEBUG_INFO_CALL("fqName: java.util.LinkedList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
ll.<!DEBUG_INFO_CALL("fqName: java.util.LinkedList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
ll.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
|
al.addFirst("")
|
||||||
|
al.addLast("")
|
||||||
|
al.getFirst()
|
||||||
|
al.first
|
||||||
|
al.first()
|
||||||
|
al.getLast()
|
||||||
|
al.last
|
||||||
|
al.last()
|
||||||
|
al.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
al.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
al.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
|
ad.addFirst("")
|
||||||
|
ad.addLast("")
|
||||||
|
ad.<!DEPRECATION!>getFirst<!>()
|
||||||
|
ad.<!DEPRECATION!>first<!>
|
||||||
|
ad.first()
|
||||||
|
ad.<!DEPRECATION!>getLast<!>()
|
||||||
|
ad.<!DEPRECATION!>last<!>
|
||||||
|
ad.last()
|
||||||
|
ad.<!DEBUG_INFO_CALL("fqName: kotlin.collections.ArrayDeque.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
ad.<!DEBUG_INFO_CALL("fqName: kotlin.collections.ArrayDeque.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
ad.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
|
jad.addFirst("")
|
||||||
|
jad.addLast("")
|
||||||
|
jad.getFirst()
|
||||||
|
jad.first
|
||||||
|
jad.first()
|
||||||
|
jad.getLast()
|
||||||
|
jad.last
|
||||||
|
jad.last()
|
||||||
|
jad.<!DEBUG_INFO_CALL("fqName: java.util.ArrayDeque.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
jad.<!DEBUG_INFO_CALL("fqName: java.util.ArrayDeque.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
jad.<!DEBUG_INFO_CALL("fqName: java.util.ArrayDeque.reversed; typeCall: function")!>reversed()<!>
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
// ISSUE: KT-58371
|
||||||
|
// WITH_STDLIB
|
||||||
|
|
||||||
|
class A<T> : ArrayList<T>() {
|
||||||
|
override fun addFirst(t: T) {
|
||||||
|
super.addFirst(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun addLast(t: T) {
|
||||||
|
super.addLast(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getFirst(): T = super.getFirst()
|
||||||
|
override fun getLast(): T = super.getLast()
|
||||||
|
|
||||||
|
override fun removeFirst(): T = super.removeFirst()
|
||||||
|
override fun removeLast(): T = super.removeLast()
|
||||||
|
|
||||||
|
override fun reversed(): List<T> = super.reversed()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun foo(x: MutableList<String>, y: ArrayList<String>, z: A<String>) {
|
||||||
|
x.addFirst("")
|
||||||
|
x.addLast("")
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
x.<!FUNCTION_CALL_EXPECTED!>first<!> // synthetic property for getFirst()
|
||||||
|
x.first() // stdlib extension on List
|
||||||
|
x.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
x.<!FUNCTION_CALL_EXPECTED!>last<!>
|
||||||
|
x.last()
|
||||||
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.MutableList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.MutableList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
|
y.addFirst("")
|
||||||
|
y.addLast("")
|
||||||
|
y.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
y.<!FUNCTION_CALL_EXPECTED!>first<!>
|
||||||
|
y.first()
|
||||||
|
y.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
y.<!FUNCTION_CALL_EXPECTED!>last<!>
|
||||||
|
y.last()
|
||||||
|
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
|
z.addFirst("")
|
||||||
|
z.addLast("")
|
||||||
|
z.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
||||||
|
z.<!FUNCTION_CALL_EXPECTED!>first<!>
|
||||||
|
z.first()
|
||||||
|
z.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
||||||
|
z.<!FUNCTION_CALL_EXPECTED!>last<!>
|
||||||
|
z.last()
|
||||||
|
z.<!DEBUG_INFO_CALL("fqName: A.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
z.<!DEBUG_INFO_CALL("fqName: A.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
|
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
}
|
||||||
+32
-21
@@ -1,4 +1,3 @@
|
|||||||
// FIR_IDENTICAL
|
|
||||||
// ISSUE: KT-58371
|
// ISSUE: KT-58371
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
|
||||||
@@ -11,8 +10,8 @@ class A<T> : ArrayList<T>() {
|
|||||||
super.addLast(t)
|
super.addLast(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getFirst(): T = super.getFirst()
|
override fun <!OVERRIDE_DEPRECATION!>getFirst<!>(): T = super.getFirst()
|
||||||
override fun getLast(): T = super.getLast()
|
override fun <!OVERRIDE_DEPRECATION!>getLast<!>(): T = super.getLast()
|
||||||
|
|
||||||
override fun removeFirst(): T = super.removeFirst()
|
override fun removeFirst(): T = super.removeFirst()
|
||||||
override fun removeLast(): T = super.removeLast()
|
override fun removeLast(): T = super.removeLast()
|
||||||
@@ -21,27 +20,39 @@ class A<T> : ArrayList<T>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun foo(x: MutableList<String>, y: ArrayList<String>, z: A<String>) {
|
fun foo(x: MutableList<String>, y: ArrayList<String>, z: A<String>) {
|
||||||
x.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
|
x.addFirst("")
|
||||||
x.<!UNRESOLVED_REFERENCE!>addLast<!>("")
|
x.addLast("")
|
||||||
x.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
x.<!DEPRECATION!>getFirst<!>()
|
||||||
x.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
x.<!DEPRECATION!>first<!> // synthetic property for getFirst()
|
||||||
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
|
x.first() // stdlib extension on List
|
||||||
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
|
x.<!DEPRECATION!>getLast<!>()
|
||||||
|
x.<!DEPRECATION!>last<!>
|
||||||
|
x.last()
|
||||||
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.MutableList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.MutableList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
x.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
y.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
|
y.addFirst("")
|
||||||
y.<!UNRESOLVED_REFERENCE!>addLast<!>("")
|
y.addLast("")
|
||||||
y.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
y.getFirst()
|
||||||
y.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
y.first
|
||||||
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
|
y.first()
|
||||||
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
|
y.getLast()
|
||||||
|
y.last
|
||||||
|
y.last()
|
||||||
|
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
y.<!DEBUG_INFO_CALL("fqName: java.util.ArrayList.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
y.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
|
|
||||||
z.<!UNRESOLVED_REFERENCE!>addFirst<!>("")
|
z.addFirst("")
|
||||||
z.<!UNRESOLVED_REFERENCE!>addLast<!>("")
|
z.addLast("")
|
||||||
z.<!UNRESOLVED_REFERENCE!>getFirst<!>()
|
z.getFirst()
|
||||||
z.<!UNRESOLVED_REFERENCE!>getLast<!>()
|
z.first
|
||||||
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeFirst; typeCall: extension function")!>removeFirst()<!>
|
z.first()
|
||||||
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.removeLast; typeCall: extension function")!>removeLast()<!>
|
z.getLast()
|
||||||
|
z.last
|
||||||
|
z.last()
|
||||||
|
z.<!DEBUG_INFO_CALL("fqName: A.removeFirst; typeCall: function")!>removeFirst()<!>
|
||||||
|
z.<!DEBUG_INFO_CALL("fqName: A.removeLast; typeCall: function")!>removeLast()<!>
|
||||||
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
z.<!DEBUG_INFO_CALL("fqName: kotlin.collections.reversed; typeCall: extension function")!>reversed()<!>
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -24,6 +24,12 @@ public class Jdk21DiagnosticTestGenerated extends AbstractJdk21DiagnosticTest {
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJdk21"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("implementationsForSequencedCollection.kt")
|
||||||
|
public void testImplementationsForSequencedCollection() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithJdk21/implementationsForSequencedCollection.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("newListMethods.kt")
|
@TestMetadata("newListMethods.kt")
|
||||||
public void testNewListMethods() throws Exception {
|
public void testNewListMethods() throws Exception {
|
||||||
|
|||||||
+6
-7
@@ -27,12 +27,6 @@ object JvmBuiltInsSignatures {
|
|||||||
"List",
|
"List",
|
||||||
"sort(Ljava/util/Comparator;)V",
|
"sort(Ljava/util/Comparator;)V",
|
||||||
// From JDK 21
|
// From JDK 21
|
||||||
"addFirst(Ljava/lang/Object;)V",
|
|
||||||
"addLast(Ljava/lang/Object;)V",
|
|
||||||
"getFirst()Ljava/lang/Object;",
|
|
||||||
"getLast()Ljava/lang/Object;",
|
|
||||||
"removeFirst()Ljava/lang/Object;",
|
|
||||||
"removeLast()Ljava/lang/Object;",
|
|
||||||
"reversed()Ljava/util/List;",
|
"reversed()Ljava/util/List;",
|
||||||
) +
|
) +
|
||||||
|
|
||||||
@@ -108,7 +102,12 @@ object JvmBuiltInsSignatures {
|
|||||||
|
|
||||||
inJavaUtil(
|
inJavaUtil(
|
||||||
"List",
|
"List",
|
||||||
"replaceAll(Ljava/util/function/UnaryOperator;)V"
|
"replaceAll(Ljava/util/function/UnaryOperator;)V",
|
||||||
|
// From JDK 21
|
||||||
|
"addFirst(Ljava/lang/Object;)V",
|
||||||
|
"addLast(Ljava/lang/Object;)V",
|
||||||
|
"removeFirst()Ljava/lang/Object;",
|
||||||
|
"removeLast()Ljava/lang/Object;",
|
||||||
) +
|
) +
|
||||||
|
|
||||||
inJavaUtil(
|
inJavaUtil(
|
||||||
|
|||||||
Reference in New Issue
Block a user