public @NotNull List<WSLDistribution> getInstalledDistributions() {
    if (!isAvailable()) return List.of();
    CachedDistributions cachedDistributions = myInstalledDistributions;
    if (cachedDistributions != null && cachedDistributions.isUpToDate()) {
      return cachedDistributions.myInstalledDistributions;
    }

    @NotNull Set<@NotNull WSLDistribution> distributionsBefore =
      cachedDistributions != null ?
      new SmartHashSet<>(cachedDistributions.myInstalledDistributions) :
      Collections.emptySet();

    @NotNull Set<@NotNull WSLDistribution> distributionsAfter;

    myInstalledDistributions = null;
    synchronized (LOCK) {
      cachedDistributions = myInstalledDistributions;
      if (cachedDistributions == null) {
        cachedDistributions = new CachedDistributions(loadInstalledDistributions());
        myInstalledDistributions = cachedDistributions;
        myLastInstalledDistributions = cachedDistributions.myInstalledDistributions;
      }
      distributionsAfter = new SmartHashSet<>(cachedDistributions.myInstalledDistributions);
    }

    if (!distributionsBefore.equals(distributionsAfter)) {
      for (var listener : myWslDistributionsChangeListeners) {
        listener.accept(distributionsBefore, distributionsAfter);
      }
    }
    return cachedDistributions.myInstalledDistributions;
  }
public @NotNull List<WSLDistribution> getInstalledDistributions()