K2: Refine how JDK members are mapped to built-in classes
Previously, the semantic was more-or-less correct for most of the cases but some corner one, like `sort` in MutableList didn't work properly. Namely, `sort` should be marked there in a way to forbid to call it everywhere beside super-calls. Also, overriding it should be allowed. Mostly, the logic was re-written to K2 model from K1-related JvmBuiltInsCustomizer. ^KT-57694 In progress ^KT-57269 Fixed
This commit is contained in:
committed by
Space Team
parent
161fe1d2ca
commit
2e5b783cc6
+1
-1
@@ -204,7 +204,7 @@ object JavaToKotlinClassMap {
|
||||
fun isMutable(fqNameUnsafe: FqNameUnsafe?): Boolean = mutableToReadOnly.containsKey(fqNameUnsafe)
|
||||
fun isReadOnly(fqNameUnsafe: FqNameUnsafe?): Boolean = readOnlyToMutable.containsKey(fqNameUnsafe)
|
||||
|
||||
fun isMutable(classId: ClassId?): Boolean = readOnlyToMutableClassId.containsKey(classId)
|
||||
fun isMutable(classId: ClassId?): Boolean = mutableToReadOnlyClassId.containsKey(classId)
|
||||
fun isReadOnly(classId: ClassId?): Boolean = readOnlyToMutableClassId.containsKey(classId)
|
||||
|
||||
private fun classId(clazz: Class<*>): ClassId {
|
||||
|
||||
+5
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.load.java
|
||||
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -30,6 +31,10 @@ object BuiltinSpecialProperties {
|
||||
it.value.distinct()
|
||||
}
|
||||
|
||||
val GETTER_FQ_NAMES: Set<FqName> = PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.mapTo(mutableSetOf()) {
|
||||
JavaToKotlinClassMap.mapKotlinToJava(it.key.parent().toUnsafe())!!.asSingleFqName().child(it.value)
|
||||
}
|
||||
|
||||
val SPECIAL_FQ_NAMES: Set<FqName> = PROPERTY_FQ_NAME_TO_JVM_GETTER_NAME_MAP.keys
|
||||
val SPECIAL_SHORT_NAMES: Set<Name> = SPECIAL_FQ_NAMES.map(FqName::shortName).toSet()
|
||||
|
||||
|
||||
+11
-2
@@ -41,12 +41,15 @@ open class SpecialGenericSignatures {
|
||||
SpecialSignatureInfo.OBJECT_PARAMETER_NON_GENERIC
|
||||
}
|
||||
|
||||
data class NameAndSignature internal constructor(val name: Name, val signature: String)
|
||||
data class NameAndSignature(val classInternalName: String, val name: Name, val parameters: String, val returnType: String) {
|
||||
val signature = SignatureBuildingComponents.signature(classInternalName, "$name($parameters)$returnType")
|
||||
}
|
||||
|
||||
private fun String.method(name: String, parameters: String, returnType: String) =
|
||||
NameAndSignature(
|
||||
this@method,
|
||||
Name.identifier(name),
|
||||
SignatureBuildingComponents.signature(this@method, "$name($parameters)$returnType")
|
||||
parameters, returnType,
|
||||
)
|
||||
|
||||
private val ERASED_COLLECTION_PARAMETER_NAME_AND_SIGNATURES = setOf(
|
||||
@@ -125,6 +128,12 @@ open class SpecialGenericSignatures {
|
||||
val SIGNATURE_TO_JVM_REPRESENTATION_NAME: Map<String, Name> =
|
||||
NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.mapKeys { it.key.signature }
|
||||
|
||||
// java/lang/Number.intValue()I, java/lang/ etc.
|
||||
val JVM_SIGNATURES_FOR_RENAMED_BUILT_INS: Set<String> =
|
||||
NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.mapTo(mutableSetOf()) { (signatureAndName, jdkName) ->
|
||||
signatureAndName.copy(name = jdkName).signature
|
||||
}
|
||||
|
||||
val ORIGINAL_SHORT_NAMES: List<Name> = NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.keys.map { it.name }
|
||||
|
||||
val JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP: Map<Name, Name> =
|
||||
|
||||
Reference in New Issue
Block a user