Bug 573355 - Avoid double refresh after IDE crash
This change requires resources bundle patch
https://git.eclipse.org/r/c/platform/eclipse.platform.resources/+/180203
Change-Id: Id48c7e785676fbbbdf03e271c1e3cb37722c1e06
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.ui/+/180204
Tested-by: Platform Bot <platform-bot@eclipse.org>
diff --git a/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
index 29033fe..5f20224 100644
--- a/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
Bundle-ClassPath: .
Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.16.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.15.0,4.0.0)",
org.eclipse.ui;bundle-version="[3.114.0,4.0.0)",
org.eclipse.ui.navigator.resources;bundle-version="[3.4.0,4.0.0)",
org.eclipse.core.net;bundle-version="[1.0.0,2.0.0)",
diff --git a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
index ef88df5..e5e5d05 100644
--- a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
+++ b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEWorkbenchAdvisor.java
@@ -438,17 +438,29 @@
}
}
- final IContainer root = ResourcesPlugin.getWorkspace().getRoot();
- Job job = new WorkspaceJob(IDEWorkbenchMessages.Workspace_refreshing) {
- @Override
- public IStatus runInWorkspace(IProgressMonitor monitor)
- throws CoreException {
- root.refreshLocal(IResource.DEPTH_INFINITE, monitor);
- return Status.OK_STATUS;
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ final IContainer root = workspace.getRoot();
+
+ // We should try to use RefreshManager which avoids multiple refresh requests
+ // for same objects
+ if (workspace instanceof Workspace) {
+ Workspace wsp = (Workspace) workspace;
+ if (!wsp.isCrashed()) {
+ // Only refresh if no crash happened before: the workspace itself
+ // triggers refresh in that case, see Workspace.open()
+ wsp.getRefreshManager().refresh(root);
}
- };
- job.setRule(root);
- job.schedule();
+ } else {
+ Job job = new WorkspaceJob(IDEWorkbenchMessages.Workspace_refreshing) {
+ @Override
+ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+ root.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ return Status.OK_STATUS;
+ }
+ };
+ job.setRule(root);
+ job.schedule();
+ }
}
protected static class CancelableProgressMonitorWrapper extends