diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2012-02-13 21:08:25 +0100 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2012-02-13 21:08:25 +0100 |
commit | 653104aa4e61672af91fb23367d9ab3f328a2b89 (patch) | |
tree | 4ea7cdc028514127900b29d56f7be3bee3a7e6ea | |
parent | f69ae450d698cfc6010fcc406c608795b83a9666 (diff) | |
download | lombok-653104aa4e61672af91fb23367d9ab3f328a2b89.tar.gz lombok-653104aa4e61672af91fb23367d9ab3f328a2b89.tar.bz2 lombok-653104aa4e61672af91fb23367d9ab3f328a2b89.zip |
Smart ATHROW reducer removed because that can at least in theory go wrong, and saving one byte isn't relevant, as far as I know. This is simpler, too :)
-rw-r--r-- | src/core/lombok/bytecode/SneakyThrowsRemover.java | 111 |
1 files changed, 6 insertions, 105 deletions
diff --git a/src/core/lombok/bytecode/SneakyThrowsRemover.java b/src/core/lombok/bytecode/SneakyThrowsRemover.java index c5d46496..898955b1 100644 --- a/src/core/lombok/bytecode/SneakyThrowsRemover.java +++ b/src/core/lombok/bytecode/SneakyThrowsRemover.java @@ -29,12 +29,9 @@ import lombok.core.DiagnosticsReceiver; import lombok.core.PostCompilerTransformation; import org.mangosdk.spi.ProviderFor; -import org.objectweb.asm.AnnotationVisitor; -import org.objectweb.asm.Attribute; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; -import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -52,119 +49,23 @@ public class SneakyThrowsRemover implements PostCompilerTransformation { final AtomicBoolean changesMade = new AtomicBoolean(); class SneakyThrowsRemoverVisitor extends MethodVisitor { - boolean justAddedAthrow = false; - SneakyThrowsRemoverVisitor(MethodVisitor mv) { super(Opcodes.ASM4, mv); } @Override public void visitMethodInsn(int opcode, String owner, String name, String desc) { - justAddedAthrow = false; - boolean hit = true; - if (hit && opcode != Opcodes.INVOKESTATIC) hit = false; - if (hit && !"sneakyThrow".equals(name)) hit = false; - if (hit && !"lombok/Lombok".equals(owner)) hit = false; - if (hit && !"(Ljava/lang/Throwable;)Ljava/lang/RuntimeException;".equals(desc)) hit = false; - if (hit) { + if ( + opcode == Opcodes.INVOKESTATIC && + "sneakyThrow".equals(name) && + "lombok/Lombok".equals(owner) && + "(Ljava/lang/Throwable;)Ljava/lang/RuntimeException;".equals(desc)) { + changesMade.set(true); - justAddedAthrow = true; super.visitInsn(Opcodes.ATHROW); } else { super.visitMethodInsn(opcode, owner, name, desc); } } - - @Override public void visitInsn(int opcode) { - if (!justAddedAthrow || opcode != Opcodes.ATHROW) { - super.visitInsn(opcode); - } - justAddedAthrow = false; - } - - @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { - justAddedAthrow = false; - return super.visitAnnotation(desc, visible); - } - - @Override public AnnotationVisitor visitAnnotationDefault() { - justAddedAthrow = false; - return super.visitAnnotationDefault(); - } - - @Override public void visitAttribute(Attribute attr) { - justAddedAthrow = false; - super.visitAttribute(attr); - } - - @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { - justAddedAthrow = false; - super.visitFieldInsn(opcode, owner, name, desc); - } - - @Override public void visitIincInsn(int var, int increment) { - justAddedAthrow = false; - super.visitIincInsn(var, increment); - } - - @Override public void visitIntInsn(int opcode, int operand) { - justAddedAthrow = false; - super.visitIntInsn(opcode, operand); - } - - @Override public void visitJumpInsn(int opcode, Label label) { - justAddedAthrow = false; - super.visitJumpInsn(opcode, label); - } - - @Override public void visitLabel(Label label) { - justAddedAthrow = false; - super.visitLabel(label); - } - - @Override public void visitLdcInsn(Object cst) { - justAddedAthrow = false; - super.visitLdcInsn(cst); - } - - @Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { - justAddedAthrow = false; - super.visitLocalVariable(name, desc, signature, start, end, index); - } - - @Override public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { - justAddedAthrow = false; - super.visitLookupSwitchInsn(dflt, keys, labels); - } - - @Override public void visitMultiANewArrayInsn(String desc, int dims) { - justAddedAthrow = false; - super.visitMultiANewArrayInsn(desc, dims); - } - - @Override public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { - justAddedAthrow = false; - return super.visitParameterAnnotation(parameter, desc, visible); - } - - @Override public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) { - justAddedAthrow = false; - super.visitTableSwitchInsn(min, max, dflt, labels); - } - - @Override public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { - justAddedAthrow = false; - super.visitTryCatchBlock(start, end, handler, type); - } - - @Override public void visitTypeInsn(int opcode, String type) { - justAddedAthrow = false; - super.visitTypeInsn(opcode, type); - } - - @Override public void visitVarInsn(int opcode, int var) { - justAddedAthrow = false; - super.visitVarInsn(opcode, var); - } } reader.accept(new ClassVisitor(Opcodes.ASM4, writer) { |