Don't touch dependencies when serializing the module

Otherwise dependencies would seem as needed.
This commit is contained in:
Svyatoslav Scherbina
2017-10-11 13:40:38 +03:00
committed by SvyatoslavScherbina
parent 081b990863
commit ea802dfcdf
@@ -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 {