From 97b4d89f0b596f34566086c76a6bcde8d2aed599 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 1 Oct 2015 20:59:56 +0300 Subject: [PATCH] Use internal names in multifile class metadata To reuse the strings already existing in the constant pool of the class file Original commit: bdd69d9e4601a734b9cd6f7aed1968d9924bd42a --- .../jps/incremental/IncrementalCacheImpl.kt | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index 093349ccec1..ff37c5b5d2a 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -198,7 +198,8 @@ public class IncrementalCacheImpl( inlineFunctionsMap.process(kotlinClass) } header.isCompatibleMultifileClassKind() -> { - val partNames = getFullNamesOfMultifileClassParts(kotlinClass) + val partNames = kotlinClass.classHeader.filePartClassNames?.toList() + ?: throw AssertionError("Multifile class has no parts: ${kotlinClass.className}") multifileClassFacadeMap.add(className, partNames) // TODO NO_CHANGES? (delegates only, see package facade) @@ -208,8 +209,7 @@ public class IncrementalCacheImpl( header.isCompatibleMultifileClassPartKind() -> { assert(sourceFiles.size() == 1) { "Multifile class part from several source files: $sourceFiles" } packagePartMap.addPackagePart(className) - val facadeClassName = getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, header.multifileClassName!!) - multifileClassPartMap.add(className.internalName, facadeClassName) + multifileClassPartMap.add(className.internalName, header.multifileClassName!!) protoMap.process(kotlinClass, isPackage = true) + constantsMap.process(kotlinClass) + @@ -698,21 +698,6 @@ private fun ByteArray.md5(): Long { ) } -private fun getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass: KotlinJvmBinaryClass, simpleName: String): String { - val classFqName = kotlinClass.classId.packageFqName.child(Name.identifier(simpleName)) - return JvmClassName.byFqNameWithoutInnerClasses(classFqName).internalName -} - -private fun getFullNamesOfMultifileClassParts(kotlinClass: LocalFileKotlinClass): List { - val classHeader = kotlinClass.classHeader - val partClassNames = classHeader.filePartClassNames ?: throw AssertionError("Multifile class has no parts: ${kotlinClass.className}") - val fullNames = arrayListOf() - for (shortName in partClassNames) { - fullNames.add(getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, shortName)) - } - return fullNames -} - private abstract class StringMapExternalizer : DataExternalizer> { override fun save(out: DataOutput, map: Map?) { out.writeInt(map!!.size())