FIR: add temporary access to Enum.getDeclaringClass (see KT-49653)

This commit is contained in:
Mikhail Glukhikh
2022-01-25 18:10:09 +03:00
committed by TeamCityServer
parent c2ab09fa84
commit 983fa4c8c7
24 changed files with 201 additions and 9 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
import org.jetbrains.kotlin.load.kotlin.SignatureBuildingComponents.inJavaLang
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.Name
@@ -162,8 +163,7 @@ class JvmMappedScope(
}
// NOTE: No-arg constructors
@OptIn(ExperimentalStdlibApi::class)
private val additionalHiddenConstructors = buildSet<String> {
private val additionalHiddenConstructors = buildSet {
// kotlin.text.String pseudo-constructors should be used instead of java.lang.String constructors
listOf(
"",
@@ -185,13 +185,19 @@ class JvmMappedScope(
"Ljava/lang/Throwable;",
"Ljava/lang/String;"
).mapTo(this) { arguments -> "java/lang/Throwable.<init>($arguments)V" }
// TODO: remove after the end of getDeclaringClass/declaringClass deprecation period
add("java/lang/Enum.<init>(Ljava/lang/String;I)V")
}
// TODO: remove after the end of getDeclaringClass/declaringClass deprecation period
private val additionalVisibleSignatures = inJavaLang("Enum", "getDeclaringClass()Ljava/lang/Class;")
fun prepareSignatures(klass: FirRegularClass, isMutable: Boolean): Signatures {
val signaturePrefix = klass.symbol.classId.toString()
val visibleMethodsByName = mutableMapOf<Name, MutableSet<String>>()
JvmBuiltInsSignatures.VISIBLE_METHOD_SIGNATURES.filter { signature ->
(JvmBuiltInsSignatures.VISIBLE_METHOD_SIGNATURES + additionalVisibleSignatures).filter { signature ->
signature in JvmBuiltInsSignatures.MUTABLE_METHOD_SIGNATURES == isMutable &&
signature.startsWith(signaturePrefix)
}.map { signature ->