Make scope of incremental package fragment empty

It's only needed to create IncrementalMultifileClassPackageFragment instances
now
This commit is contained in:
Alexander Udalov
2016-10-03 17:35:10 +03:00
parent adf2c5a5ac
commit c1f55e8018
@@ -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,