From 905978a458ea12a82e635702c9f1edc2aa59838c Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 7 Sep 2020 20:29:46 +0300 Subject: [PATCH] JVM_IR: remove descriptor usage from JvmCachedDeclarations --- .../jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt | 8 ++++++-- .../kotlin/builtins/CompanionObjectMappingUtils.kt | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt index c6979ef4953..49da18d87ad 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt @@ -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.ir.copyCorrespondingPropertyFrom 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.LanguageVersionSettings 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.expressions.IrExpressionBody 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.JvmAbi import org.jetbrains.kotlin.name.Name @@ -62,7 +63,7 @@ class JvmCachedDeclarations( fun getFieldForObjectInstance(singleton: IrClass): IrField = singletonFieldDeclarations.getOrPut(singleton) { val originalVisibility = singleton.visibility - val isNotMappedCompanion = singleton.isCompanion && !isMappedIntrinsicCompanionObject(singleton.descriptor) + val isNotMappedCompanion = singleton.isCompanion && !singleton.isMappedIntrinsicCompanionObject() val useProperVisibilityForCompanion = languageVersionSettings.supportsFeature(LanguageFeature.ProperVisibilityForCompanionObjectInstanceField) && singleton.isCompanion @@ -84,6 +85,9 @@ class JvmCachedDeclarations( } } + private fun IrClass.isMappedIntrinsicCompanionObject() = + isCompanion && classId?.let { CompanionObjectMapping.isMappedIntrinsicCompanionObjectClassId(it) } == true + fun getPrivateFieldForObjectInstance(singleton: IrClass): IrField = if (singleton.isCompanion && singleton.parentAsClass.isJvmInterface) interfaceCompanionFieldDeclarations.getOrPut(singleton) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt index a444a565978..df45e7a4153 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/CompanionObjectMappingUtils.kt @@ -6,8 +6,12 @@ package org.jetbrains.kotlin.builtins import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.descriptorUtil.classId fun CompanionObjectMapping.isMappedIntrinsicCompanionObject(classDescriptor: ClassDescriptor): Boolean = DescriptorUtils.isCompanionObject(classDescriptor) && classDescriptor.classId?.outerClassId in classIds + +fun CompanionObjectMapping.isMappedIntrinsicCompanionObjectClassId(classId: ClassId): Boolean = + classId.outerClassId in classIds \ No newline at end of file