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
+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