void (@NotNull PsiElement elementAtDebugger, @NotNull ChainsSearchResult searchResult, @NotNull ExecutorService executor) { List<LibrarySupportProvider> extensions = forLanguage(elementAtDebugger.getLanguage()); if (extensions.isEmpty()) { searchResult.markUnsupportedLanguage(); } else { ReadAction.nonBlocking(() -> { boolean found = false; for (LibrarySupportProvider provider : extensions) { try { if (provider.getChainBuilder().isChainExists(elementAtDebugger)) { found = true; break; } } catch (ProcessCanceledException e) { throw e; } catch (Throwable e) { LOG.error(e); } } if (LOG.isDebugEnabled()) { LOG.debug("Chains found:" + found); } searchResult.updateStatus(found); }) .inSmartMode(elementAtDebugger.getProject()) .submit(executor); } }