void (@NotNull VcsLogTextFilter filter, @Nullable IntSet candidates, @NotNull IntConsumer consumer) { if (!filter.isRegex() || filter instanceof VcsLogMultiplePatternsTextFilter) { executeAndCatch(() -> { List<String> trigramSources = filter instanceof VcsLogMultiplePatternsTextFilter ? ((VcsLogMultiplePatternsTextFilter)filter).getPatterns() : Collections.singletonList(filter.getText()); List<String> noTrigramSources = new ArrayList<>(); for (String string : trigramSources) { myIndexStorageBackend.getCommitsForSubstring(string, candidates, noTrigramSources, consumer, filter); } if (!noTrigramSources.isEmpty()) { VcsLogTextFilter noTrigramFilter = VcsLogFilterObject.fromPatternsList(noTrigramSources, filter.matchesCase()); filter(candidates, noTrigramFilter::matches, consumer); } }); } else { executeAndCatch(() -> { filter(candidates, filter::matches, consumer); }); } }