[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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user