diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt index 2f7e32ab0b0..1814884d2bc 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt @@ -14,64 +14,56 @@ * limitations under the License. */ -package org.jetbrains.kotlin.codegen.optimization; +package org.jetbrains.kotlin.codegen.optimization -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.codegen.TransformationMethodVisitor; -import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantBoxingMethodTransformer; -import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantCoercionToUnitTransformer; -import org.jetbrains.kotlin.codegen.optimization.captured.CapturedVarsOptimizationMethodTransformer; -import org.jetbrains.kotlin.codegen.optimization.common.UtilKt; -import org.jetbrains.kotlin.codegen.optimization.nullCheck.RedundantNullCheckV2MethodTransformer; -import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer; -import org.jetbrains.org.objectweb.asm.MethodVisitor; -import org.jetbrains.org.objectweb.asm.tree.MethodNode; +import org.jetbrains.kotlin.codegen.TransformationMethodVisitor +import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantBoxingMethodTransformer +import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantCoercionToUnitTransformer +import org.jetbrains.kotlin.codegen.optimization.captured.CapturedVarsOptimizationMethodTransformer +import org.jetbrains.kotlin.codegen.optimization.common.prepareForEmitting +import org.jetbrains.kotlin.codegen.optimization.nullCheck.RedundantNullCheckV2MethodTransformer +import org.jetbrains.org.objectweb.asm.MethodVisitor +import org.jetbrains.org.objectweb.asm.tree.MethodNode -public class OptimizationMethodVisitor extends TransformationMethodVisitor { - private static final int MEMORY_LIMIT_BY_METHOD_MB = 50; +class OptimizationMethodVisitor( + delegate: MethodVisitor, + private val disableOptimization: Boolean, + access: Int, + name: String, + desc: String, + signature: String?, + exceptions: Array? +) : TransformationMethodVisitor(delegate, access, name, desc, signature, exceptions) { - private static final MethodTransformer MANDATORY_METHOD_TRANSFORMER = new FixStackWithLabelNormalizationMethodTransformer(); - - private static final MethodTransformer[] OPTIMIZATION_TRANSFORMERS = new MethodTransformer[] { - new CapturedVarsOptimizationMethodTransformer(), - new RedundantNullCheckV2MethodTransformer(), - new RedundantCheckCastEliminationMethodTransformer(), - new RedundantBoxingMethodTransformer(), - new RedundantCoercionToUnitTransformer(), - new DeadCodeEliminationMethodTransformer(), - new RedundantGotoMethodTransformer(), - new RedundantNopsCleanupMethodTransformer() - }; - - private final boolean disableOptimization; - - public OptimizationMethodVisitor( - @NotNull MethodVisitor delegate, - boolean disableOptimization, - int access, - @NotNull String name, - @NotNull String desc, - @Nullable String signature, - @Nullable String[] exceptions - ) { - super(delegate, access, name, desc, signature, exceptions); - this.disableOptimization = disableOptimization; - } - - @Override - protected void performTransformations(@NotNull MethodNode methodNode) { - MANDATORY_METHOD_TRANSFORMER.transform("fake", methodNode); + override fun performTransformations(methodNode: MethodNode) { + MANDATORY_METHOD_TRANSFORMER.transform("fake", methodNode) if (canBeOptimized(methodNode) && !disableOptimization) { - for (MethodTransformer transformer : OPTIMIZATION_TRANSFORMERS) { - transformer.transform("fake", methodNode); + for (transformer in OPTIMIZATION_TRANSFORMERS) { + transformer.transform("fake", methodNode) } } - UtilKt.prepareForEmitting(methodNode); + methodNode.prepareForEmitting() } - private static boolean canBeOptimized(@NotNull MethodNode node) { - int totalFramesSizeMb = node.instructions.size() * (node.maxLocals + node.maxStack) / (1024 * 1024); - return totalFramesSizeMb < MEMORY_LIMIT_BY_METHOD_MB; + companion object { + private val MEMORY_LIMIT_BY_METHOD_MB = 50 + + private val MANDATORY_METHOD_TRANSFORMER = FixStackWithLabelNormalizationMethodTransformer() + + private val OPTIMIZATION_TRANSFORMERS = arrayOf( + CapturedVarsOptimizationMethodTransformer(), + RedundantNullCheckV2MethodTransformer(), + RedundantCheckCastEliminationMethodTransformer(), + RedundantBoxingMethodTransformer(), + RedundantCoercionToUnitTransformer(), + DeadCodeEliminationMethodTransformer(), + RedundantGotoMethodTransformer(), + RedundantNopsCleanupMethodTransformer() + ) + + private fun canBeOptimized(node: MethodNode): Boolean { + val totalFramesSizeMb = node.instructions.size() * (node.maxLocals + node.maxStack) / (1024 * 1024) + return totalFramesSizeMb < MEMORY_LIMIT_BY_METHOD_MB + } } }