mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
UnknownSdkTracker - configure local SDK, simplify code, enforce SDK name
GitOrigin-RevId: e9fb321dceeb768dbc6685fb4c0236c9661d8be5
This commit is contained in:
committed by
intellij-monorepo-bot
parent
331511f90c
commit
b2a226a6d3
+44
-26
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user