From f0990986c34836f63d3744fb53bd82dec48a8c7f Mon Sep 17 00:00:00 2001 From: Eugene Petrenko Date: Sat, 18 Apr 2020 22:22:03 +0200 Subject: [PATCH] ProjectSdksModel+SdkDownloadTracker - race condition fix: ensure downloading SDK is registered on time GitOrigin-RevId: c116959d419dc4fcfaadb86a94049e5149a585a0 --- .../projectRoot/ProjectSdksModel.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java index 53d00dcad7ca..8193cc732b01 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java @@ -436,11 +436,13 @@ public class ProjectSdksModel implements SdkModel { SdkDownloadTracker tracker = SdkDownloadTracker.getInstance(); tracker.registerSdkDownload(sdk, item); - Sdk editableSdk = doAddInternal(sdk, callback); - if (editableSdk != null) { + doAdd(sdk, (editableSdk) -> { tracker.registerEditableSdk(sdk, editableSdk); tracker.tryRegisterSdkDownloadFailureHandler(sdk, () -> removeSdk(editableSdk)); - } + if (callback != null) { + callback.consume(editableSdk); + } + }); tracker.startSdkDownloadIfNeeded(sdk); } @@ -463,11 +465,6 @@ public class ProjectSdksModel implements SdkModel { } public void doAdd(@NotNull Sdk newSdk, @Nullable Consumer updateTree) { - doAddInternal(newSdk, updateTree); - } - - @Nullable - private Sdk doAddInternal(@NotNull Sdk newSdk, @Nullable Consumer updateTree) { myModified = true; try { Sdk editableCopy = (Sdk)newSdk.clone(); @@ -476,11 +473,9 @@ public class ProjectSdksModel implements SdkModel { updateTree.consume(editableCopy); } mySdkEventsDispatcher.getMulticaster().sdkAdded(editableCopy); - return editableCopy; } catch (CloneNotSupportedException e) { LOG.error(e); - return null; } }