From ea802dfcdf95242307e4b0571d99a0adeff5a6f0 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Wed, 11 Oct 2017 13:40:38 +0300 Subject: [PATCH] Don't touch dependencies when serializing the module Otherwise dependencies would seem as needed. --- .../serialization/KonanSerializationUtil.kt | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt index 4afb031fb39..d12645c1a20 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializationUtil.kt @@ -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 { - val fqNames = mutableSetOf(FqName.ROOT) - getSubPackagesFqNames(module.getPackage(FqName.ROOT), fqNames) - return fqNames - } - private fun getSubPackagesFqNames(packageView: PackageViewDescriptor, result: MutableSet) { - val fqName = packageView.fqName - if (!fqName.isRoot) { + val result = mutableSetOf() + + 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 {