List<StreamChainWithLibrary> (@NotNull PsiElement elementAtDebugger) { ChainsSearchResult result = mySearchResult.get(); if (!result.isSuitableFor(elementAtDebugger) || !result.chainsStatus.equals(ChainStatus.FOUND)) { LOG.error("Cannot build chains: " + result.chainsStatus); return Collections.emptyList(); } // TODO: move to background List<StreamChainWithLibrary> chains = new ArrayList<>(); String elementLanguageId = elementAtDebugger.getLanguage().getID(); LibrarySupportProvider.EP_NAME.forEachExtensionSafe(provider -> { if (provider.getLanguageId().equals(elementLanguageId)) { StreamChainBuilder chainBuilder = provider.getChainBuilder(); if (chainBuilder.isChainExists(elementAtDebugger)) { for (StreamChain x : chainBuilder.build(elementAtDebugger)) { chains.add(new StreamChainWithLibrary(x, provider)); } } } }); return chains; }