diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/OptimizationMethodVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/OptimizationMethodVisitor.java index a3e259684b0..14a29fe7002 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/OptimizationMethodVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/OptimizationMethodVisitor.java @@ -34,9 +34,9 @@ import java.util.List; public class OptimizationMethodVisitor extends MethodVisitor { private static final int MEMORY_LIMIT_BY_METHOD_MB = 50; - private static final MethodTransformer MAIN_METHOD_TRANSFORMER = new RedundantNullCheckMethodTransformer( - new RedundantBoxingMethodTransformer(null) - ); + private static final MethodTransformer[] TRANSFORMERS = new MethodTransformer[]{ + new RedundantNullCheckMethodTransformer(), new RedundantBoxingMethodTransformer() + }; private final MethodNode methodNode; private final MethodVisitor delegate; @@ -66,7 +66,9 @@ public class OptimizationMethodVisitor extends MethodVisitor { super.visitEnd(); if (canBeAnalyzed(methodNode)) { - MAIN_METHOD_TRANSFORMER.transform("fake", methodNode); + for (MethodTransformer transformer : TRANSFORMERS) { + transformer.transform("fake", methodNode); + } } methodNode.accept(new EndIgnoringMethodVisitorDecorator(Opcodes.ASM5, delegate)); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantBoxingMethodTransformer.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantBoxingMethodTransformer.java index 3d88aef19b6..61dbdff7a8b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantBoxingMethodTransformer.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantBoxingMethodTransformer.java @@ -31,9 +31,6 @@ import org.jetbrains.org.objectweb.asm.tree.analysis.Frame; import java.util.*; public class RedundantBoxingMethodTransformer extends MethodTransformer { - public RedundantBoxingMethodTransformer(MethodTransformer methodTransformer) { - super(methodTransformer); - } @Override public void transform(@NotNull String internalClassName, @NotNull MethodNode node) { @@ -55,8 +52,6 @@ public class RedundantBoxingMethodTransformer extends MethodTransformer { adaptInstructionsForBoxedValues(node, valuesToOptimize); } - - super.transform(internalClassName, node); } private static void interpretPopInstructionsForBoxedValues( diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantNullCheckMethodTransformer.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantNullCheckMethodTransformer.java index aa7b2d78577..8772b6baf48 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantNullCheckMethodTransformer.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/boxing/RedundantNullCheckMethodTransformer.java @@ -28,18 +28,12 @@ import java.util.ArrayList; import java.util.List; public class RedundantNullCheckMethodTransformer extends MethodTransformer { - public RedundantNullCheckMethodTransformer(MethodTransformer methodTransformer) { - super(methodTransformer); - } @Override public void transform(@NotNull String internalClassName, @NotNull MethodNode methodNode) { - while (removeRedundantNullCheckPass(internalClassName, methodNode)) { //do nothing } - - super.transform(internalClassName, methodNode); } private static boolean removeRedundantNullCheckPass(@NotNull String internalClassName, @NotNull MethodNode methodNode) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/transformer/MethodTransformer.java b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/transformer/MethodTransformer.java index 276e2a13404..2de3633cef4 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/optimization/transformer/MethodTransformer.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/optimization/transformer/MethodTransformer.java @@ -21,11 +21,6 @@ import org.jetbrains.org.objectweb.asm.tree.MethodNode; import org.jetbrains.org.objectweb.asm.tree.analysis.*; public abstract class MethodTransformer { - private final MethodTransformer delegate; - - protected MethodTransformer(MethodTransformer delegate) { - this.delegate = delegate; - } protected static Frame[] runAnalyzer( @NotNull Analyzer analyzer, @@ -47,9 +42,5 @@ public abstract class MethodTransformer { return runAnalyzer(new Analyzer(interpreter), internalClassName, node); } - public void transform(@NotNull String internalClassName, @NotNull MethodNode methodNode) { - if (delegate != null) { - delegate.transform(internalClassName, methodNode); - } - } + abstract public void transform(@NotNull String internalClassName, @NotNull MethodNode methodNode); }