Drop KotlinClassHeader#filePartClassNames, use 'data' instead

This commit is contained in:
Alexander Udalov
2015-12-30 17:02:55 +03:00
parent b587d3a78d
commit 661af854fa
11 changed files with 45 additions and 72 deletions
@@ -132,7 +132,7 @@ fun classFileToString(classFile: File): String {
val classHeader = LocalFileKotlinClass.create(classFile)?.classHeader
val annotationDataEncoded = classHeader?.annotationData
val annotationDataEncoded = classHeader?.data
if (annotationDataEncoded != null) {
ByteArrayInputStream(BitEncoding.decodeBytes(annotationDataEncoded)).use {
input ->
@@ -20,6 +20,7 @@ import com.intellij.openapi.util.io.FileUtil
import com.intellij.testFramework.UsefulTestCase
import com.intellij.util.SmartList
import org.jetbrains.kotlin.jps.incremental.storage.ProtoMapValue
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
import org.jetbrains.kotlin.serialization.jvm.BitEncoding
import org.jetbrains.kotlin.test.KotlinTestUtils
@@ -28,7 +29,6 @@ import org.jetbrains.kotlin.utils.Printer
import java.io.File
abstract class AbstractProtoComparisonTest : UsefulTestCase() {
fun doTest(testDataPath: String) {
val testDir = KotlinTestUtils.tmpDir("testDirectory")
@@ -77,43 +77,31 @@ abstract class AbstractProtoComparisonTest : UsefulTestCase() {
}
private fun Printer.printDifference(oldClassFile: File, newClassFile: File) {
val oldLocalFileKotlinClass = LocalFileKotlinClass.create(oldClassFile)!!
val newLocalFileKotlinClass = LocalFileKotlinClass.create(newClassFile)!!
val oldClassHeader = oldLocalFileKotlinClass.classHeader
val newClassHeader = newLocalFileKotlinClass.classHeader
if (oldClassHeader.annotationData == null || newClassHeader.annotationData == null) {
println("skip ${oldLocalFileKotlinClass.classId}")
return
}
val oldProtoBytes = BitEncoding.decodeBytes(oldClassHeader.annotationData!!)
val newProtoBytes = BitEncoding.decodeBytes(newClassHeader.annotationData!!)
assert(oldClassHeader.metadataVersion.isCompatible()) { "Incompatible class ($oldClassHeader): $oldClassFile" }
assert(newClassHeader.metadataVersion.isCompatible()) { "Incompatible class ($newClassHeader): $newClassFile" }
val oldProto = ProtoMapValue(
oldClassHeader.kind == KotlinClassHeader.Kind.FILE_FACADE ||
oldClassHeader.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART,
oldProtoBytes, oldClassHeader.strings!!
)
val newProto = ProtoMapValue(
newClassHeader.kind == KotlinClassHeader.Kind.FILE_FACADE ||
newClassHeader.kind == KotlinClassHeader.Kind.MULTIFILE_CLASS_PART,
newProtoBytes, newClassHeader.strings!!
)
val diff = when (newClassHeader.kind) {
KotlinClassHeader.Kind.CLASS, KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART ->
difference(oldProto, newProto)
else -> {
println("ignore ${oldLocalFileKotlinClass.classId}")
return
fun KotlinJvmBinaryClass.readProto(): ProtoMapValue? {
assert(classHeader.metadataVersion.isCompatible()) { "Incompatible class ($classHeader): $location" }
return when (classHeader.kind) {
KotlinClassHeader.Kind.CLASS, KotlinClassHeader.Kind.FILE_FACADE, KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> {
ProtoMapValue(
classHeader.kind != KotlinClassHeader.Kind.CLASS,
BitEncoding.decodeBytes(classHeader.data!!),
classHeader.strings!!
)
}
else -> {
println("skip $classId")
return null
}
}
}
val oldClass = LocalFileKotlinClass.create(oldClassFile)!!
val newClass = LocalFileKotlinClass.create(newClassFile)!!
val diff = difference(
oldClass.readProto() ?: return,
newClass.readProto() ?: return
)
val changes = SmartList<String>()
if (diff.isClassSignatureChanged) {
@@ -128,7 +116,7 @@ abstract class AbstractProtoComparisonTest : UsefulTestCase() {
changes.add("NONE")
}
println("changes in ${oldLocalFileKotlinClass.classId}: ${changes.joinToString()}")
println("changes in ${oldClass.classId}: ${changes.joinToString()}")
}
private fun File.createSubDirectory(relativePath: String): File {