[LazyIR] Exclude INVISIBLE_FAKE callable members from class declarations
Fixes KT-55509
This commit is contained in:
committed by
Space Team
parent
4c925d0588
commit
4428971401
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.lazy
|
package org.jetbrains.kotlin.ir.declarations.lazy
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.isPrivate
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
@@ -73,10 +74,10 @@ class IrLazyClass(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldBuildStub(descriptor: DeclarationDescriptor): Boolean =
|
private fun shouldBuildStub(descriptor: DeclarationDescriptor): Boolean =
|
||||||
descriptor !is DeclarationDescriptorWithVisibility ||
|
descriptor !is DeclarationDescriptorWithVisibility
|
||||||
!DescriptorVisibilities.isPrivate(descriptor.visibility) ||
|
|| (!isPrivate(descriptor.visibility) && descriptor.visibility != DescriptorVisibilities.INVISIBLE_FAKE)
|
||||||
// This exception is needed for K/N caches usage.
|
// This exception is needed for K/N caches usage.
|
||||||
isObject && descriptor is ClassConstructorDescriptor
|
|| isObject && descriptor is ClassConstructorDescriptor
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> by lazyVar(stubGenerator.lock) {
|
override var typeParameters: List<IrTypeParameter> by lazyVar(stubGenerator.lock) {
|
||||||
descriptor.declaredTypeParameters.mapTo(arrayListOf()) {
|
descriptor.declaredTypeParameters.mapTo(arrayListOf()) {
|
||||||
|
|||||||
+11
-2
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.common.serialization
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant
|
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities.INVISIBLE_FAKE
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.util.DescriptorByIdSignatureFinder
|
import org.jetbrains.kotlin.ir.util.DescriptorByIdSignatureFinder
|
||||||
@@ -43,14 +44,22 @@ class DescriptorByIdSignatureFinderImpl(
|
|||||||
MODULE_ONLY
|
MODULE_ONLY
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? =
|
override fun findDescriptorBySignature(signature: IdSignature): DeclarationDescriptor? {
|
||||||
when (signature) {
|
val descriptor = when (signature) {
|
||||||
is IdSignature.AccessorSignature -> resolveAccessorSignature(signature)
|
is IdSignature.AccessorSignature -> resolveAccessorSignature(signature)
|
||||||
is IdSignature.CommonSignature -> resolveCommonSignature(signature)
|
is IdSignature.CommonSignature -> resolveCommonSignature(signature)
|
||||||
is IdSignature.CompositeSignature -> resolveCompositeSignature(signature)
|
is IdSignature.CompositeSignature -> resolveCompositeSignature(signature)
|
||||||
else -> error("Unexpected signature kind: $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? {
|
private fun resolveCompositeSignature(signature: IdSignature.CompositeSignature): DeclarationDescriptor? {
|
||||||
val container = findDescriptorBySignature(signature.nearestPublicSig()) ?: return null
|
val container = findDescriptorBySignature(signature.nearestPublicSig()) ?: return null
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user