Don't touch dependencies when serializing the module
Otherwise dependencies would seem as needed.
This commit is contained in:
committed by
SvyatoslavScherbina
parent
081b990863
commit
ea802dfcdf
+18
-26
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
|
||||
@@ -194,23 +195,21 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
fun serializePackage(fqName: FqName, module: ModuleDescriptor) :
|
||||
KonanLinkData.PackageFragment? {
|
||||
|
||||
val packageView = module.getPackage(fqName)
|
||||
|
||||
// TODO: ModuleDescriptor should be able to return
|
||||
// TODO: ModuleDescriptor should be able to return
|
||||
// the package only with the contents of that module, without dependencies
|
||||
val keep: (DeclarationDescriptor) -> Boolean =
|
||||
{ DescriptorUtils.getContainingModule(it) == module }
|
||||
|
||||
val fragments = packageView.fragments
|
||||
if (fragments.filter(keep).isEmpty()) return null
|
||||
val fragments = module.getPackage(fqName).fragments.filter { it.module == module }
|
||||
if (fragments.isEmpty()) return null
|
||||
|
||||
val classifierDescriptors = KonanDescriptorSerializer
|
||||
.sort(packageView.memberScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS))
|
||||
.filter(keep)
|
||||
val classifierDescriptors = KonanDescriptorSerializer.sort(
|
||||
fragments.flatMap {
|
||||
it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS)
|
||||
}
|
||||
)
|
||||
|
||||
val members = fragments
|
||||
.flatMap { fragment -> DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) }
|
||||
.filter(keep)
|
||||
val members = fragments.flatMap { fragment ->
|
||||
DescriptorUtils.getAllDescriptors(fragment.getMemberScope())
|
||||
}
|
||||
|
||||
val classesBuilder = KonanLinkData.Classes.newBuilder()
|
||||
|
||||
@@ -239,22 +238,15 @@ internal class KonanSerializationUtil(val context: Context) {
|
||||
}
|
||||
|
||||
private fun getPackagesFqNames(module: ModuleDescriptor): Set<FqName> {
|
||||
val fqNames = mutableSetOf<FqName>(FqName.ROOT)
|
||||
getSubPackagesFqNames(module.getPackage(FqName.ROOT), fqNames)
|
||||
return fqNames
|
||||
}
|
||||
private fun getSubPackagesFqNames(packageView: PackageViewDescriptor, result: MutableSet<FqName>) {
|
||||
val fqName = packageView.fqName
|
||||
if (!fqName.isRoot) {
|
||||
val result = mutableSetOf<FqName>()
|
||||
|
||||
fun getSubPackages(fqName: FqName) {
|
||||
result.add(fqName)
|
||||
module.getSubPackagesOf(fqName) { true }.forEach { getSubPackages(it) }
|
||||
}
|
||||
|
||||
for (descriptor in packageView.memberScope.getContributedDescriptors(
|
||||
DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)) {
|
||||
if (descriptor is PackageViewDescriptor) {
|
||||
getSubPackagesFqNames(descriptor, result)
|
||||
}
|
||||
}
|
||||
getSubPackages(FqName.ROOT)
|
||||
return result
|
||||
}
|
||||
|
||||
internal fun serializeModule(moduleDescriptor: ModuleDescriptor): LinkData {
|
||||
|
||||
Reference in New Issue
Block a user