From 456139fc5e7e890963298ad8cc9bf158e179107f Mon Sep 17 00:00:00 2001 From: pyos Date: Thu, 27 Feb 2020 11:29:12 +0100 Subject: [PATCH] JVM_IR: cache signatures in BridgeLowering `mapAsmMethod` is somewhat slow, so this helps if there are a lot of overrides of same methods and/or deep class hierarchies in a single file (though it would probably help more if lowerings were not reconstructed for every file). --- .../org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt index 31ea7f3eec3..7064d35791e 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt @@ -30,7 +30,6 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.utils.getOrPutNullable import org.jetbrains.org.objectweb.asm.Type @@ -480,8 +479,10 @@ private class BridgeLowering(val context: JvmBackendContext) : FileLoweringPass, private fun IrBuilderWithScope.irCastIfNeeded(expression: IrExpression, to: IrType): IrExpression = if (expression.type == to || to.isAny() || to.isNullableAny()) expression else irImplicitCast(expression, to) + private val signatureCache = mutableMapOf() + private val IrFunction.jvmMethod: Method - get() = context.methodSignatureMapper.mapAsmMethod(this) + get() = signatureCache.getOrPut(this) { context.methodSignatureMapper.mapAsmMethod(this) } } private fun IrDeclaration.comesFromJava() = parentAsClass.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB