code: @SuppressWarnings("unchecked")
    @Ensures({
      "lines == null ? result == null : isLineNumberList(result)"
    })
    static List<Long> getLineNumbers(Object lines) {
      if (lines == null) {
        return null;
      }
  
      ArrayList<Long> lineNumbers = new ArrayList<Long>();
      if (lines.getClass().isArray()) {
        for (long line : (long[]) lines) {
          lineNumbers.add(line < 1 ? null : line);
        }
      } else {
        for (Long line : (List<Long>) lines) {
          lineNumbers.add(line < 1 ? null : line);
        }
      }
  
      return lineNumbers;
    }
docs: Converts either a {@code long[]} or {@code List<Long>} object as
  obtained by reading the annotation to a {@code List<Long>} with
  {@code null} instead of negative values to represent non-existent
  line information.
  
  TODO(lenh): ASM documentation states the returned annotation
  value should be a list but the library returns an array.