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.name.Name
import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration import org.jetbrains.kotlin.resolve.CompilerDeserializationConfiguration
import org.jetbrains.kotlin.resolve.DescriptorUtils 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.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.MemberScope
import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer import org.jetbrains.kotlin.serialization.KonanDescriptorSerializer
@@ -194,23 +195,21 @@ internal class KonanSerializationUtil(val context: Context) {
fun serializePackage(fqName: FqName, module: ModuleDescriptor) : fun serializePackage(fqName: FqName, module: ModuleDescriptor) :
KonanLinkData.PackageFragment? { 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 // the package only with the contents of that module, without dependencies
val keep: (DeclarationDescriptor) -> Boolean =
{ DescriptorUtils.getContainingModule(it) == module }
val fragments = packageView.fragments val fragments = module.getPackage(fqName).fragments.filter { it.module == module }
if (fragments.filter(keep).isEmpty()) return null if (fragments.isEmpty()) return null
val classifierDescriptors = KonanDescriptorSerializer val classifierDescriptors = KonanDescriptorSerializer.sort(
.sort(packageView.memberScope.getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS)) fragments.flatMap {
.filter(keep) it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS)
}
)
val members = fragments val members = fragments.flatMap { fragment ->
.flatMap { fragment -> DescriptorUtils.getAllDescriptors(fragment.getMemberScope()) } DescriptorUtils.getAllDescriptors(fragment.getMemberScope())
.filter(keep) }
val classesBuilder = KonanLinkData.Classes.newBuilder() val classesBuilder = KonanLinkData.Classes.newBuilder()
@@ -239,22 +238,15 @@ internal class KonanSerializationUtil(val context: Context) {
} }
private fun getPackagesFqNames(module: ModuleDescriptor): Set<FqName> { private fun getPackagesFqNames(module: ModuleDescriptor): Set<FqName> {
val fqNames = mutableSetOf<FqName>(FqName.ROOT) val result = mutableSetOf<FqName>()
getSubPackagesFqNames(module.getPackage(FqName.ROOT), fqNames)
return fqNames fun getSubPackages(fqName: FqName) {
}
private fun getSubPackagesFqNames(packageView: PackageViewDescriptor, result: MutableSet<FqName>) {
val fqName = packageView.fqName
if (!fqName.isRoot) {
result.add(fqName) result.add(fqName)
module.getSubPackagesOf(fqName) { true }.forEach { getSubPackages(it) }
} }
for (descriptor in packageView.memberScope.getContributedDescriptors( getSubPackages(FqName.ROOT)
DescriptorKindFilter.PACKAGES, MemberScope.ALL_NAME_FILTER)) { return result
if (descriptor is PackageViewDescriptor) {
getSubPackagesFqNames(descriptor, result)
}
}
} }
internal fun serializeModule(moduleDescriptor: ModuleDescriptor): LinkData { internal fun serializeModule(moduleDescriptor: ModuleDescriptor): LinkData {