Make scope of incremental package fragment empty
It's only needed to create IncrementalMultifileClassPackageFragment instances now
This commit is contained in:
+1
-38
@@ -22,7 +22,6 @@ 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.ModuleMapping
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||
@@ -36,7 +35,6 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||
import org.jetbrains.kotlin.storage.NotNullLazyValue
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
||||
import java.util.*
|
||||
@@ -49,7 +47,6 @@ class IncrementalPackageFragmentProvider(
|
||||
val incrementalCache: IncrementalCache,
|
||||
val target: TargetId
|
||||
) : PackageFragmentProvider {
|
||||
val obsoletePackageParts = incrementalCache.getObsoletePackageParts().toSet()
|
||||
val fqNameToSubFqNames = MultiMap<FqName, FqName>()
|
||||
val fqNameToPackageFragment = HashMap<FqName, PackageFragmentDescriptor>()
|
||||
val fqNamesToLoad: Set<FqName> = PackagePartClassUtils.getFilesWithCallables(sourceFiles).map { it.packageFqName }.toSet()
|
||||
@@ -85,47 +82,13 @@ class IncrementalPackageFragmentProvider(
|
||||
val target: TargetId
|
||||
get() = this@IncrementalPackageFragmentProvider.target
|
||||
|
||||
val memberScope: NotNullLazyValue<MemberScope> = storageManager.createLazyValue {
|
||||
if (fqName !in fqNamesToLoad) {
|
||||
MemberScope.Empty
|
||||
}
|
||||
else {
|
||||
val moduleMapping = incrementalCache.getModuleMappingData()?.let { ModuleMapping.create(it, "<incremental>") }
|
||||
|
||||
val actualPackagePartFiles =
|
||||
moduleMapping?.findPackageParts(fqName.asString())?.let {
|
||||
val allParts =
|
||||
if (it.packageFqName.isEmpty()) {
|
||||
it.parts
|
||||
}
|
||||
else {
|
||||
val internalNamePrefix = it.packageFqName.replace('.', '/') + "/"
|
||||
it.parts.map { internalNamePrefix + it }
|
||||
}
|
||||
|
||||
allParts.filterNot { it in obsoletePackageParts }
|
||||
} ?: emptyList<String>()
|
||||
|
||||
val scopes = actualPackagePartFiles.mapNotNull { internalName ->
|
||||
incrementalCache.getPackagePartData(internalName)?.let { internalName to it }
|
||||
}.map { createPackageScope(it.first, it.second, null) }
|
||||
|
||||
if (scopes.isEmpty()) {
|
||||
MemberScope.Empty
|
||||
}
|
||||
else {
|
||||
ChainedMemberScope("Member scope for incremental compilation: union of package parts data", scopes)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getPackageFragmentForMultifileClass(multifileClassFqName: FqName): IncrementalMultifileClassPackageFragment? {
|
||||
val facadeInternalName = JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName).internalName
|
||||
val partsNames = incrementalCache.getStableMultifileFacadeParts(facadeInternalName) ?: return null
|
||||
return IncrementalMultifileClassPackageFragment(multifileClassFqName, partsNames)
|
||||
}
|
||||
|
||||
override fun getMemberScope(): MemberScope = memberScope()
|
||||
override fun getMemberScope(): MemberScope = MemberScope.Empty
|
||||
|
||||
inner class IncrementalMultifileClassPackageFragment(
|
||||
val multifileClassFqName: FqName,
|
||||
|
||||
Reference in New Issue
Block a user