@RequiresBackgroundThread
  @RequiresReadLock
  public @NotNull List<@NotNull UsageCluster> getClustersForSelectedUsages(@NotNull Set<Usage> selectedUsages) {
    return getClusters().stream()
      .map(cluster -> new UsageCluster(cluster.getOnlySelectedUsages(selectedUsages)))
      .filter(usageCluster -> !usageCluster.getUsages().isEmpty())
      .sorted((o1, o2) -> {
        return Integer.compare(o2.getUsages().size(), o1.getUsages().size());
      }).collect(Collectors.toList());
  }
@RequiresBackgroundThread
  @RequiresReadLock
  public @NotNull List<@NotNull UsageCluster> getClustersForSelectedUsages(@NotNull Set<Usage> selectedUsages)