[JVM] Micro-optimize method signature mapping
This commit optimizes functions related to method signature mapping on the JVM backend. The most significant change is avoiding re-allocations in StringBuilder when building internal names. The commit also includes minor optimizations, such as removing redundant allocations of strings and other objects.
This commit is contained in:
committed by
Space Team
parent
70996035fc
commit
059046a2b1
+1
-1
@@ -134,7 +134,7 @@ open class SpecialGenericSignatures {
|
||||
signatureAndName.copy(name = jdkName).signature
|
||||
}
|
||||
|
||||
val ORIGINAL_SHORT_NAMES: List<Name> = NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.keys.map { it.name }
|
||||
val ORIGINAL_SHORT_NAMES: Set<Name> = NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.keys.mapTo(HashSet()) { it.name }
|
||||
|
||||
val JVM_SHORT_NAME_TO_BUILTIN_SHORT_NAMES_MAP: Map<Name, Name> =
|
||||
NAME_AND_SIGNATURE_TO_JVM_REPRESENTATION_NAME_MAP.entries
|
||||
|
||||
+1
-1
@@ -34,5 +34,5 @@ object SignatureBuildingComponents {
|
||||
|
||||
val ClassId.internalName: String
|
||||
get() {
|
||||
return JvmClassName.byClassId(JavaToKotlinClassMap.mapKotlinToJava(asSingleFqName().toUnsafe()) ?: this).internalName
|
||||
return JvmClassName.internalNameByClassId(JavaToKotlinClassMap.mapKotlinToJava(asSingleFqName().toUnsafe()) ?: this)
|
||||
}
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ fun <T : Any> TypeSystemCommonBackendContext.mapBuiltInType(
|
||||
if (!mode.kotlinCollectionsToJavaCollections && JavaToKotlinClassMap.mutabilityMappings.any { it.javaClass == classId })
|
||||
return null
|
||||
|
||||
return typeFactory.createObjectType(JvmClassName.byClassId(classId).internalName)
|
||||
return typeFactory.createObjectType(JvmClassName.internalNameByClassId(classId))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,11 +28,16 @@ public class JvmClassName {
|
||||
|
||||
@NotNull
|
||||
public static JvmClassName byClassId(@NotNull ClassId classId) {
|
||||
return new JvmClassName(internalNameByClassId(classId));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static String internalNameByClassId(@NotNull ClassId classId) {
|
||||
FqName packageFqName = classId.getPackageFqName();
|
||||
String relativeClassName = classId.getRelativeClassName().asString().replace('.', '$');
|
||||
return packageFqName.isRoot()
|
||||
? new JvmClassName(relativeClassName)
|
||||
: new JvmClassName(packageFqName.asString().replace('.', '/') + "/" + relativeClassName);
|
||||
? relativeClassName
|
||||
: packageFqName.asString().replace('.', '/') + "/" + relativeClassName;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -93,7 +93,7 @@ internal fun CallableDescriptor.computeJvmSignature(): String? = signatures {
|
||||
internal val ClassDescriptor.internalName: String
|
||||
get() {
|
||||
JavaToKotlinClassMap.mapKotlinToJava(fqNameSafe.toUnsafe())?.let {
|
||||
return JvmClassName.byClassId(it).internalName
|
||||
return JvmClassName.internalNameByClassId(it)
|
||||
}
|
||||
|
||||
return computeInternalName(this)
|
||||
|
||||
@@ -109,7 +109,10 @@ fun String.capitalizeAsciiOnly(): String {
|
||||
if (isEmpty()) return this
|
||||
val c = this[0]
|
||||
return if (c in 'a'..'z')
|
||||
c.uppercaseChar() + substring(1)
|
||||
buildString(length) {
|
||||
append(c.uppercaseChar())
|
||||
append(this@capitalizeAsciiOnly, 1, this@capitalizeAsciiOnly.length)
|
||||
}
|
||||
else
|
||||
this
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user