@Override
    public void visitFrame(final int type, final int nLocal,
            final Object[] local, final int nStack, final Object[] stack) {
        buf.setLength(0);
        switch (type) {
        case Opcodes.F_NEW:
        case Opcodes.F_FULL:
            declareFrameTypes(nLocal, local);
            declareFrameTypes(nStack, stack);
            if (type == Opcodes.F_NEW) {
                buf.append(name).append(".visitFrame(Opcodes.F_NEW, ");
            } else {
                buf.append(name).append(".visitFrame(Opcodes.F_FULL, ");
            }
            buf.append(nLocal).append(", new Object[] {");
            appendFrameTypes(nLocal, local);
            buf.append("}, ").append(nStack).append(", new Object[] {");
            appendFrameTypes(nStack, stack);
            buf.append('}');
            break;
        case Opcodes.F_APPEND:
            declareFrameTypes(nLocal, local);
            buf.append(name).append(".visitFrame(Opcodes.F_APPEND,")
                    .append(nLocal).append(", new Object[] {");
            appendFrameTypes(nLocal, local);
            buf.append("}, 0, null");
            break;
        case Opcodes.F_CHOP:
            buf.append(name).append(".visitFrame(Opcodes.F_CHOP,")
                    .append(nLocal).append(", null, 0, null");
            break;
        case Opcodes.F_SAME:
            buf.append(name).append(
                    ".visitFrame(Opcodes.F_SAME, 0, null, 0, null");
            break;
        case Opcodes.F_SAME1:
            declareFrameTypes(1, stack);
            buf.append(name).append(
                    ".visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] {");
            appendFrameTypes(1, stack);
            buf.append('}');
            break;
        }
        buf.append(");\n");
        text.add(buf.toString());
    }