Compare diverged .meta.js files in a human readable way
This commit is contained in:
+27
@@ -20,9 +20,13 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import org.jetbrains.kotlin.incremental.LocalFileKotlinClass
|
import org.jetbrains.kotlin.incremental.LocalFileKotlinClass
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||||
import org.jetbrains.kotlin.metadata.DebugProtoBuf
|
import org.jetbrains.kotlin.metadata.DebugProtoBuf
|
||||||
|
import org.jetbrains.kotlin.metadata.js.DebugJsProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf
|
import org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.BitEncoding
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.BitEncoding
|
||||||
import org.jetbrains.kotlin.protobuf.ExtensionRegistry
|
import org.jetbrains.kotlin.protobuf.ExtensionRegistry
|
||||||
|
import org.jetbrains.kotlin.serialization.js.JsSerializerProtocol
|
||||||
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadata
|
||||||
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||||
import org.jetbrains.org.objectweb.asm.util.TraceClassVisitor
|
import org.jetbrains.org.objectweb.asm.util.TraceClassVisitor
|
||||||
@@ -34,6 +38,8 @@ import java.io.PrintWriter
|
|||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.zip.CRC32
|
import java.util.zip.CRC32
|
||||||
|
import java.util.zip.GZIPInputStream
|
||||||
|
import kotlin.comparisons.compareBy
|
||||||
|
|
||||||
// Set this to true if you want to dump all bytecode (test will fail in this case)
|
// Set this to true if you want to dump all bytecode (test will fail in this case)
|
||||||
private val DUMP_ALL = System.getProperty("comparison.dump.all") == "true"
|
private val DUMP_ALL = System.getProperty("comparison.dump.all") == "true"
|
||||||
@@ -162,6 +168,24 @@ private fun classFileToString(classFile: File): String {
|
|||||||
return out.toString()
|
return out.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun metaJsToString(metaJsFile: File): String {
|
||||||
|
val out = StringWriter()
|
||||||
|
|
||||||
|
val metadataList = arrayListOf<KotlinJavascriptMetadata>()
|
||||||
|
KotlinJavascriptMetadataUtils.parseMetadata(metaJsFile.readText(), metadataList)
|
||||||
|
|
||||||
|
for (metadata in metadataList) {
|
||||||
|
val (header, content) = GZIPInputStream(ByteArrayInputStream(metadata.body)).use { stream ->
|
||||||
|
DebugJsProtoBuf.Header.parseDelimitedFrom(stream, JsSerializerProtocol.extensionRegistry) to
|
||||||
|
DebugJsProtoBuf.Library.parseFrom(stream, JsSerializerProtocol.extensionRegistry)
|
||||||
|
}
|
||||||
|
out.write("\n------ header -----\n$header")
|
||||||
|
out.write("\n------ library -----\n$content")
|
||||||
|
}
|
||||||
|
|
||||||
|
return out.toString()
|
||||||
|
}
|
||||||
|
|
||||||
private fun getExtensionRegistry(): ExtensionRegistry {
|
private fun getExtensionRegistry(): ExtensionRegistry {
|
||||||
val registry = ExtensionRegistry.newInstance()!!
|
val registry = ExtensionRegistry.newInstance()!!
|
||||||
DebugJvmProtoBuf.registerAllExtensions(registry)
|
DebugJvmProtoBuf.registerAllExtensions(registry)
|
||||||
@@ -173,6 +197,9 @@ private fun fileToStringRepresentation(file: File): String {
|
|||||||
file.name.endsWith(".class") -> {
|
file.name.endsWith(".class") -> {
|
||||||
classFileToString(file)
|
classFileToString(file)
|
||||||
}
|
}
|
||||||
|
file.name.endsWith(KotlinJavascriptMetadataUtils.META_JS_SUFFIX) -> {
|
||||||
|
metaJsToString(file)
|
||||||
|
}
|
||||||
else -> {
|
else -> {
|
||||||
file.readText()
|
file.readText()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user