From 68e17044fe9c9b0514af08b07946eb9e6ecf7fc5 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 21 Sep 2015 20:35:27 +0300 Subject: [PATCH] Introduce new string table optimized for JVM class files This format of the string table allows to reduce the size of the Kotlin metadata in JVM class files by reusing constants already present in the constant pool. Currently the string table produced by JvmStringTable is not fully optimized in serialization (in particular, the 'substring' operation which will be used to extract type names out of generic signature, is not used at all), but the format and its complete support in the deserialization (JvmNameResolver) allows future improvement without changing the binary version Original commit: 1036506b25d0ce0dcbcb90206e38a26fd1d6b409 --- .../classFilesComparison.kt | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt index 4155f6742ca..03aacad2200 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt @@ -16,28 +16,28 @@ package org.jetbrains.kotlin.jps.build.classFilesComparison -import java.io.File -import org.junit.Assert.* -import org.jetbrains.org.objectweb.asm.util.TraceClassVisitor -import java.io.PrintWriter -import org.jetbrains.org.objectweb.asm.ClassReader -import java.io.StringWriter -import org.jetbrains.kotlin.utils.Printer -import com.google.common.io.Files -import com.google.common.hash.Hashing -import com.intellij.openapi.util.io.FileUtil import com.google.common.collect.Sets -import java.util.HashSet -import org.jetbrains.kotlin.serialization.jvm.BitEncoding -import org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf +import com.google.common.hash.Hashing +import com.google.common.io.Files import com.google.protobuf.ExtensionRegistry -import java.io.ByteArrayInputStream -import org.jetbrains.kotlin.serialization.DebugProtoBuf -import java.util.Arrays +import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.jps.incremental.LocalFileKotlinClass import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind import org.jetbrains.kotlin.load.kotlin.header.isCompatibleFileFacadeKind import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind +import org.jetbrains.kotlin.serialization.DebugProtoBuf +import org.jetbrains.kotlin.serialization.jvm.BitEncoding +import org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf +import org.jetbrains.kotlin.utils.Printer +import org.jetbrains.org.objectweb.asm.ClassReader +import org.jetbrains.org.objectweb.asm.util.TraceClassVisitor +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull +import java.io.ByteArrayInputStream +import java.io.File +import java.io.PrintWriter +import java.io.StringWriter +import java.util.* // Set this to true if you want to dump all bytecode (test will fail in this case) val DUMP_ALL = System.getProperty("comparison.dump.all") == "true" @@ -139,8 +139,7 @@ fun classFileToString(classFile: File): String { ByteArrayInputStream(BitEncoding.decodeBytes(annotationDataEncoded)).use { input -> - out.write("\n------ simpleNames proto -----\n${DebugProtoBuf.StringTable.parseDelimitedFrom(input)}") - out.write("\n------ qualifiedNames proto -----\n${DebugProtoBuf.QualifiedNameTable.parseDelimitedFrom(input)}") + out.write("\n------ string table types proto -----\n${DebugJvmProtoBuf.StringTableTypes.parseDelimitedFrom(input)}") when { classHeader!!.isCompatiblePackageFacadeKind() ->