Move/inline stuff from DescriptorUtils to other modules

This commit is contained in:
Alexander Udalov
2015-10-24 02:17:58 +03:00
parent 2c64848826
commit 5677ff60e7
20 changed files with 96 additions and 116 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.KtScope
import org.jetbrains.kotlin.serialization.DescriptorSerializer
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.StringTableImpl
@@ -30,6 +31,7 @@ import org.jetbrains.kotlin.utils.KotlinJavascriptMetadata
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.util.*
import java.util.zip.GZIPInputStream
import java.util.zip.GZIPOutputStream
@@ -169,7 +171,7 @@ public object KotlinJavascriptSerializationUtil {
private fun ModuleDescriptor.toContentMap(): Map<String, ByteArray> {
val contentMap = hashMapOf<String, ByteArray>()
DescriptorUtils.getPackagesFqNames(this).forEach {
getPackagesFqNames(this).forEach {
serializePackage(this, it) {
fileName, bytes -> contentMap[fileName] = bytes
}
@@ -178,6 +180,26 @@ public object KotlinJavascriptSerializationUtil {
return contentMap
}
private fun getPackagesFqNames(module: ModuleDescriptor): Set<FqName> {
return HashSet<FqName>().apply {
getSubPackagesFqNames(module.getPackage(FqName.ROOT), this)
add(FqName.ROOT)
}
}
private fun getSubPackagesFqNames(packageView: PackageViewDescriptor, result: MutableSet<FqName>) {
val fqName = packageView.fqName
if (!fqName.isRoot) {
result.add(fqName)
}
for (descriptor in packageView.memberScope.getDescriptors(DescriptorKindFilter.PACKAGES, KtScope.ALL_NAME_FILTER)) {
if (descriptor is PackageViewDescriptor) {
getSubPackagesFqNames(descriptor, result)
}
}
}
private fun getPackages(contentMap: Map<String, ByteArray>): Set<String> {
val keys = contentMap.keySet().map { (if (it.startsWith('/')) it else "/" + it).substringBeforeLast('/') }.toSet()