package com.avaje.ebean.enhance.asm.commons;
import com.avaje.ebean.enhance.asm.Label;
import com.avaje.ebean.enhance.asm.MethodVisitor;
public abstract class FinallyAdapter extends AdviceAdapter {
protected Label startFinally = new Label();
public FinallyAdapter(final int api, MethodVisitor mv, int acc, String name, String desc) {
super(api, mv, acc, name, desc);
}
public void visitCode() {
super.visitCode();
mv.visitLabel(startFinally);
}
public void visitMaxs(int maxStack, int maxLocals) {
Label endFinally = new Label();
mv.visitTryCatchBlock(startFinally, endFinally, endFinally, null);
mv.visitLabel(endFinally);
onFinally(ATHROW);
mv.visitInsn(ATHROW);
mv.visitMaxs(maxStack, maxLocals);
}
protected void onMethodExit(int opcode) {
if (opcode != ATHROW) {
onFinally(opcode);
}
}
protected abstract void onFinally(int opcode);
}