ProjectSdksModel+SdkDownloadTracker - race condition fix: ensure downloading SDK is registered on time

GitOrigin-RevId: c116959d419dc4fcfaadb86a94049e5149a585a0
This commit is contained in:
Eugene Petrenko
2020-04-22 17:49:10 +00:00
committed by intellij-monorepo-bot
parent c8655740ad
commit f0990986c3
@@ -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<? super Sdk> updateTree) {
doAddInternal(newSdk, updateTree);
}
@Nullable
private Sdk doAddInternal(@NotNull Sdk newSdk, @Nullable Consumer<? super Sdk> 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;
}
}