Extract MetadataPartProvider out of PackagePartProvider

This commit is contained in:
Alexander Udalov
2018-01-18 18:29:01 +01:00
parent e25bc2865f
commit 2cb4b7c6d4
10 changed files with 40 additions and 35 deletions
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.serialization.deserialization
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.NotFoundClasses
import org.jetbrains.kotlin.descriptors.PackagePartProvider
import org.jetbrains.kotlin.descriptors.SourceElement
import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter
@@ -41,7 +40,7 @@ class MetadataPackageFragmentProvider(
finder: KotlinMetadataFinder,
moduleDescriptor: ModuleDescriptor,
notFoundClasses: NotFoundClasses,
private val packagePartProvider: PackagePartProvider
private val metadataPartProvider: MetadataPartProvider
) : AbstractDeserializedPackageFragmentProvider(storageManager, finder, moduleDescriptor) {
init {
components = DeserializationComponents(
@@ -65,16 +64,16 @@ class MetadataPackageFragmentProvider(
override fun findPackage(fqName: FqName): DeserializedPackageFragment? =
if (finder.hasMetadataPackage(fqName))
MetadataPackageFragment(fqName, storageManager, moduleDescriptor, packagePartProvider, finder)
MetadataPackageFragment(fqName, storageManager, moduleDescriptor, metadataPartProvider, finder)
else null
}
class MetadataPackageFragment(
fqName: FqName,
storageManager: StorageManager,
module: ModuleDescriptor,
private val packagePartProvider: PackagePartProvider,
private val finder: KotlinMetadataFinder
fqName: FqName,
storageManager: StorageManager,
module: ModuleDescriptor,
private val metadataPartProvider: MetadataPartProvider,
private val finder: KotlinMetadataFinder
) : DeserializedPackageFragment(fqName, storageManager, module) {
override val classDataFinder = ClassDataFinder { classId ->
val topLevelClassId = generateSequence(classId, ClassId::getOuterClassId).last()
@@ -98,7 +97,7 @@ class MetadataPackageFragment(
private fun computeMemberScope(): MemberScope {
// For each .kotlin_metadata file which represents a package part, add a separate deserialized scope
// with top level callables and type aliases (but no classes) only from that part
val packageParts = packagePartProvider.findMetadataPackageParts(fqName.asString())
val packageParts = metadataPartProvider.findMetadataPackageParts(fqName.asString())
val scopes = arrayListOf<DeserializedPackageMemberScope>()
for (partName in packageParts) {
val stream = finder.findMetadata(ClassId(fqName, Name.identifier(partName))) ?: continue
@@ -0,0 +1,17 @@
/*
* Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.serialization.deserialization
interface MetadataPartProvider {
/**
* @return simple names of .kotlin_metadata files that store data for top level declarations in the package with the given FQ name
*/
fun findMetadataPackageParts(packageFqName: String): List<String>
object Empty : MetadataPartProvider {
override fun findMetadataPackageParts(packageFqName: String): List<String> = emptyList()
}
}