K1: Enhance deprecation messages for getFirst/getLast JDK 21 members
^KT-60659 Fixed ^KT-60769 Fixed
This commit is contained in:
committed by
Space Team
parent
0694ee50a3
commit
bd46bb02c1
@@ -0,0 +1,48 @@
|
|||||||
|
/newListMethods.kt:14:18: warning: this declaration overrides deprecated member but not marked as deprecated itself. Please add @Deprecated annotation or suppress. See https://youtrack.jetbrains.com/issue/KT-47902 for details
|
||||||
|
override fun getFirst(): T = super.getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:14:40: warning: 'getFirst(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
override fun getFirst(): T = super.getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:15:18: warning: this declaration overrides deprecated member but not marked as deprecated itself. Please add @Deprecated annotation or suppress. See https://youtrack.jetbrains.com/issue/KT-47902 for details
|
||||||
|
override fun getLast(): T = super.getLast()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:15:39: warning: 'getLast(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
override fun getLast(): T = super.getLast()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:26:7: warning: 'getFirst(): E!' is deprecated. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
x.getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:27:7: warning: 'getter for first: E!' is deprecated. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
x.first // synthetic property for getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:29:7: warning: 'getLast(): E!' is deprecated. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
x.getLast()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:30:7: warning: 'getter for last: E!' is deprecated. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
x.last
|
||||||
|
^
|
||||||
|
/newListMethods.kt:38:7: warning: 'getFirst(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
y.getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:39:7: warning: 'getFirst(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
y.first
|
||||||
|
^
|
||||||
|
/newListMethods.kt:41:7: warning: 'getLast(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
y.getLast()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:42:7: warning: 'getLast(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
y.last
|
||||||
|
^
|
||||||
|
/newListMethods.kt:50:7: warning: 'getFirst(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
z.getFirst()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:51:7: warning: 'getFirst(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getFirst()' member of List is redundant in Kotlin and might be removed soon. Please use 'first()' stdlib extension instead
|
||||||
|
z.first
|
||||||
|
^
|
||||||
|
/newListMethods.kt:53:7: warning: 'getLast(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
z.getLast()
|
||||||
|
^
|
||||||
|
/newListMethods.kt:54:7: warning: 'getLast(): E!' is deprecated. Overrides deprecated member in 'java.util.AbstractList'. 'getLast()' member of List is redundant in Kotlin and might be removed soon. Please use 'last()' stdlib extension instead
|
||||||
|
z.last
|
||||||
|
^
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/newListMethods.fir.kt:(611,619): error: Unresolved reference: getFirst
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(628,633): error: Function invocation 'first()' expected
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(719,726): error: Unresolved reference: getLast
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(735,739): error: Function invocation 'last()' expected
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(853,861): error: Unresolved reference: getFirst
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(870,875): error: Function invocation 'first()' expected
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(896,903): error: Unresolved reference: getLast
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(912,916): error: Function invocation 'last()' expected
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(1030,1038): error: Unresolved reference: getFirst
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(1047,1052): error: Function invocation 'first()' expected
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(1073,1080): error: Unresolved reference: getLast
|
||||||
|
|
||||||
|
/newListMethods.fir.kt:(1089,1093): error: Function invocation 'last()' expected
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
// ISSUE: KT-58371
|
// ISSUE: KT-58371
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
// RENDER_DIAGNOSTICS_FULL_TEXT
|
||||||
|
|
||||||
class A<T> : ArrayList<T>() {
|
class A<T> : ArrayList<T>() {
|
||||||
override fun addFirst(t: T) {
|
override fun addFirst(t: T) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
// ISSUE: KT-58371
|
// ISSUE: KT-58371
|
||||||
// WITH_STDLIB
|
// WITH_STDLIB
|
||||||
|
// RENDER_DIAGNOSTICS_FULL_TEXT
|
||||||
|
|
||||||
class A<T> : ArrayList<T>() {
|
class A<T> : ArrayList<T>() {
|
||||||
override fun addFirst(t: T) {
|
override fun addFirst(t: T) {
|
||||||
|
|||||||
+8
@@ -67,6 +67,14 @@ object JvmBuiltInsSignatures {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val DEPRECATED_LIST_METHODS: Set<String> =
|
||||||
|
signatures {
|
||||||
|
inJavaUtil(
|
||||||
|
"List",
|
||||||
|
"getFirst()Ljava/lang/Object;",
|
||||||
|
"getLast()Ljava/lang/Object;",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val VISIBLE_METHOD_SIGNATURES: Set<String> =
|
val VISIBLE_METHOD_SIGNATURES: Set<String> =
|
||||||
signatures {
|
signatures {
|
||||||
|
|||||||
+26
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.builtins.jvm
|
package org.jetbrains.kotlin.builtins.jvm
|
||||||
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.DEPRECATED_LIST_METHODS
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.DROP_LIST_METHOD_SIGNATURES
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.DROP_LIST_METHOD_SIGNATURES
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.HIDDEN_CONSTRUCTOR_SIGNATURES
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.HIDDEN_CONSTRUCTOR_SIGNATURES
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.HIDDEN_METHOD_SIGNATURES
|
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.HIDDEN_METHOD_SIGNATURES
|
||||||
@@ -74,6 +75,16 @@ class JvmBuiltInsCustomizer(
|
|||||||
Annotations.create(listOf(annotation))
|
Annotations.create(listOf(annotation))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val deprecationForSomeOfTheListMethods =
|
||||||
|
storageManager.createMemoizedFunction<Pair<String, String>, Annotations> { (methodName, extensionName) ->
|
||||||
|
val annotation = moduleDescriptor.builtIns.createDeprecatedAnnotation(
|
||||||
|
"'$methodName()' member of List is redundant in Kotlin and might be removed soon. Please use '$extensionName()' stdlib extension instead",
|
||||||
|
forcePropagationDeprecationToOverrides = true,
|
||||||
|
replaceWith = "$extensionName()"
|
||||||
|
)
|
||||||
|
Annotations.create(listOf(annotation))
|
||||||
|
}
|
||||||
|
|
||||||
private fun StorageManager.createMockJavaIoSerializableType(): KotlinType {
|
private fun StorageManager.createMockJavaIoSerializableType(): KotlinType {
|
||||||
val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) {
|
val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) {
|
||||||
override fun getMemberScope() = MemberScope.Empty
|
override fun getMemberScope() = MemberScope.Empty
|
||||||
@@ -142,6 +153,16 @@ class JvmBuiltInsCustomizer(
|
|||||||
setHiddenForResolutionEverywhereBesideSupercalls()
|
setHiddenForResolutionEverywhereBesideSupercalls()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JDKMemberStatus.DEPRECATED_LIST_METHODS -> {
|
||||||
|
setAdditionalAnnotations(
|
||||||
|
when (additionalMember.name) {
|
||||||
|
GET_FIRST_LIST_NAME -> deprecationForSomeOfTheListMethods(additionalMember.name.asString() to "first")
|
||||||
|
GET_LAST_LIST_NAME -> deprecationForSomeOfTheListMethods(additionalMember.name.asString() to "last")
|
||||||
|
else -> error("Unexpected name: ${additionalMember.name}")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
JDKMemberStatus.NOT_CONSIDERED -> {
|
JDKMemberStatus.NOT_CONSIDERED -> {
|
||||||
setAdditionalAnnotations(notConsideredDeprecation)
|
setAdditionalAnnotations(notConsideredDeprecation)
|
||||||
}
|
}
|
||||||
@@ -248,6 +269,7 @@ class JvmBuiltInsCustomizer(
|
|||||||
when (signature) {
|
when (signature) {
|
||||||
in HIDDEN_METHOD_SIGNATURES -> result = JDKMemberStatus.HIDDEN
|
in HIDDEN_METHOD_SIGNATURES -> result = JDKMemberStatus.HIDDEN
|
||||||
in VISIBLE_METHOD_SIGNATURES -> result = JDKMemberStatus.VISIBLE
|
in VISIBLE_METHOD_SIGNATURES -> result = JDKMemberStatus.VISIBLE
|
||||||
|
in DEPRECATED_LIST_METHODS -> result = JDKMemberStatus.DEPRECATED_LIST_METHODS
|
||||||
in DROP_LIST_METHOD_SIGNATURES -> result = JDKMemberStatus.DROP
|
in DROP_LIST_METHOD_SIGNATURES -> result = JDKMemberStatus.DROP
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +281,7 @@ class JvmBuiltInsCustomizer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private enum class JDKMemberStatus {
|
private enum class JDKMemberStatus {
|
||||||
HIDDEN, VISIBLE, NOT_CONSIDERED, DROP
|
HIDDEN, VISIBLE, DEPRECATED_LIST_METHODS, NOT_CONSIDERED, DROP
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ClassDescriptor.getJavaAnalogue(): LazyJavaClassDescriptor? {
|
private fun ClassDescriptor.getJavaAnalogue(): LazyJavaClassDescriptor? {
|
||||||
@@ -348,3 +370,6 @@ private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedS
|
|||||||
|
|
||||||
override fun getPlatformDependentDeclarationFilter() = PlatformDependentDeclarationFilter.All
|
override fun getPlatformDependentDeclarationFilter() = PlatformDependentDeclarationFilter.All
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val GET_FIRST_LIST_NAME = Name.identifier("getFirst")
|
||||||
|
private val GET_LAST_LIST_NAME = Name.identifier("getLast")
|
||||||
Reference in New Issue
Block a user