boolean (String pattern, Predicate<? super MatchedValue> consumer, @NotNull Set<String> ids) { Stream<AnAction> actions = ids.stream().map(myActionManager::getAction).filter(Objects::nonNull); Matcher matcher = ActionSearchUtilKt.buildMatcher(pattern); QuickActionProvider provider = myModel.getDataContext().getData(QuickActionProvider.KEY); if (provider != null) { actions = Stream.concat(actions, provider.getActions(true).stream()); } Stream<ActionWrapper> actionWrappers = actions .distinct() .map(action -> { if (action instanceof ActionGroup && !((ActionGroup)action).isSearchable()) { return null; } MatchMode mode = myModel.actionMatches(pattern, matcher, action); if (mode == MatchMode.NONE) { return null; } return new ActionWrapper(action, myModel.getGroupMapping(action), mode, myModel); }) .filter(Objects::nonNull); return processItems(pattern, MatchedValueType.ACTION, actionWrappers, consumer); }