void (@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)); }); } }