Use internal names in multifile class metadata
To reuse the strings already existing in the constant pool of the class file
Original commit: bdd69d9e46
This commit is contained in:
@@ -198,7 +198,8 @@ public class IncrementalCacheImpl(
|
|||||||
inlineFunctionsMap.process(kotlinClass)
|
inlineFunctionsMap.process(kotlinClass)
|
||||||
}
|
}
|
||||||
header.isCompatibleMultifileClassKind() -> {
|
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)
|
multifileClassFacadeMap.add(className, partNames)
|
||||||
|
|
||||||
// TODO NO_CHANGES? (delegates only, see package facade)
|
// TODO NO_CHANGES? (delegates only, see package facade)
|
||||||
@@ -208,8 +209,7 @@ public class IncrementalCacheImpl(
|
|||||||
header.isCompatibleMultifileClassPartKind() -> {
|
header.isCompatibleMultifileClassPartKind() -> {
|
||||||
assert(sourceFiles.size() == 1) { "Multifile class part from several source files: $sourceFiles" }
|
assert(sourceFiles.size() == 1) { "Multifile class part from several source files: $sourceFiles" }
|
||||||
packagePartMap.addPackagePart(className)
|
packagePartMap.addPackagePart(className)
|
||||||
val facadeClassName = getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, header.multifileClassName!!)
|
multifileClassPartMap.add(className.internalName, header.multifileClassName!!)
|
||||||
multifileClassPartMap.add(className.internalName, facadeClassName)
|
|
||||||
|
|
||||||
protoMap.process(kotlinClass, isPackage = true) +
|
protoMap.process(kotlinClass, isPackage = true) +
|
||||||
constantsMap.process(kotlinClass) +
|
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<String> {
|
|
||||||
val classHeader = kotlinClass.classHeader
|
|
||||||
val partClassNames = classHeader.filePartClassNames ?: throw AssertionError("Multifile class has no parts: ${kotlinClass.className}")
|
|
||||||
val fullNames = arrayListOf<String>()
|
|
||||||
for (shortName in partClassNames) {
|
|
||||||
fullNames.add(getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, shortName))
|
|
||||||
}
|
|
||||||
return fullNames
|
|
||||||
}
|
|
||||||
|
|
||||||
private abstract class StringMapExternalizer<T> : DataExternalizer<Map<String, T>> {
|
private abstract class StringMapExternalizer<T> : DataExternalizer<Map<String, T>> {
|
||||||
override fun save(out: DataOutput, map: Map<String, T>?) {
|
override fun save(out: DataOutput, map: Map<String, T>?) {
|
||||||
out.writeInt(map!!.size())
|
out.writeInt(map!!.size())
|
||||||
|
|||||||
Reference in New Issue
Block a user