Added deprecated PackageFragmentProvider#getPackageFragments for BWC

Relates to ^KT-33394
^KT-42259 Fixed
This commit is contained in:
Vladimir Dolzhenko
2020-09-29 19:14:44 +00:00
parent a228206cf5
commit 3c380faeb5
21 changed files with 97 additions and 48 deletions
@@ -42,24 +42,28 @@ import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.keysToMap
class IncrementalPackageFragmentProvider(
sourceFiles: Collection<KtFile>,
val moduleDescriptor: ModuleDescriptor,
val storageManager: StorageManager,
val deserializationComponents: DeserializationComponents,
val incrementalCache: IncrementalCache,
val target: TargetId,
private val kotlinClassFinder: KotlinClassFinder
sourceFiles: Collection<KtFile>,
val moduleDescriptor: ModuleDescriptor,
val storageManager: StorageManager,
val deserializationComponents: DeserializationComponents,
val incrementalCache: IncrementalCache,
val target: TargetId,
private val kotlinClassFinder: KotlinClassFinder
) : PackageFragmentProvider {
private val fqNameToPackageFragment =
PackagePartClassUtils.getFilesWithCallables(sourceFiles)
.mapTo(hashSetOf()) { it.packageFqName }
.keysToMap(this::IncrementalPackageFragment)
PackagePartClassUtils.getFilesWithCallables(sourceFiles)
.mapTo(hashSetOf()) { it.packageFqName }
.keysToMap(this::IncrementalPackageFragment)
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> = emptySet()
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
packageFragments.addIfNotNull(fqNameToPackageFragment[fqName])
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> {
return listOfNotNull(fqNameToPackageFragment[fqName])
}
inner class IncrementalPackageFragment(fqName: FqName) : PackageFragmentDescriptorImpl(moduleDescriptor, fqName) {
val target: TargetId
get() = this@IncrementalPackageFragmentProvider.target
@@ -74,34 +78,34 @@ class IncrementalPackageFragmentProvider(
}
inner class IncrementalMultifileClassPackageFragment(
val facadeName: JvmClassName,
val partsInternalNames: Collection<String>,
packageFqName: FqName
val facadeName: JvmClassName,
val partsInternalNames: Collection<String>,
packageFqName: FqName
) : PackageFragmentDescriptorImpl(moduleDescriptor, packageFqName) {
private val memberScope = storageManager.createLazyValue {
ChainedMemberScope.create(
"Member scope for incremental compilation: union of multifile class parts data for $facadeName",
partsInternalNames.mapNotNull { internalName ->
incrementalCache.getPackagePartData(internalName)?.let { (data, strings) ->
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(data, strings)
"Member scope for incremental compilation: union of multifile class parts data for $facadeName",
partsInternalNames.mapNotNull { internalName ->
incrementalCache.getPackagePartData(internalName)?.let { (data, strings) ->
val (nameResolver, packageProto) = JvmProtoBufUtil.readPackageDataFrom(data, strings)
val partName = JvmClassName.byInternalName(internalName)
val jvmBinaryClass =
kotlinClassFinder.findKotlinClass(ClassId.topLevel(partName.fqNameForTopLevelClassMaybeWithDollars))
val partName = JvmClassName.byInternalName(internalName)
val jvmBinaryClass =
kotlinClassFinder.findKotlinClass(ClassId.topLevel(partName.fqNameForTopLevelClassMaybeWithDollars))
val metadataVersion =
jvmBinaryClass?.classHeader?.metadataVersion
val metadataVersion =
jvmBinaryClass?.classHeader?.metadataVersion
?: JvmMetadataVersion.INSTANCE
DeserializedPackageMemberScope(
this, packageProto, nameResolver, metadataVersion,
JvmPackagePartSource(
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
),
deserializationComponents, classNames = { emptyList() }
)
}
DeserializedPackageMemberScope(
this, packageProto, nameResolver, metadataVersion,
JvmPackagePartSource(
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
),
deserializationComponents, classNames = { emptyList() }
)
}
}
)
}
@@ -83,6 +83,9 @@ class OptionalAnnotationPackageFragmentProvider(
override fun collectPackageFragments(fqName: FqName, packageFragments: MutableCollection<PackageFragmentDescriptor>) =
packageFragments.addIfNotNull(packages[fqName])
override fun getPackageFragments(fqName: FqName): List<PackageFragmentDescriptor> =
packages[fqName]?.let(::listOf).orEmpty()
override fun getSubPackagesOf(fqName: FqName, nameFilter: (Name) -> Boolean): Collection<FqName> =
emptyList()
}