mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
loading project under one progress (take two)
This commit is contained in:
+2
-18
@@ -28,7 +28,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleType;
|
||||
import com.intellij.openapi.module.UnknownModuleType;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
@@ -123,23 +122,8 @@ public class ModuleManagerComponent extends ModuleManagerImpl {
|
||||
|
||||
@Override
|
||||
protected void fireModulesAdded() {
|
||||
if (myModuleModel.myModules.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
Runnable runnableWithProgress = () -> {
|
||||
for (final Module module : myModuleModel.myModules.values()) {
|
||||
TransactionGuard.getInstance().submitTransactionAndWait(TransactionKind.ANY_CHANGE, () -> fireModuleAddedInWriteAction(module));
|
||||
}
|
||||
};
|
||||
|
||||
ProgressIndicator progressIndicator = myProgressManager.getProgressIndicator();
|
||||
if (progressIndicator == null) {
|
||||
myProgressManager.runProcessWithProgressSynchronously(runnableWithProgress, "Initializing Modules", false, myProject);
|
||||
}
|
||||
else {
|
||||
progressIndicator.setText("Initializing modules...");
|
||||
runnableWithProgress.run();
|
||||
for (final Module module : myModuleModel.myModules.values()) {
|
||||
TransactionGuard.getInstance().submitTransactionAndWait(TransactionKind.ANY_CHANGE, () -> fireModuleAddedInWriteAction(module));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+37
-9
@@ -347,7 +347,6 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
return false;
|
||||
}
|
||||
|
||||
fireProjectOpened(project);
|
||||
try (AccessToken ignored = TransactionGuard.getInstance().startSynchronousTransaction(TransactionKind.ANY_CHANGE)) {
|
||||
DumbService.allowStartingDumbModeInside(DumbModePermission.MAY_START_BACKGROUND, () ->
|
||||
DumbService.getInstance(project).queueTask(new DumbModeTask() {
|
||||
@@ -364,10 +363,17 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
);
|
||||
}
|
||||
|
||||
final StartupManagerImpl startupManager = (StartupManagerImpl)StartupManager.getInstance(project);
|
||||
boolean ok = myProgressManager.runProcessWithProgressSynchronously(new Runnable() {
|
||||
Runnable process = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
fireProjectOpened(project);
|
||||
}
|
||||
});
|
||||
|
||||
StartupManagerImpl startupManager = (StartupManagerImpl)StartupManager.getInstance(project);
|
||||
startupManager.runStartupActivities();
|
||||
|
||||
// Startup activities (e.g. the one in FileBasedIndexProjectHandler) have scheduled dumb mode to begin "later"
|
||||
@@ -391,8 +397,13 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
}
|
||||
}, ModalityState.NON_MODAL);
|
||||
}
|
||||
}, ProjectBundle.message("project.load.progress"), canCancelProjectLoading(), project);
|
||||
};
|
||||
if (myProgressManager.getProgressIndicator() != null) {
|
||||
process.run();
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean ok = myProgressManager.runProcessWithProgressSynchronously(process, ProjectBundle.message("project.load.progress"), canCancelProjectLoading(), project);
|
||||
if (!ok) {
|
||||
closeProject(project, false, false, true);
|
||||
notifyProjectOpenFailed();
|
||||
@@ -449,14 +460,28 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
|
||||
@Override
|
||||
public Project loadAndOpenProject(@NotNull final String filePath) throws IOException {
|
||||
final Project project = convertAndLoadProject(filePath);
|
||||
Project project = myProgressManager.run(new Task.WithResult<Project, IOException>(null, ProjectBundle.message("project.load.progress"), true) {
|
||||
@Override
|
||||
protected Project compute(@NotNull ProgressIndicator indicator) throws IOException {
|
||||
final Project project = convertAndLoadProject(filePath);
|
||||
if (project == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
openProject(project);
|
||||
}
|
||||
});
|
||||
return project;
|
||||
}
|
||||
});
|
||||
if (project == null) {
|
||||
WelcomeFrame.showIfNoProjectOpened();
|
||||
return null;
|
||||
}
|
||||
|
||||
// todo unify this logic with PlatformProjectOpenProcessor
|
||||
if (!openProject(project)) {
|
||||
if (!project.isOpen()) {
|
||||
WelcomeFrame.showIfNoProjectOpened();
|
||||
ApplicationManager.getApplication().runWriteAction(new Runnable() {
|
||||
@Override
|
||||
@@ -465,7 +490,6 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return project;
|
||||
}
|
||||
|
||||
@@ -514,6 +538,10 @@ public class ProjectManagerImpl extends ProjectManagerEx implements Disposable {
|
||||
@Nullable
|
||||
private Project loadProjectWithProgress(@NotNull final String filePath) {
|
||||
final ProjectImpl project = createProject(null, toCanonicalName(filePath), false);
|
||||
if (myProgressManager.getProgressIndicator() != null) {
|
||||
initProject(project, null);
|
||||
return project;
|
||||
}
|
||||
try {
|
||||
myProgressManager.runProcessWithProgressSynchronously(new ThrowableComputable<Object, RuntimeException>() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user