diff --git a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF index c115a47b5f6..0d2916a41cb 100644 --- a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Plugin.name Bundle-SymbolicName: org.eclipse.ui.ide; singleton:=true -Bundle-Version: 3.22.800.qualifier +Bundle-Version: 3.22.900.qualifier Bundle-Activator: org.eclipse.ui.internal.ide.IDEWorkbenchPlugin Bundle-ActivationPolicy: lazy Bundle-Vendor: %Plugin.providerName diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java index 94707e8c36d..0d11b04dfaf 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java @@ -18,14 +18,12 @@ import java.lang.reflect.InvocationTargetException; import java.net.URI; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import org.eclipse.core.filesystem.IFileInfo; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.WorkspaceJob; @@ -49,6 +47,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; +import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; import org.eclipse.ui.internal.ide.IIDEHelpContextIds; import org.eclipse.ui.internal.ide.StatusUtil; import org.eclipse.ui.internal.ide.dialogs.IDEResourceInfoUtils; @@ -217,36 +216,44 @@ final public void refreshAll() { @Override final protected IRunnableWithProgress createOperation(final IStatus[] errorStatus) { - ISchedulingRule rule = null; - IResourceRuleFactory factory = ResourcesPlugin.getWorkspace().getRuleFactory(); - List actionResources = new ArrayList<>(getActionResources()); if (shouldPerformResourcePruning()) { actionResources = pruneResources(actionResources); } final List resources = actionResources; - Iterator res = resources.iterator(); - while (res.hasNext()) { - rule = MultiRule.combine(rule, factory.refreshRule(res.next())); + ISchedulingRule rule = null; + for (IResource resource : resources) { + ISchedulingRule newRule = null; + if (resource.getType() == IResource.ROOT) { + newRule = resource; + } else { + newRule = resource.getProject(); + } + rule = MultiRule.combine(rule, newRule); } + return new WorkspaceModifyOperation(rule) { @Override public void execute(IProgressMonitor mon) { SubMonitor subMonitor = SubMonitor.convert(mon, resources.size()); - MultiStatus errors = null; subMonitor.setTaskName(getOperationMessage()); - Iterator resourcesEnum = resources.iterator(); - while (resourcesEnum.hasNext()) { + List errors = new ArrayList<>(); + for (IResource resource : resources) { try { - IResource resource = resourcesEnum.next(); refreshResource(resource, subMonitor.split(1)); } catch (CoreException e) { - errors = recordError(errors, e); + errors.add(e.getStatus()); } } - if (errors != null) { - errorStatus[0] = errors; + + if (!errors.isEmpty()) { + MultiStatus multiStatus = new MultiStatus(IDEWorkbenchPlugin.IDE_WORKBENCH, IStatus.ERROR, + getProblemsMessage(), null); + for (IStatus s : errors) { + multiStatus.merge(s); + } + errorStatus[0] = multiStatus; } } }; @@ -287,7 +294,7 @@ protected void refreshResource(IResource resource, IProgressMonitor monitor) thr public void run() { final IStatus[] errorStatus = new IStatus[1]; errorStatus[0] = Status.OK_STATUS; - final WorkspaceModifyOperation op = (WorkspaceModifyOperation) createOperation(errorStatus); + final IRunnableWithProgress op = createOperation(errorStatus); WorkspaceJob job = new WorkspaceJob("refresh") { //$NON-NLS-1$ @Override @@ -295,10 +302,9 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { try { op.run(monitor); } catch (InvocationTargetException e) { - String msg = NLS.bind( - IDEWorkbenchMessages.WorkspaceAction_logTitle, getClass() - .getName(), e.getTargetException()); - throw new CoreException(StatusUtil.newStatus(IStatus.ERROR, msg, e.getTargetException())); + String msg = NLS.bind(IDEWorkbenchMessages.WorkspaceAction_logTitle, getClass().getName(), + e.getTargetException()); + return StatusUtil.newStatus(IStatus.ERROR, msg, e.getTargetException()); } catch (InterruptedException e) { return Status.CANCEL_STATUS; } @@ -306,9 +312,8 @@ IDEWorkbenchMessages.WorkspaceAction_logTitle, getClass() } }; - ISchedulingRule rule = op.getRule(); - if (rule != null) { - job.setRule(rule); + if (op instanceof WorkspaceModifyOperation) { + job.setRule(((WorkspaceModifyOperation) op).getRule()); } job.setUser(true); job.schedule(); diff --git a/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF index 484bfaa8e91..c43a4b1f3a2 100644 --- a/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.navigator.resources/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Plugin.name Bundle-SymbolicName: org.eclipse.ui.navigator.resources; singleton:=true -Bundle-Version: 3.9.900.qualifier +Bundle-Version: 3.9.1000.qualifier Bundle-Activator: org.eclipse.ui.internal.navigator.resources.plugin.WorkbenchNavigatorPlugin Bundle-Vendor: %Plugin.providerName Bundle-Localization: plugin diff --git a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java index 28111551293..cf226d13595 100644 --- a/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java +++ b/bundles/org.eclipse.ui.navigator.resources/src/org/eclipse/ui/internal/navigator/resources/actions/ResourceMgmtActionProvider.java @@ -30,9 +30,9 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; @@ -218,7 +218,7 @@ protected void makeActions() { public void run() { final IStatus[] errorStatus = new IStatus[1]; errorStatus[0] = Status.OK_STATUS; - final WorkspaceModifyOperation op = (WorkspaceModifyOperation) createOperation(errorStatus); + final IRunnableWithProgress op = createOperation(errorStatus); WorkspaceJob job = new WorkspaceJob("refresh") { //$NON-NLS-1$ @Override @@ -236,7 +236,7 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { } } catch (InvocationTargetException e) { String msg = NLS.bind(WorkbenchNavigatorMessages.ResourceMgmtActionProvider_logTitle, getClass().getName(), e.getTargetException()); - throw new CoreException(new Status(IStatus.ERROR, NavigatorPlugin.PLUGIN_ID, IStatus.ERROR, msg, e.getTargetException())); + return new Status(IStatus.ERROR, NavigatorPlugin.PLUGIN_ID, IStatus.ERROR, msg, e.getTargetException()); } catch (InterruptedException e) { return Status.CANCEL_STATUS; } @@ -244,9 +244,8 @@ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { } }; - ISchedulingRule rule = op.getRule(); - if (rule != null) { - job.setRule(rule); + if (op instanceof WorkspaceModifyOperation) { + job.setRule(((WorkspaceModifyOperation) op).getRule()); } job.setUser(true); job.schedule();