code: private void addExceptionRanges(Code c) {
  
          Map<CodeRange, List<Integer>> ranges = new HashMap<>();
          CodeException[] ces = c.getExceptionTable();
          if (ces != null) {
              for (CodeException ce : ces) {
                  CodeRange range = new CodeRange(ce.getStartPC(), ce.getEndPC(), false);
                  List<Integer> handlers = ranges.get(range);
                  if (handlers == null) {
                      handlers = new ArrayList<>(6);
                      ranges.put(range, handlers);
                  }
                  handlers.add(ce.getHandlerPC());
              }
          }
  
          for (Map.Entry<CodeRange, List<Integer>> entry : ranges.entrySet()) {
              optionalRanges.add(entry.getKey());
              List<Integer> handlers = entry.getValue();
              Collections.sort(handlers);
              for (int h = 0; h < (handlers.size() - 1); h++) {
                  optionalRanges.add(new CodeRange(handlers.get(h), handlers.get(h + 1), false));
              }
          }
      }
docs: adds optionalRanges for all try/catch blocks
  
  @param c
  the currently parsed code object