protected String printVarInsnNode(VarInsnNode vin, ListIterator<?> it) {
    StringBuilder sb = new StringBuilder();
    sb.append(nameOpcode(vin.opcode()));
    sb.append(vin.var);
    if (Decompiler.BYTECODE.getSettings().isSelected(ClassNodeDecompiler.Settings.DEBUG_HELPERS)) {
      if (vin.var == 0 && !Modifier.isStatic(mNode.access)) {
        sb.append(" // reference to self");
      } else {
        final int refIndex = vin.var - (Modifier.isStatic(mNode.access) ? 0 : 1);
        if (refIndex >= 0 && refIndex < args.length - 1) {
          sb.append(" // reference to " + args[refIndex].name);
        }
      }
    }

    return sb.toString();
  }
  protected String printMethodInsnNode(MethodInsnNode min, ListIterator<?> it) {
    StringBuilder sb = new StringBuilder();
    sb.append(nameOpcode(min.opcode()) + " " + min.owner + " " + min.name + "(");

    String desc = min.desc;
    try {
      if (Type.getType(min.desc) != null) desc = Type.getType(min.desc).getClassName();

      if (desc == null || desc.equals("null")) desc = min.desc;
    } catch (java.lang.ArrayIndexOutOfBoundsException e) {

    }

    sb.append(desc);

    sb.append(");");

    return sb.toString();
  }
  protected String printInvokeDynamicInsNode(InvokeDynamicInsnNode idin) {
    StringBuilder sb = new StringBuilder();
    sb.append(nameOpcode(idin.opcode()) + " " + idin.bsm.getName() + "(");

    String desc = idin.desc;
    String partedDesc = idin.desc.substring(2);
    try {
      if (Type.getType(partedDesc) != null) desc = Type.getType(partedDesc).getClassName();

      if (desc == null || desc.equals("null")) desc = idin.desc;
    } catch (java.lang.ArrayIndexOutOfBoundsException e) {

    }

    sb.append(desc);

    sb.append(");");

    return sb.toString();
  }
 private void log(String msg) {
   out.append(msg);
   out.append(BytecodeViewer.nl);
 }