private static ArrayList getStackTrace()

in src/main/java/com/intellij/rt/debugger/agent/CaptureStorage.java [533:568]


  private static ArrayList<StackTraceElement> getStackTrace(CapturedStack stack, int limit) {
    ArrayList<StackTraceElement> res = new ArrayList<>();
    while (stack != null && res.size() <= limit) {
      List<StackTraceElement> stackTrace = trimInitAgentFrames(stack.getStackTrace());
      if (stack instanceof DeepCapturedStack) {
        int size = stackTrace.size();
        int newEnd = Integer.MAX_VALUE;
        for (int i = 0; i < size; i++) {
          StackTraceElement elem = stackTrace.get(i);
          if (elem.getMethodName().endsWith(GENERATED_INSERT_METHOD_POSTFIX)) {
            // End stack trace like this: ..., "foo$$$capture", "foo"
            newEnd = i + 2;
            break;
          } else if (elem == ASYNC_STACK_ELEMENT) {
            newEnd = i;
            break;
          }
        }
        if (newEnd > size) {
          stack = null; // Insertion point was not found - stop
        }
        else {
          stackTrace = stackTrace.subList(0, newEnd);
          stack = ((DeepCapturedStack)stack).myInsertMatch;
        }
      }
      else {
        stack = null;
      }
      res.addAll(stackTrace);
      if (stack != null) {
        res.add(ASYNC_STACK_ELEMENT);
      }
    }
    return res;
  }