diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractProtoComparisonTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractProtoComparisonTest.kt index 8b7afbd6796..2266fa2e47c 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractProtoComparisonTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/incremental/AbstractProtoComparisonTest.kt @@ -37,8 +37,9 @@ abstract class AbstractProtoComparisonTest : UsefulTestCase() { val oldClassFiles = compileFileAndGetClasses(testDataPath, testDir, "old") val newClassFiles = compileFileAndGetClasses(testDataPath, testDir, "new") - val oldClassMap = oldClassFiles.associateBy { it.name } - val newClassMap = newClassFiles.associateBy { it.name } + + val oldClassMap = oldClassFiles.map { LocalFileKotlinClass.create(it)!!.let { it.classId to it } }.toMap() + val newClassMap = newClassFiles.map { LocalFileKotlinClass.create(it)!!.let { it.classId to it } }.toMap() val sb = StringBuilder() val p = Printer(sb) @@ -46,17 +47,17 @@ abstract class AbstractProtoComparisonTest : UsefulTestCase() { val oldSetOfNames = oldClassFiles.map { it.name }.toSet() val newSetOfNames = newClassFiles.map { it.name }.toSet() - val removedNames = (oldSetOfNames - newSetOfNames).sorted() + val removedNames = (oldClassMap.keys - newClassMap.keys).map { it.toString() }.sorted() removedNames.forEach { p.println("REMOVED: class $it") } - val addedNames = (newSetOfNames - oldSetOfNames).sorted() + val addedNames = (newClassMap.keys - oldClassMap.keys).map { it.toString() }.sorted() addedNames.forEach { p.println("ADDED: class $it") } - val commonNames = oldSetOfNames.intersect(newSetOfNames).sorted() + val commonNames = oldClassMap.keys.intersect(newClassMap.keys).sortedBy { it.toString() } for(name in commonNames) { p.printDifference(oldClassMap[name]!!, newClassMap[name]!!) @@ -78,31 +79,30 @@ abstract class AbstractProtoComparisonTest : UsefulTestCase() { return File(classesDirectory, "test").listFiles() { it -> it.name.endsWith(".class") }?.sortedBy { it.name }!! } - private fun Printer.printDifference(oldClassFile: File, newClassFile: File) { + private fun Printer.printDifference(oldClass: LocalFileKotlinClass, newClass: LocalFileKotlinClass) { fun KotlinJvmBinaryClass.readProto(): ProtoMapValue? { assert(classHeader.metadataVersion.isCompatible()) { "Incompatible class ($classHeader): $location" } + + val bytes by lazy { BitEncoding.decodeBytes(classHeader.data!!) } + val strings by lazy { classHeader.strings!! } + 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!! - ) + KotlinClassHeader.Kind.CLASS -> { + ProtoMapValue(false, bytes, strings) + } + KotlinClassHeader.Kind.FILE_FACADE, + KotlinClassHeader.Kind.MULTIFILE_CLASS_PART -> { + ProtoMapValue(true, bytes, strings) } else -> { println("skip $classId") - return null + null } } } - val oldClass = LocalFileKotlinClass.create(oldClassFile)!! - val newClass = LocalFileKotlinClass.create(newClassFile)!! - - val diff = difference( - oldClass.readProto() ?: return, - newClass.readProto() ?: return - ) + val diff = difference(oldClass.readProto() ?: return, + newClass.readProto() ?: return) val changes = SmartList() diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithCompanionObjectChanged/result.out b/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithCompanionObjectChanged/result.out index 692a5dbb8eb..feb94193953 100644 --- a/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithCompanionObjectChanged/result.out +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithCompanionObjectChanged/result.out @@ -1,12 +1,12 @@ -REMOVED: class ClassWithChangedCompanionObject$FirstName.class -REMOVED: class ClassWithRemovedCompanionObject$Companion.class -ADDED: class ClassWithAddedCompanionObject$Companion.class -ADDED: class ClassWithChangedCompanionObject$SecondName.class +REMOVED: class test/ClassWithChangedCompanionObject.FirstName +REMOVED: class test/ClassWithRemovedCompanionObject.Companion +ADDED: class test/ClassWithAddedCompanionObject.Companion +ADDED: class test/ClassWithChangedCompanionObject.SecondName changes in test/ClassWithAddedCompanionObject: CLASS_SIGNATURE, MEMBERS [Companion] changes in test/ClassWithChangedCompanionObject: CLASS_SIGNATURE, MEMBERS [FirstName, SecondName] -changes in test/ClassWithChangedVisibilityForCompanionObject.Companion: CLASS_SIGNATURE changes in test/ClassWithChangedVisibilityForCompanionObject: NONE +changes in test/ClassWithChangedVisibilityForCompanionObject.Companion: CLASS_SIGNATURE changes in test/ClassWithRemovedCompanionObject: CLASS_SIGNATURE, MEMBERS [Companion] diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithNestedClassesChanged/result.out b/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithNestedClassesChanged/result.out index d9ebc0d8ae8..9c4508243a5 100644 --- a/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithNestedClassesChanged/result.out +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/classWithNestedClassesChanged/result.out @@ -1,9 +1,9 @@ -REMOVED: class ClassWithNestedClasses$NestedClassRemoved.class -ADDED: class ClassWithNestedClasses$InnerClassAdded.class -ADDED: class ClassWithNestedClasses$NestedClassAdded.class +REMOVED: class test/ClassWithNestedClasses.NestedClassRemoved +ADDED: class test/ClassWithNestedClasses.InnerClassAdded +ADDED: class test/ClassWithNestedClasses.NestedClassAdded +changes in test/ClassWithChangedVisibilityForNestedClasses: NONE changes in test/ClassWithChangedVisibilityForNestedClasses.InnerClass: CLASS_SIGNATURE changes in test/ClassWithChangedVisibilityForNestedClasses.NestedClass: CLASS_SIGNATURE -changes in test/ClassWithChangedVisibilityForNestedClasses: NONE -changes in test/ClassWithNestedClasses.InnerClass: NONE changes in test/ClassWithNestedClasses: MEMBERS [InnerClassAdded, NestedClassAdded, NestedClassRemoved] +changes in test/ClassWithNestedClasses.InnerClass: NONE diff --git a/jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/result.out b/jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/result.out index 016a54cb9a8..badf90d65aa 100644 --- a/jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/result.out +++ b/jps-plugin/testData/comparison/classMembersOnlyChanged/sealedClassImplAdded/result.out @@ -1,5 +1,5 @@ -ADDED: class Base$C.class -changes in test/Base.A: NONE -changes in test/Base.B: NONE +ADDED: class test/Base.C changes in test/Base: CLASS_SIGNATURE, MEMBERS [C] +changes in test/Base.A: NONE +changes in test/Base.B: NONE diff --git a/jps-plugin/testData/comparison/classSignatureChange/classFlagsChanged/result.out b/jps-plugin/testData/comparison/classSignatureChange/classFlagsChanged/result.out index 4e874a01529..82ff2e1b0ba 100644 --- a/jps-plugin/testData/comparison/classSignatureChange/classFlagsChanged/result.out +++ b/jps-plugin/testData/comparison/classSignatureChange/classFlagsChanged/result.out @@ -15,10 +15,10 @@ changes in test/EnumFlagUnchanged: NONE changes in test/FinalFlagAdded: NONE changes in test/FinalFlagRemoved: NONE changes in test/FinalFlagUnchanged: NONE +changes in test/InnerClassHolder: NONE changes in test/InnerClassHolder.InnerFlagAdded: CLASS_SIGNATURE changes in test/InnerClassHolder.InnerFlagRemoved: CLASS_SIGNATURE changes in test/InnerClassHolder.InnerFlagUnchanged: NONE -changes in test/InnerClassHolder: NONE changes in test/InternalFlagAdded: CLASS_SIGNATURE changes in test/InternalFlagRemoved: CLASS_SIGNATURE changes in test/InternalFlagUnchanged: NONE @@ -28,10 +28,10 @@ changes in test/OpenFlagUnchanged: NONE changes in test/PrivateFlagAdded: CLASS_SIGNATURE changes in test/PrivateFlagRemoved: CLASS_SIGNATURE changes in test/PrivateFlagUnchanged: NONE +changes in test/ProtectedClassHolder: NONE changes in test/ProtectedClassHolder.ProtectedFlagAdded: CLASS_SIGNATURE changes in test/ProtectedClassHolder.ProtectedFlagRemoved: CLASS_SIGNATURE changes in test/ProtectedClassHolder.ProtectedFlagUnchanged: NONE -changes in test/ProtectedClassHolder: NONE changes in test/PublicFlagAdded: NONE changes in test/PublicFlagRemoved: NONE changes in test/PublicFlagUnchanged: NONE diff --git a/jps-plugin/testData/comparison/jvmOnly/classToFileFacade/result.out b/jps-plugin/testData/comparison/jvmOnly/classToFileFacade/result.out index f20b90a9fb8..99630bdf273 100644 --- a/jps-plugin/testData/comparison/jvmOnly/classToFileFacade/result.out +++ b/jps-plugin/testData/comparison/jvmOnly/classToFileFacade/result.out @@ -1,3 +1,3 @@ -REMOVED: class MainKt$Companion.class -REMOVED: class TestPackage.class +REMOVED: class test/MainKt.Companion +REMOVED: class test/TestPackage changes in test/MainKt: CLASS_SIGNATURE diff --git a/jps-plugin/testData/comparison/jvmOnly/packageFacadeToClass/result.out b/jps-plugin/testData/comparison/jvmOnly/packageFacadeToClass/result.out index aeacc916ed4..86df8ebe75b 100644 --- a/jps-plugin/testData/comparison/jvmOnly/packageFacadeToClass/result.out +++ b/jps-plugin/testData/comparison/jvmOnly/packageFacadeToClass/result.out @@ -1,3 +1,3 @@ -ADDED: class MainKt$Companion.class -ADDED: class TestPackage.class +ADDED: class test/MainKt.Companion +ADDED: class test/TestPackage changes in test/MainKt: CLASS_SIGNATURE