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
+17
-25
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user