JVM_IR: remove descriptor usage from JvmCachedDeclarations
This commit is contained in:
+6
-2
@@ -13,6 +13,8 @@ import org.jetbrains.kotlin.backend.jvm.codegen.MethodSignatureMapper
|
|||||||
import org.jetbrains.kotlin.backend.jvm.codegen.isJvmInterface
|
import org.jetbrains.kotlin.backend.jvm.codegen.isJvmInterface
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.copyCorrespondingPropertyFrom
|
import org.jetbrains.kotlin.backend.jvm.ir.copyCorrespondingPropertyFrom
|
||||||
import org.jetbrains.kotlin.backend.jvm.ir.replaceThisByStaticReference
|
import org.jetbrains.kotlin.backend.jvm.ir.replaceThisByStaticReference
|
||||||
|
import org.jetbrains.kotlin.builtins.CompanionObjectMapping
|
||||||
|
import org.jetbrains.kotlin.builtins.isMappedIntrinsicCompanionObjectClassId
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||||
@@ -25,7 +27,6 @@ import org.jetbrains.kotlin.ir.builders.setSourceRange
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil.isMappedIntrinsicCompanionObject
|
|
||||||
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
import org.jetbrains.kotlin.load.java.JavaDescriptorVisibilities
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -62,7 +63,7 @@ class JvmCachedDeclarations(
|
|||||||
fun getFieldForObjectInstance(singleton: IrClass): IrField =
|
fun getFieldForObjectInstance(singleton: IrClass): IrField =
|
||||||
singletonFieldDeclarations.getOrPut(singleton) {
|
singletonFieldDeclarations.getOrPut(singleton) {
|
||||||
val originalVisibility = singleton.visibility
|
val originalVisibility = singleton.visibility
|
||||||
val isNotMappedCompanion = singleton.isCompanion && !isMappedIntrinsicCompanionObject(singleton.descriptor)
|
val isNotMappedCompanion = singleton.isCompanion && !singleton.isMappedIntrinsicCompanionObject()
|
||||||
val useProperVisibilityForCompanion =
|
val useProperVisibilityForCompanion =
|
||||||
languageVersionSettings.supportsFeature(LanguageFeature.ProperVisibilityForCompanionObjectInstanceField)
|
languageVersionSettings.supportsFeature(LanguageFeature.ProperVisibilityForCompanionObjectInstanceField)
|
||||||
&& singleton.isCompanion
|
&& singleton.isCompanion
|
||||||
@@ -84,6 +85,9 @@ class JvmCachedDeclarations(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun IrClass.isMappedIntrinsicCompanionObject() =
|
||||||
|
isCompanion && classId?.let { CompanionObjectMapping.isMappedIntrinsicCompanionObjectClassId(it) } == true
|
||||||
|
|
||||||
fun getPrivateFieldForObjectInstance(singleton: IrClass): IrField =
|
fun getPrivateFieldForObjectInstance(singleton: IrClass): IrField =
|
||||||
if (singleton.isCompanion && singleton.parentAsClass.isJvmInterface)
|
if (singleton.isCompanion && singleton.parentAsClass.isJvmInterface)
|
||||||
interfaceCompanionFieldDeclarations.getOrPut(singleton) {
|
interfaceCompanionFieldDeclarations.getOrPut(singleton) {
|
||||||
|
|||||||
@@ -6,8 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.builtins
|
package org.jetbrains.kotlin.builtins
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||||
|
|
||||||
fun CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor: ClassDescriptor): Boolean =
|
fun CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor: ClassDescriptor): Boolean =
|
||||||
DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.classId?.outerClassId in classIds
|
DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.classId?.outerClassId in classIds
|
||||||
|
|
||||||
|
fun CompanionObjectMapping.isMappedIntrinsicCompanionObjectClassId(classId: ClassId): Boolean =
|
||||||
|
classId.outerClassId in classIds
|
||||||
Reference in New Issue
Block a user