@NotNull List<StreamChainWithLibrary> getChains(@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;
  }
@NotNull List<StreamChainWithLibrary> getChains(@NotNull PsiElement elementAtDebugger)