diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt index d2d6fe6f052..68d09109295 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/TopDownAnalyzerFacadeForJVM.kt @@ -50,6 +50,7 @@ import org.jetbrains.kotlin.load.java.lazy.ModuleClassResolver import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass import org.jetbrains.kotlin.load.kotlin.DeserializationComponentsForJava +import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackageFragmentProvider import org.jetbrains.kotlin.load.kotlin.incremental.IncrementalPackagePartProvider import org.jetbrains.kotlin.modules.TargetId @@ -212,7 +213,8 @@ object TopDownAnalyzerFacadeForJVM { targetIds?.mapTo(additionalProviders) { targetId -> IncrementalPackageFragmentProvider( files, module, storageManager, container.get().components, - incrementalComponents.getIncrementalCache(targetId), targetId + incrementalComponents.getIncrementalCache(targetId), targetId, + container.get() ) } } diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt index 7abaf4fdf40..c3fbe33af2e 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -21,9 +21,11 @@ import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource +import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache import org.jetbrains.kotlin.modules.TargetId +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.KtFile @@ -42,7 +44,8 @@ class IncrementalPackageFragmentProvider( val storageManager: StorageManager, val deserializationComponents: DeserializationComponents, val incrementalCache: IncrementalCache, - val target: TargetId + val target: TargetId, + private val kotlinClassFinder: KotlinClassFinder ) : PackageFragmentProvider { val fqNameToPackageFragment = PackagePartClassUtils.getFilesWithCallables(sourceFiles) @@ -79,11 +82,17 @@ class IncrementalPackageFragmentProvider( partsInternalNames.mapNotNull { internalName -> incrementalCache.getPackagePartData(internalName)?.let { (data, strings) -> val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(data, strings) + + val jvmBinaryClass = kotlinClassFinder.findKotlinClass( + ClassId.topLevel(FqName(internalName.replace('/', '.'))) + ) + DeserializedPackageMemberScope( this, packageProto, nameResolver, JvmPackagePartSource( JvmClassName.byInternalName(internalName), - JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName.asString()) + JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName.asString()), + knownJvmBinaryClass = jvmBinaryClass ), deserializationComponents, classNames = { emptyList() } ) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index b8d44542e15..6b49b19f8ae 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -242,7 +242,10 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader? = null, - override val isPreReleaseInvisible: Boolean = false + override val isPreReleaseInvisible: Boolean = false, + val knownJvmBinaryClass: KotlinJvmBinaryClass? = null ) : DeserializedContainerSource { constructor( kotlinClass: KotlinJvmBinaryClass, @@ -39,7 +40,8 @@ class JvmPackagePartSource( if (it.isNotEmpty()) JvmClassName.byInternalName(it) else null }, incompatibility, - isPreReleaseInvisible + isPreReleaseInvisible, + kotlinClass ) override val presentableString: String