public Object @NotNull [] getElementsByName(@NotNull String name,
                                              @NotNull FindSymbolParameters parameters,
                                              @NotNull ProgressIndicator canceled) {
    Map<ChooseByNameContributor, String> applicable = new HashMap<>();
    for (ChooseByNameContributor contributor : filterDumb(getContributorList())) {
      IntSet filter = myContributorToItsSymbolsMap.get(contributor);
      if (filter == null || filter.contains(name.hashCode())) {
        applicable.put(contributor, name);
      }
    }
    if (applicable.isEmpty()) return ArrayUtil.EMPTY_OBJECT_ARRAY;
    long start = System.nanoTime();
    List<NavigationItem> items = Collections.synchronizedList(new ArrayList<>());

    Processor<ChooseByNameContributor> processor = contributor ->
      processContributorForName(contributor, applicable.get(contributor), parameters, canceled, items);
    if (!JobLauncher.getInstance().invokeConcurrentlyUnderProgress(new ArrayList<>(applicable.keySet()), canceled, processor)) {
      canceled.cancel();
    }
    canceled.checkCanceled(); // if parallel job execution was canceled because of PCE, rethrow it from here
    if (LOG.isDebugEnabled()) {
      LOG.debug("Retrieving " + name + ":" + items.size() + " for " + TimeoutUtil.getDurationMillis(start));
    }
    return ArrayUtil.toObjectArray(items);
  }
public Object @NotNull [] getElementsByName(@NotNull String name,
                                              @NotNull FindSymbolParameters parameters,
                                              @NotNull ProgressIndicator canceled)