Drop KotlinClassHeader#filePartClassNames, use 'data' instead
Original commit: 661af854fa
This commit is contained in:
@@ -158,7 +158,7 @@ open class IncrementalCacheImpl(
|
||||
additionalProcessChangedClass(kotlinClass, isPackage = true)
|
||||
}
|
||||
KotlinClassHeader.Kind.MULTIFILE_CLASS -> {
|
||||
val partNames = kotlinClass.classHeader.filePartClassNames?.toList()
|
||||
val partNames = kotlinClass.classHeader.data?.toList()
|
||||
?: throw AssertionError("Multifile class has no parts: ${kotlinClass.className}")
|
||||
multifileClassFacadeMap.add(className, partNames)
|
||||
|
||||
@@ -324,7 +324,7 @@ open class IncrementalCacheImpl(
|
||||
|
||||
fun process(kotlinClass: LocalFileKotlinClass, isPackage: Boolean): CompilationResult {
|
||||
val header = kotlinClass.classHeader
|
||||
val bytes = BitEncoding.decodeBytes(header.annotationData!!)
|
||||
val bytes = BitEncoding.decodeBytes(header.data!!)
|
||||
return put(kotlinClass.className, bytes, header.strings!!, isPackage, checkChangesIsOpenPart = true)
|
||||
}
|
||||
|
||||
@@ -498,7 +498,7 @@ open class IncrementalCacheImpl(
|
||||
private fun addToClassStorage(kotlinClass: LocalFileKotlinClass) {
|
||||
if (!IncrementalCompilation.isExperimental()) return
|
||||
|
||||
val classData = JvmProtoBufUtil.readClassDataFrom(kotlinClass.classHeader.annotationData!!, kotlinClass.classHeader.strings!!)
|
||||
val classData = JvmProtoBufUtil.readClassDataFrom(kotlinClass.classHeader.data!!, kotlinClass.classHeader.strings!!)
|
||||
val supertypes = classData.classProto.supertypes(TypeTable(classData.classProto.typeTable))
|
||||
val parents = supertypes.map { classData.nameResolver.getClassId(it.className).asSingleFqName() }
|
||||
.filter { it.asString() != "kotlin.Any" }
|
||||
|
||||
+1
-1
@@ -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 ->
|
||||
|
||||
+24
-36
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user