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
|
||||
// WITH_STDLIB
|
||||
// RENDER_DIAGNOSTICS_FULL_TEXT
|
||||
|
||||
class A<T> : ArrayList<T>() {
|
||||
override fun addFirst(t: T) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// ISSUE: KT-58371
|
||||
// WITH_STDLIB
|
||||
// RENDER_DIAGNOSTICS_FULL_TEXT
|
||||
|
||||
class A<T> : ArrayList<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> =
|
||||
signatures {
|
||||
|
||||
+26
-1
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.builtins.jvm
|
||||
|
||||
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.HIDDEN_CONSTRUCTOR_SIGNATURES
|
||||
import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures.HIDDEN_METHOD_SIGNATURES
|
||||
@@ -74,6 +75,16 @@ class JvmBuiltInsCustomizer(
|
||||
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 {
|
||||
val mockJavaIoPackageFragment = object : PackageFragmentDescriptorImpl(moduleDescriptor, FqName("java.io")) {
|
||||
override fun getMemberScope() = MemberScope.Empty
|
||||
@@ -142,6 +153,16 @@ class JvmBuiltInsCustomizer(
|
||||
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 -> {
|
||||
setAdditionalAnnotations(notConsideredDeprecation)
|
||||
}
|
||||
@@ -248,6 +269,7 @@ class JvmBuiltInsCustomizer(
|
||||
when (signature) {
|
||||
in HIDDEN_METHOD_SIGNATURES -> result = JDKMemberStatus.HIDDEN
|
||||
in VISIBLE_METHOD_SIGNATURES -> result = JDKMemberStatus.VISIBLE
|
||||
in DEPRECATED_LIST_METHODS -> result = JDKMemberStatus.DEPRECATED_LIST_METHODS
|
||||
in DROP_LIST_METHOD_SIGNATURES -> result = JDKMemberStatus.DROP
|
||||
}
|
||||
|
||||
@@ -259,7 +281,7 @@ class JvmBuiltInsCustomizer(
|
||||
}
|
||||
|
||||
private enum class JDKMemberStatus {
|
||||
HIDDEN, VISIBLE, NOT_CONSIDERED, DROP
|
||||
HIDDEN, VISIBLE, DEPRECATED_LIST_METHODS, NOT_CONSIDERED, DROP
|
||||
}
|
||||
|
||||
private fun ClassDescriptor.getJavaAnalogue(): LazyJavaClassDescriptor? {
|
||||
@@ -348,3 +370,6 @@ private class FallbackBuiltIns private constructor() : KotlinBuiltIns(LockBasedS
|
||||
|
||||
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