Get rid of SerializationUtil, move methods to DescriptorSerializer
This commit is contained in:
+18
-21
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.classId
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.SerializationUtil
|
||||
import org.jetbrains.kotlin.serialization.StringTable
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadata
|
||||
@@ -50,10 +49,10 @@ public object KotlinJavascriptSerializationUtil {
|
||||
}
|
||||
|
||||
private val STRING_TABLE_DEFAULT_BYTES = run {
|
||||
val nameStream = ByteArrayOutputStream()
|
||||
val strings = StringTable(KotlinJavascriptSerializerExtension)
|
||||
SerializationUtil.serializeStringTable(nameStream, strings.serializeSimpleNames(), strings.serializeQualifiedNames())
|
||||
nameStream.toByteArray()
|
||||
val serializer = DescriptorSerializer.createTopLevel(KotlinJavascriptSerializerExtension)
|
||||
val stream = ByteArrayOutputStream()
|
||||
serializer.serializeStringTable(stream)
|
||||
stream.toByteArray()
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
@@ -99,7 +98,7 @@ public object KotlinJavascriptSerializationUtil {
|
||||
public fun metadataAsString(moduleName: String, moduleDescriptor: ModuleDescriptor): String =
|
||||
KotlinJavascriptMetadataUtils.formatMetadataAsString(moduleName, moduleDescriptor.toBinaryMetadata())
|
||||
|
||||
fun serializePackage(module: ModuleDescriptor, fqName: FqName, writeFun: (String, ByteArrayOutputStream) -> Unit) {
|
||||
fun serializePackage(module: ModuleDescriptor, fqName: FqName, writeFun: (String, ByteArray) -> Unit) {
|
||||
val packageView = module.getPackage(fqName)
|
||||
|
||||
val skip: (DeclarationDescriptor) -> Boolean = { DescriptorUtils.getContainingModule(it) != module }
|
||||
@@ -112,29 +111,27 @@ public object KotlinJavascriptSerializationUtil {
|
||||
override fun writeClass(classDescriptor: ClassDescriptor, classProto: ProtoBuf.Class) {
|
||||
val stream = ByteArrayOutputStream()
|
||||
classProto.writeTo(stream)
|
||||
writeFun(getFileName(classDescriptor), stream)
|
||||
writeFun(getFileName(classDescriptor), stream.toByteArray())
|
||||
}
|
||||
}, skip)
|
||||
|
||||
val packageStream = ByteArrayOutputStream()
|
||||
val fragments = packageView.fragments
|
||||
val packageProto = serializer.packageProto(fragments, skip).build() ?: error("Package fragments not serialized: $fragments")
|
||||
if (packageProto.getMemberCount() > 0) {
|
||||
if (packageProto.memberCount > 0) {
|
||||
packageProto.writeTo(packageStream)
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getPackageFilePath(fqName), packageStream)
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getPackageFilePath(fqName), packageStream.toByteArray())
|
||||
}
|
||||
|
||||
val nameStream = ByteArrayOutputStream()
|
||||
val strings = serializer.getStringTable()
|
||||
|
||||
val strings = serializer.stringTable
|
||||
serializeClassNamesInPackage(fqName, fragments, strings, skip, writeFun)
|
||||
|
||||
val simpleNames = strings.serializeSimpleNames()
|
||||
val qualifiedNames = strings.serializeQualifiedNames()
|
||||
val nameStream = ByteArrayOutputStream()
|
||||
serializer.serializeStringTable(nameStream)
|
||||
val stringBytes = nameStream.toByteArray()
|
||||
|
||||
if (simpleNames.getStringCount() > 0 || qualifiedNames.getQualifiedNameCount() > 0) {
|
||||
SerializationUtil.serializeStringTable(nameStream, simpleNames, qualifiedNames)
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(fqName), nameStream)
|
||||
if (!stringBytes.isEmpty()) {
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(fqName), stringBytes)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -143,7 +140,7 @@ public object KotlinJavascriptSerializationUtil {
|
||||
packageFragments: Collection<PackageFragmentDescriptor>,
|
||||
stringTable: StringTable,
|
||||
skip: (DeclarationDescriptor) -> Boolean,
|
||||
writeFun: (String, ByteArrayOutputStream) -> Unit
|
||||
writeFun: (String, ByteArray) -> Unit
|
||||
) {
|
||||
val classes = packageFragments.flatMap {
|
||||
it.getMemberScope().getDescriptors(DescriptorKindFilter.CLASSIFIERS).filterIsInstance<ClassDescriptor>()
|
||||
@@ -157,10 +154,10 @@ public object KotlinJavascriptSerializationUtil {
|
||||
|
||||
val classesProto = builder.build()
|
||||
|
||||
if (classesProto.getClassNameCount() > 0) {
|
||||
if (classesProto.classNameCount > 0) {
|
||||
val stream = ByteArrayOutputStream()
|
||||
classesProto.writeTo(stream)
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getClassesInPackageFilePath(fqName), stream)
|
||||
writeFun(KotlinJavascriptSerializedResourcePaths.getClassesInPackageFilePath(fqName), stream.toByteArray())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -173,7 +170,7 @@ public object KotlinJavascriptSerializationUtil {
|
||||
|
||||
DescriptorUtils.getPackagesFqNames(this).forEach {
|
||||
serializePackage(this, it) {
|
||||
fileName, stream -> contentMap[fileName] = stream.toByteArray()
|
||||
fileName, bytes -> contentMap[fileName] = bytes
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user