show local and WSL roots in FileChooser dialog immediately; update WSL roots later...
[idea/community.git] / platform / platform-impl / src / com / intellij / execution / wsl / WslDistributionManager.java
index 378b5ff5777efa9bd7e1fe6d0a9a286583650934..bbdc85f701b64c6048b568aeb7431fa8fc75041c 100644 (file)
@@ -29,6 +29,7 @@ public abstract class WslDistributionManager implements Disposable {
   }
 
   private volatile CachedDistributions myInstalledDistributions;
+  private volatile List<WSLDistribution> myLastInstalledDistributions;
   private final Map<String, WSLDistribution> myMsIdToDistributionCache = CollectionFactory.createConcurrentWeakCaseInsensitiveMap();
 
   @Override
@@ -44,6 +45,14 @@ public abstract class WslDistributionManager implements Disposable {
     return getInstalledDistributionsFuture().getNow(null);
   }
 
+  /**
+   * @return last loaded list of installed distributions or {@code null} if it hasn't been loaded yet.
+   * Please note the returned list might be out-of-date. To get the up-to-date list, please use {@link #getInstalledDistributionsFuture}.
+   */
+  public @Nullable List<WSLDistribution> getLastInstalledDistributions() {
+    return myLastInstalledDistributions;
+  }
+
   /**
    * @return list of installed WSL distributions by parsing output of `wsl.exe -l`. Please call it
    * on a pooled thread and outside of the read action as it runs a process under the hood.
@@ -60,6 +69,7 @@ public abstract class WslDistributionManager implements Disposable {
       if (cachedDistributions == null) {
         cachedDistributions = new CachedDistributions(loadInstalledDistributions());
         myInstalledDistributions = cachedDistributions;
+        myLastInstalledDistributions = cachedDistributions.myInstalledDistributions;
       }
     }
     return cachedDistributions.myInstalledDistributions;