diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt index 0f57692217d..c274b2496db 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/IrLazyClass.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.declarations.lazy import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.isPrivate import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.IrConstructorCall @@ -73,10 +74,10 @@ class IrLazyClass( } private fun shouldBuildStub(descriptor: DeclarationDescriptor): Boolean = - descriptor !is DeclarationDescriptorWithVisibility || - !DescriptorVisibilities.isPrivate(descriptor.visibility) || + descriptor !is DeclarationDescriptorWithVisibility + || (!isPrivate(descriptor.visibility) && descriptor.visibility != DescriptorVisibilities.INVISIBLE_FAKE) // This exception is needed for K/N caches usage. - isObject && descriptor is ClassConstructorDescriptor + || isObject && descriptor is ClassConstructorDescriptor override var typeParameters: List by lazyVar(stubGenerator.lock) { descriptor.declaredTypeParameters.mapTo(arrayListOf()) { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DescriptorByIdSignatureFinderImpl.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DescriptorByIdSignatureFinderImpl.kt index 06a5109b9fa..dbc7a075f2f 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DescriptorByIdSignatureFinderImpl.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/DescriptorByIdSignatureFinderImpl.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.common.serialization import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.INVISIBLE_FAKE import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.util.DescriptorByIdSignatureFinder @@ -43,14 +44,22 @@ class DescriptorByIdSignatureFinderImpl( MODULE_ONLY } - override fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? = - when (signature) { + override fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? { + val descriptor = when (signature) { is IdSignature.AccessorSignature -> resolveAccessorSignature(signature) is IdSignature.CommonSignature -> resolveCommonSignature(signature) is IdSignature.CompositeSignature -> resolveCompositeSignature(signature) else -> error("Unexpected signature kind: $signature") } + return when (descriptor) { + null -> null + is PropertyAccessorDescriptor -> descriptor.takeIf { it.visibility != INVISIBLE_FAKE && it.correspondingProperty.visibility != INVISIBLE_FAKE } + is DeclarationDescriptorWithVisibility -> descriptor.takeIf { it.visibility != INVISIBLE_FAKE } + else -> descriptor + } + } + private fun resolveCompositeSignature(signature: IdSignature.CompositeSignature): DeclarationDescriptor? { val container = findDescriptorBySignature(signature.nearestPublicSig()) ?: return null