aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2012-02-13 21:08:25 +0100
committerReinier Zwitserloot <reinier@zwitserloot.com>2012-02-13 21:08:25 +0100
commit653104aa4e61672af91fb23367d9ab3f328a2b89 (patch)
tree4ea7cdc028514127900b29d56f7be3bee3a7e6ea /src/core
parentf69ae450d698cfc6010fcc406c608795b83a9666 (diff)
downloadlombok-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 :)
Diffstat (limited to 'src/core')
-rw-r--r--src/core/lombok/bytecode/SneakyThrowsRemover.java111
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) {