@Override
  public void actionPerformed(@NotNull AnActionEvent e) {
    XDebugSession session = DebuggerUIUtil.getSession(e);
    LibrarySupportProvider.EP_NAME.getExtensionList();
    XSourcePosition position = session == null ? null : session.getCurrentPosition();
    PsiElement element = session == null ? null : myPositionResolver.getNearestElementToBreakpoint(session);

    if (element == null || position == null) {
      LOG.info("element at cursor not found");
      return;
    }

    List<ChainResolver.StreamChainWithLibrary> chains = CHAIN_RESOLVER.getChains(element);
    if (chains.isEmpty()) {
      LOG.warn("stream chain is not built");
      return;
    }

    if (chains.size() == 1) {
      runTrace(chains.get(0).chain, chains.get(0).provider, session);
    }
    else {
      Project project = session.getProject();
      VirtualFile file = position.getFile();
      Editor editor = FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, file), true);
      LOG.assertTrue(editor != null);
      ApplicationManager.getApplication()
        .invokeLater(() -> {
          new MyStreamChainChooser(editor).show(ContainerUtil.map(chains, StreamChainOption::new),
                                                provider -> runTrace(provider.chain, provider.provider, session));
        });
    }
  }
@Override
  public void actionPerformed(@NotNull AnActionEvent e)