Minor refactoring: use array of MethodTransformers
instead of delegation
This commit is contained in:
committed by
Michael Bogdanov
parent
35cda83c8f
commit
e1c2fbaec0
+6
-4
@@ -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));
|
||||
|
||||
-5
@@ -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(
|
||||
|
||||
-6
@@ -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) {
|
||||
|
||||
+1
-10
@@ -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 <V extends Value> Frame<V>[] runAnalyzer(
|
||||
@NotNull Analyzer<V> analyzer,
|
||||
@@ -47,9 +42,5 @@ public abstract class MethodTransformer {
|
||||
return runAnalyzer(new Analyzer<V>(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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user