diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt index 9aa84cef6a0..8e21e2e8b31 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/MandatoryMethodTransforker.kt @@ -17,15 +17,11 @@ package org.jetbrains.kotlin.codegen.optimization import org.jetbrains.kotlin.codegen.optimization.fixStack.FixStackMethodTransformer +import org.jetbrains.kotlin.codegen.optimization.transformer.CompositeMethodTransformer import org.jetbrains.kotlin.codegen.optimization.transformer.MethodTransformer import org.jetbrains.org.objectweb.asm.tree.MethodNode -class FixStackWithLabelNormalizationMethodTransformer : MethodTransformer() { - private val labelNormalization = LabelNormalizationMethodTransformer() - private val fixStack = FixStackMethodTransformer() - - override fun transform(internalClassName: String, methodNode: MethodNode) { - labelNormalization.transform(internalClassName, methodNode) - fixStack.transform(internalClassName, methodNode) - } -} +class FixStackWithLabelNormalizationMethodTransformer : CompositeMethodTransformer( + LabelNormalizationMethodTransformer(), + FixStackMethodTransformer() +) \ No newline at end of file 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 1814884d2bc..ef2c859bedd 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/OptimizationMethodVisitor.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.codegen.optimization.boxing.RedundantCoercionToUnitT 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.kotlin.codegen.optimization.transformer.CompositeMethodTransformer import org.jetbrains.org.objectweb.asm.MethodVisitor import org.jetbrains.org.objectweb.asm.tree.MethodNode @@ -38,9 +39,7 @@ class OptimizationMethodVisitor( override fun performTransformations(methodNode: MethodNode) { MANDATORY_METHOD_TRANSFORMER.transform("fake", methodNode) if (canBeOptimized(methodNode) && !disableOptimization) { - for (transformer in OPTIMIZATION_TRANSFORMERS) { - transformer.transform("fake", methodNode) - } + OPTIMIZATION_TRANSFORMER.transform("fake", methodNode) } methodNode.prepareForEmitting() } @@ -50,7 +49,7 @@ class OptimizationMethodVisitor( private val MANDATORY_METHOD_TRANSFORMER = FixStackWithLabelNormalizationMethodTransformer() - private val OPTIMIZATION_TRANSFORMERS = arrayOf( + private val OPTIMIZATION_TRANSFORMER = CompositeMethodTransformer( CapturedVarsOptimizationMethodTransformer(), RedundantNullCheckV2MethodTransformer(), RedundantCheckCastEliminationMethodTransformer(), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/transformer/CompositeMethodTransformer.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/transformer/CompositeMethodTransformer.kt new file mode 100644 index 00000000000..153d5137433 --- /dev/null +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/transformer/CompositeMethodTransformer.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.codegen.optimization.transformer + +import org.jetbrains.org.objectweb.asm.tree.MethodNode + +open class CompositeMethodTransformer(vararg val transformers: MethodTransformer) : MethodTransformer() { + override fun transform(internalClassName: String, methodNode: MethodNode) { + transformers.forEach { it.transform(internalClassName, methodNode) } + } +} \ No newline at end of file