public boolean merge(Subroutine subroutine) {
    boolean changes = false;
    for (int i = 0; i < access.length; ++i) {
      if (subroutine.access[i] && !access[i]) {
        access[i] = true;
        changes = true;
      }
    }
    if (subroutine.start == start) {
      for (int i = 0; i < subroutine.callers.size(); ++i) {
        JumpInsnNode caller = subroutine.callers.get(i);
        if (!callers.contains(caller)) {
          callers.add(caller);
          changes = true;
        }
      }
    }
    return changes;
  }
public boolean merge(Subroutine subroutine)