boolean (@NotNull ChooseByNameViewModel base, @NotNull FindSymbolParameters parameters, @NotNull Processor<? super FoundItemDescriptor<?>> consumer, @NotNull ProgressIndicator indicator) { String sanitized = getSanitizedPattern(parameters.getCompletePattern(), myModel); int qualifierEnd = sanitized.lastIndexOf('/') + 1; NameGrouper grouper = new NameGrouper(sanitized.substring(qualifierEnd), indicator); processNames(parameters, name -> grouper.processName(name)); Ref<Boolean> hasSuggestions = Ref.create(false); DirectoryPathMatcher dirMatcher = DirectoryPathMatcher.root(myModel, sanitized.substring(0, qualifierEnd)); while (dirMatcher != null) { int index = grouper.index; SuffixMatches group = grouper.nextGroup(base); if (group == null) break; if (!group.processFiles(parameters.withLocalPattern(dirMatcher.dirPattern), consumer, hasSuggestions, dirMatcher)) { return false; } dirMatcher = dirMatcher.appendChar(grouper.namePattern.charAt(index)); if (!myModel.isSlashlessMatchingEnabled()) { return true; } } return true; }