UnknownSdkTracker - configure local SDK, simplify code, enforce SDK name

GitOrigin-RevId: e9fb321dceeb768dbc6685fb4c0236c9661d8be5
This commit is contained in:
Eugene Petrenko
2019-12-18 10:32:28 +00:00
committed by intellij-monorepo-bot
parent 331511f90c
commit b2a226a6d3
2 changed files with 45 additions and 27 deletions
@@ -132,41 +132,43 @@ public class UnknownSdkTracker {
return;
}
Sdk sdk = ProjectJdkTable.getInstance().createSdk(info.getSdkName(), info.getSdkType());
{
SdkModificator mod = sdk.getSdkModificator();
mod.setHomePath(task.getPlannedHomeDir());
mod.setVersionString(task.getPlannedVersion());
mod.commitChanges();
}
ApplicationManager.getApplication().invokeLater(() -> {
Disposable lifetime = Disposer.newDisposable();
Disposer.register(project,lifetime);
Sdk sdk = createSdkPrototype(info);
SdkDownloadTracker downloadTracker = SdkDownloadTracker.getInstance();
downloadTracker.registerSdkDownload(sdk, task);
downloadTracker.tryRegisterDownloadingListener(sdk, Disposer.newDisposable(), new ProgressIndicatorBase(), succeeded -> {
downloadTracker.tryRegisterDownloadingListener(sdk, lifetime, new ProgressIndicatorBase(), succeeded -> {
if (succeeded) {
WriteAction.run(() -> ProjectJdkTable.getInstance().addJdk(sdk));
registerNewSdkInJdkTable(info, sdk);
}
Disposer.dispose(lifetime);
});
downloadTracker.startSdkDownloadIfNeeded(sdk);
});
}
private static void configureLocalSdks(@NotNull Map<MissingSdkInfo, LocalSdkFix> localFixes) {
ProjectJdkTable jdkTable = ProjectJdkTable.getInstance();
for (Map.Entry<MissingSdkInfo, LocalSdkFix> e : localFixes.entrySet()) {
MissingSdkInfo info = e.getKey();
LocalSdkFix fix = e.getValue();
Sdk sdk = jdkTable.createSdk(info.getSdkName(), info.getSdkType());
{
SdkModificator mod = sdk.getSdkModificator();
mod.setHomePath(FileUtil.toSystemIndependentName(fix.getExistingSdkHome()));
mod.setVersionString(fix.getVersionString());
mod.commitChanges();
Sdk sdk = createSdkPrototype(info);
SdkModificator mod = sdk.getSdkModificator();
mod.setHomePath(FileUtil.toSystemIndependentName(fix.getExistingSdkHome()));
mod.setVersionString(fix.getVersionString());
mod.commitChanges();
try {
info.getSdkType().setupSdkPaths(sdk);
} catch (Exception error) {
LOG.warn("Failed to setupPaths for " + sdk + ". " + error.getMessage(), error);
}
WriteAction.run(() -> jdkTable.addJdk(sdk));
registerNewSdkInJdkTable(info, sdk);
LOG.info("Automatically set Sdk " + info.getSdkName() + " to " + fix.getExistingSdkHome());
}
}
@@ -397,14 +399,8 @@ public class UnknownSdkTracker {
@Override
public void sdkAdded(@NotNull Sdk sdk) {
//it is easier and safer than committing the ProjectSdksModel instance
WriteAction.run(() -> {
SdkModificator mod = sdk.getSdkModificator();
mod.setName(info.getSdkName());
mod.commitChanges();
ProjectJdkTable.getInstance().addJdk(sdk);
wasSdkCreated.set(true);
});
registerNewSdkInJdkTable(info, sdk);
wasSdkCreated.set(true);
}
});
@@ -471,4 +467,26 @@ public class UnknownSdkTracker {
}
}
}
@NotNull
private static Sdk createSdkPrototype(@NotNull MissingSdkInfo info) {
return ProjectJdkTable.getInstance().createSdk(info.getSdkName(), info.getSdkType());
}
private static void registerNewSdkInJdkTable(@NotNull MissingSdkInfo info, @NotNull Sdk sdk) {
WriteAction.run(() -> {
ProjectJdkTable table = ProjectJdkTable.getInstance();
Sdk clash = table.findJdk(info.getSdkName());
if (clash != null) {
LOG.warn("SDK with name " + info.getSdkName() + " already exists: clash=" + clash + ", new=" + sdk);
return;
}
SdkModificator mod = sdk.getSdkModificator();
mod.setName(info.getSdkName());
mod.commitChanges();
table.addJdk(sdk);
});
}
}
@@ -334,7 +334,7 @@ public class SdkDownloadTracker implements Disposable {
getInstance().removeTask(this);
//collections may change from the callbacks
new ArrayList<>(myCompleteListeners).forEach(it -> it.consume(succeeded));
new ArrayList<>(myDisposables).forEach(Disposable::dispose);
new ArrayList<>(myDisposables).forEach(it -> Disposer.dispose(it));
}
void cancel() {