diff options
| author | Stefan Xenos | 2015-09-15 15:55:22 +0000 |
|---|---|---|
| committer | Stefan Xenos | 2015-09-15 16:47:24 +0000 |
| commit | e1fb21c161e6f9188ad46cb4aebf2c4a6984f90c (patch) | |
| tree | b71d1c26d1556b6e3737a90f63045f0a4a42dfc2 | |
| parent | 9030b39b10c8df7a53aacb45437b92be765b8566 (diff) | |
| download | eclipse.platform.ui-e1fb21c161e6f9188ad46cb4aebf2c4a6984f90c.tar.gz eclipse.platform.ui-e1fb21c161e6f9188ad46cb4aebf2c4a6984f90c.tar.xz eclipse.platform.ui-e1fb21c161e6f9188ad46cb4aebf2c4a6984f90c.zip | |
Bug 475785 - Remove usage of SubProgressMonitor in org.eclipse.ui.actions
Change-Id: Ib9af592aed4a204d52ab8cb2685d3a408e26905d
Signed-off-by: Stefan Xenos <sxenos@gmail.com>
9 files changed, 147 insertions, 185 deletions
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java index 2c9fa27a256..18a97b182fd 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java @@ -30,7 +30,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.preference.IPreferenceStore; @@ -278,12 +278,13 @@ public class BuildAction extends WorkspaceAction { @Override public IStatus runInWorkspace(IProgressMonitor monitor) { IStatus status = null; - monitor.beginTask("", 10000); //$NON-NLS-1$ - monitor.setTaskName(getOperationMessage()); + SubMonitor progress = SubMonitor.convert(monitor, 10000); + progress.setTaskName(getOperationMessage()); try { // Backwards compatibility: check shouldPerformResourcePruning(). // Previously if this returned true, the full reference graph is built, otherwise just build the selected configurations - ResourcesPlugin.getWorkspace().build(configs, kind, shouldPerformResourcePruning(), new SubProgressMonitor(monitor, 10000)); + ResourcesPlugin.getWorkspace().build(configs, kind, shouldPerformResourcePruning(), + progress.newChild(10000)); } catch (CoreException e) { status = e.getStatus(); } diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java index 3972803ca8b..ca6e2bb26c5 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java @@ -44,7 +44,7 @@ import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IInputValidator; @@ -424,7 +424,7 @@ public class CopyFilesAndFoldersOperation { * the resources to copy * @param destination * destination to which resources will be copied - * @param subMonitor + * @param monitor * a progress monitor for showing progress and for cancelation * * @deprecated As of 3.3, the work is performed in the undoable operation @@ -432,15 +432,12 @@ public class CopyFilesAndFoldersOperation { * {@link #getUndoableCopyOrMoveOperation(IResource[], IPath)} */ @Deprecated - protected void copy(IResource[] resources, IPath destination, - IProgressMonitor subMonitor) throws CoreException { - - subMonitor - .beginTask( - IDEWorkbenchMessages.CopyFilesAndFoldersOperation_CopyResourcesTask, - resources.length); + protected void copy(IResource[] resources, IPath destination, IProgressMonitor monitor) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(monitor, + IDEWorkbenchMessages.CopyFilesAndFoldersOperation_CopyResourcesTask, resources.length); for (int i = 0; i < resources.length; i++) { + SubMonitor iterationProgress = subMonitor.newChild(1).setWorkRemaining(100); IResource source = resources[i]; IPath destinationPath = destination.append(source.getName()); IWorkspace workspace = source.getWorkspace(); @@ -452,55 +449,45 @@ public class CopyFilesAndFoldersOperation { // children of the folder. if (homogenousResources(source, existing)) { IResource[] children = ((IContainer) source).members(); - copy(children, destinationPath, new SubProgressMonitor( - subMonitor, 1)); + copy(children, destinationPath, iterationProgress.newChild(100)); } else { // delete the destination folder, copying a linked folder // over an unlinked one or vice versa. Fixes bug 28772. - delete(existing, new SubProgressMonitor(subMonitor, 0)); - source.copy(destinationPath, IResource.SHALLOW, - new SubProgressMonitor(subMonitor, 1)); + delete(existing, iterationProgress.newChild(10)); + source.copy(destinationPath, IResource.SHALLOW, iterationProgress.newChild(90)); } } else { if (existing != null) { if (homogenousResources(source, existing)) { - copyExisting(source, existing, new SubProgressMonitor( - subMonitor, 1)); + copyExisting(source, existing, iterationProgress.newChild(100)); } else { - if (existing != null) { - // Copying a linked resource over unlinked or vice - // versa. - // Can't use setContents here. Fixes bug 28772. - delete(existing, new SubProgressMonitor(subMonitor, 0)); - } - - if ((createLinks || createVirtualFoldersAndLinks) - && (source.isLinked() == false) - && (source.isVirtual() == false)) { - if (source.getType() == IResource.FILE) { - IFile file = workspaceRoot.getFile(destinationPath); - file.createLink(createRelativePath(source.getLocationURI(), file), 0, - new SubProgressMonitor(subMonitor, 1)); - } else { - IFolder folder = workspaceRoot - .getFolder(destinationPath); - if (createVirtualFoldersAndLinks) { - folder.create(IResource.VIRTUAL, true, - new SubProgressMonitor(subMonitor, - 1)); - IResource[] members = ((IContainer) source) - .members(); - if (members.length > 0) - copy(members, destinationPath, - new SubProgressMonitor(subMonitor, - 1)); - } else - folder.createLink(createRelativePath(source.getLocationURI(), folder), 0, - new SubProgressMonitor(subMonitor, 1)); + if (existing != null) { + // Copying a linked resource over unlinked or vice + // versa. + // Can't use setContents here. Fixes bug 28772. + delete(existing, iterationProgress.newChild(10)); } - } else - source.copy(destinationPath, IResource.SHALLOW, - new SubProgressMonitor(subMonitor, 1)); + iterationProgress.setWorkRemaining(100); + + if ((createLinks || createVirtualFoldersAndLinks) && (source.isLinked() == false) + && (source.isVirtual() == false)) { + if (source.getType() == IResource.FILE) { + IFile file = workspaceRoot.getFile(destinationPath); + file.createLink(createRelativePath(source.getLocationURI(), file), 0, + iterationProgress.newChild(100)); + } else { + IFolder folder = workspaceRoot.getFolder(destinationPath); + if (createVirtualFoldersAndLinks) { + folder.create(IResource.VIRTUAL, true, subMonitor.newChild(1)); + IResource[] members = ((IContainer) source).members(); + if (members.length > 0) + copy(members, destinationPath, iterationProgress.newChild(100)); + } else + folder.createLink(createRelativePath(source.getLocationURI(), folder), 0, + iterationProgress.newChild(100)); + } + } else + source.copy(destinationPath, IResource.SHALLOW, iterationProgress.newChild(100)); } if (subMonitor.isCanceled()) { @@ -544,17 +531,15 @@ public class CopyFilesAndFoldersOperation { * @throws CoreException * setContents failed */ - private void copyExisting(IResource source, IResource existing, - IProgressMonitor subMonitor) throws CoreException { + private void copyExisting(IResource source, IResource existing, IProgressMonitor monitor) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(monitor, 1); IFile existingFile = getFile(existing); if (existingFile != null) { IFile sourceFile = getFile(source); if (sourceFile != null) { - existingFile.setContents(sourceFile.getContents(), - IResource.KEEP_HISTORY, new SubProgressMonitor( - subMonitor, 0)); + existingFile.setContents(sourceFile.getContents(), IResource.KEEP_HISTORY, subMonitor.newChild(1)); } } } @@ -1802,16 +1787,15 @@ public class CopyFilesAndFoldersOperation { return (IResource[]) copyItems.toArray(new IResource[copyItems.size()]); } - private void copyResources(final IResource[] resources, - final IPath destinationPath, final IResource[][] copiedResources, - IProgressMonitor monitor) { + private void copyResources(final IResource[] resources, final IPath destinationPath, + final IResource[][] copiedResources, IProgressMonitor mon) { IResource[] copyResources = resources; // Fix for bug 31116. Do not provide a task name when // creating the task. - monitor.beginTask("", 100); //$NON-NLS-1$ - monitor.setTaskName(getOperationTitle()); - monitor.worked(10); // show some initial progress + SubMonitor subMonitor = SubMonitor.convert(mon, 100); + subMonitor.setTaskName(getOperationTitle()); + subMonitor.worked(10); // show some initial progress // Checks only required if this is an exisiting container path. boolean copyWithAutoRename = false; @@ -1845,13 +1829,11 @@ public class CopyFilesAndFoldersOperation { errorStatus = null; if (copyResources.length > 0) { if (copyWithAutoRename) { - performCopyWithAutoRename(copyResources, destinationPath, - new SubProgressMonitor(monitor, 90)); + performCopyWithAutoRename(copyResources, destinationPath, subMonitor.newChild(90)); } else { - performCopy(copyResources, destinationPath, new SubProgressMonitor(monitor, 90)); + performCopy(copyResources, destinationPath, subMonitor.newChild(90)); } } - monitor.done(); copiedResources[0] = copyResources; } diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java index 5eeda86021a..4acbaa2b804 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java @@ -19,7 +19,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.ErrorDialog; @@ -172,10 +172,9 @@ public class GlobalBuildAction extends Action implements Job buildJob = new Job(IDEWorkbenchMessages.GlobalBuildAction_jobTitle) { @Override protected IStatus run(IProgressMonitor monitor) { - monitor.beginTask(getOperationMessage(), 100); + SubMonitor subMonitor = SubMonitor.convert(monitor, getOperationMessage(), 100); try { - ResourcesPlugin.getWorkspace().build(buildType, - new SubProgressMonitor(monitor, 100)); + ResourcesPlugin.getWorkspace().build(buildType, subMonitor.newChild(100)); } catch (CoreException e) { return e.getStatus(); } finally { diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java index e79be2f8d6c..4371b568ef6 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java @@ -19,7 +19,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.ide.undo.AbstractWorkspaceOperation; @@ -67,7 +67,7 @@ public class MoveFilesAndFoldersOperation extends CopyFilesAndFoldersOperation { * the resources to move * @param destination * destination to which resources will be moved - * @param subMonitor + * @param monitor * a progress monitor for showing progress and for cancelation * * @deprecated As of 3.3, the work is performed in the undoable operation @@ -76,9 +76,10 @@ public class MoveFilesAndFoldersOperation extends CopyFilesAndFoldersOperation { */ @Deprecated @Override - protected void copy(IResource[] resources, IPath destination, - IProgressMonitor subMonitor) throws CoreException { + protected void copy(IResource[] resources, IPath destination, IProgressMonitor monitor) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(monitor, resources.length); for (int i = 0; i < resources.length; i++) { + SubMonitor iterationMonitor = subMonitor.newChild(1).setWorkRemaining(100); IResource source = resources[i]; IPath destinationPath = destination.append(source.getName()); IWorkspace workspace = source.getWorkspace(); @@ -89,36 +90,32 @@ public class MoveFilesAndFoldersOperation extends CopyFilesAndFoldersOperation { // move the children of the folder. if (homogenousResources(source, existing)) { IResource[] children = ((IContainer) source).members(); - copy(children, destinationPath, subMonitor); + copy(children, destinationPath, iterationMonitor.newChild(100)); delete(source, subMonitor); } else { // delete the destination folder, moving a linked folder // over an unlinked one or vice versa. Fixes bug 28772. - delete(existing, new SubProgressMonitor(subMonitor, 0)); - source.move(destinationPath, IResource.SHALLOW - | IResource.KEEP_HISTORY, new SubProgressMonitor( - subMonitor, 0)); + delete(existing, iterationMonitor.newChild(50)); + source.move(destinationPath, IResource.SHALLOW | IResource.KEEP_HISTORY, + iterationMonitor.newChild(50)); } } else { // if we're merging folders, we could be overwriting an existing // file if (existing != null) { if (homogenousResources(source, existing)) { - moveExisting(source, existing, subMonitor); + moveExisting(source, existing, iterationMonitor.newChild(100)); } else { // Moving a linked resource over unlinked or vice versa. // Can't use setContents here. Fixes bug 28772. - delete(existing, new SubProgressMonitor(subMonitor, 0)); - source.move(destinationPath, IResource.SHALLOW - | IResource.KEEP_HISTORY, - new SubProgressMonitor(subMonitor, 0)); + delete(existing, iterationMonitor.newChild(50)); + source.move(destinationPath, IResource.SHALLOW | IResource.KEEP_HISTORY, + iterationMonitor.newChild(50)); } } else { - source.move(destinationPath, IResource.SHALLOW - | IResource.KEEP_HISTORY, new SubProgressMonitor( - subMonitor, 0)); + source.move(destinationPath, IResource.SHALLOW | IResource.KEEP_HISTORY, + iterationMonitor.newChild(100)); } - subMonitor.worked(1); if (subMonitor.isCanceled()) { throw new OperationCanceledException(); } @@ -191,25 +188,23 @@ public class MoveFilesAndFoldersOperation extends CopyFilesAndFoldersOperation { * source file to move * @param existing * existing file to set the source content in - * @param subMonitor + * @param monitor * a progress monitor for showing progress and for cancelation * @throws CoreException * setContents failed * @deprecated As of 3.3, this method is not called. */ @Deprecated - private void moveExisting(IResource source, IResource existing, - IProgressMonitor subMonitor) throws CoreException { + private void moveExisting(IResource source, IResource existing, IProgressMonitor monitor) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(monitor, 2); IFile existingFile = getFile(existing); if (existingFile != null) { IFile sourceFile = getFile(source); if (sourceFile != null) { - existingFile.setContents(sourceFile.getContents(), - IResource.KEEP_HISTORY, new SubProgressMonitor( - subMonitor, 0)); - delete(sourceFile, subMonitor); + existingFile.setContents(sourceFile.getContents(), IResource.KEEP_HISTORY, subMonitor.newChild(1)); + delete(sourceFile, subMonitor.newChild(1)); } } } diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java index 05362217593..7c8d9cc7475 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java @@ -27,7 +27,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; @@ -215,7 +215,7 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan * Opens the selected projects, and all related projects, in the background. */ private void runOpenWithReferences() { - final List resources = new ArrayList(getActionResources()); + final List<IResource> resources = new ArrayList<>(getActionResources()); Job job = new WorkspaceJob(removeMnemonics(getText())) { private boolean openProjectReferences = true; private boolean hasPrompted = false; @@ -223,11 +223,9 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan /** * Opens a project along with all projects it references */ - private void doOpenWithReferences(IProject project, IProgressMonitor monitor) throws CoreException { - if (!project.exists() || project.isOpen()) { - return; - } - project.open(new SubProgressMonitor(monitor, 1000)); + private void doOpenWithReferences(IProject project, IProgressMonitor mon) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(mon, openProjectReferences ? 2 : 1); + project.open(subMonitor.newChild(1)); final IProject[] references = project.getReferencedProjects(); if (!hasPrompted) { openProjectReferences = false; @@ -252,23 +250,28 @@ public class OpenResourceAction extends WorkspaceAction implements IResourceChan } } if (openProjectReferences) { + SubMonitor loopMonitor = subMonitor.newChild(1).setWorkRemaining(references.length); for (int i = 0; i < references.length; i++) { - doOpenWithReferences(references[i], monitor); + doOpenWithReferences(references[i], loopMonitor.newChild(1)); } } } @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { - try { - // at most we can only open all projects currently closed - monitor.beginTask("", countClosedProjects() * 1000); //$NON-NLS-1$ - monitor.setTaskName(getOperationMessage()); - for (Iterator it = resources.iterator(); it.hasNext();) { - doOpenWithReferences((IProject) it.next(), monitor); + SubMonitor subMonitor = SubMonitor.convert(monitor, countClosedProjects()); + // at most we can only open all projects currently closed + subMonitor.setTaskName(getOperationMessage()); + for (IResource resource : resources) { + if (!(resource instanceof IProject)) { + continue; + } + + IProject project = (IProject) resource; + if (!project.exists() || project.isOpen()) { + continue; } - } finally { - monitor.done(); + doOpenWithReferences(project, subMonitor.newChild(1)); } return Status.OK_STATUS; } 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 54f1208def9..eacad7c4e57 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 @@ -30,7 +30,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.jface.dialogs.IDialogConstants; @@ -221,28 +221,24 @@ public class RefreshAction extends WorkspaceAction { } return new WorkspaceModifyOperation(rule) { @Override - public void execute(IProgressMonitor monitor) { + public void execute(IProgressMonitor mon) { + SubMonitor subMonitor = SubMonitor.convert(mon, resources.size()); MultiStatus errors = null; - monitor.beginTask("", resources.size() * 1000); //$NON-NLS-1$ - monitor.setTaskName(getOperationMessage()); + subMonitor.setTaskName(getOperationMessage()); Iterator<? extends IResource> resourcesEnum = resources.iterator(); - try { - while (resourcesEnum.hasNext()) { - try { - IResource resource = resourcesEnum.next(); - refreshResource(resource, new SubProgressMonitor(monitor, 1000)); - } catch (CoreException e) { - errors = recordError(errors, e); - } - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } + while (resourcesEnum.hasNext()) { + try { + IResource resource = resourcesEnum.next(); + refreshResource(resource, subMonitor.newChild(1)); + } catch (CoreException e) { + errors = recordError(errors, e); } - if (errors != null) { - errorStatus[0] = errors; + if (subMonitor.isCanceled()) { + throw new OperationCanceledException(); } - } finally { - monitor.done(); + } + if (errors != null) { + errorStatus[0] = errors; } } }; diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java index 006319878f0..fb2c590b045 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java @@ -26,7 +26,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.ErrorDialog; @@ -140,38 +140,29 @@ public abstract class WorkspaceAction extends SelectionListenerAction { * a progress monitor * @return The result of the execution */ - final IStatus execute(List<? extends IResource> resources, IProgressMonitor monitor) { + final IStatus execute(List<? extends IResource> resources, IProgressMonitor mon) { MultiStatus errors = null; // 1FTIMQN: ITPCORE:WIN - clients required to do too much iteration work if (shouldPerformResourcePruning()) { resources = pruneResources(resources); } - // 1FV0B3Y: ITPUI:ALL - sub progress monitors granularity issues - monitor.beginTask("", resources.size() * 1000); //$NON-NLS-1$ + SubMonitor subMonitor = SubMonitor.convert(mon, resources.size()); // Fix for bug 31768 - Don't provide a task name in beginTask // as it will be appended to each subTask message. Need to // call setTaskName as its the only was to assure the task name is // set in the monitor (see bug 31824) - monitor.setTaskName(getOperationMessage()); - Iterator<? extends IResource> resourcesEnum = resources.iterator(); - try { - while (resourcesEnum.hasNext()) { - IResource resource = resourcesEnum.next(); - try { - // 1FV0B3Y: ITPUI:ALL - sub progress monitors granularity - // issues - invokeOperation(resource, new SubProgressMonitor(monitor, 1000)); - } catch (CoreException e) { - errors = recordError(errors, e); - } - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } + subMonitor.setTaskName(getOperationMessage()); + for (IResource resource : resources) { + try { + invokeOperation(resource, subMonitor.newChild(1)); + } catch (CoreException e) { + errors = recordError(errors, e); + } + if (subMonitor.isCanceled()) { + throw new OperationCanceledException(); } - return errors == null ? Status.OK_STATUS : errors; - } finally { - monitor.done(); } + return errors == null ? Status.OK_STATUS : errors; } /** diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java index 29afc51711a..889c5433779 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java @@ -22,7 +22,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; @@ -113,21 +113,16 @@ public class ContainerGenerator { */ private IProject createProject(IProject projectHandle, IProgressMonitor monitor) throws CoreException { - try { - monitor.beginTask("", 2000);//$NON-NLS-1$ - - projectHandle.create(new SubProgressMonitor(monitor, 1000)); - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } + SubMonitor subMonitor = SubMonitor.convert(monitor, 2); + projectHandle.create(subMonitor.newChild(1)); + if (monitor.isCanceled()) { + throw new OperationCanceledException(); + } - projectHandle.open(new SubProgressMonitor(monitor, 1000)); - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } - } finally { - monitor.done(); - } + projectHandle.open(subMonitor.newChild(1)); + if (monitor.isCanceled()) { + throw new OperationCanceledException(); + } return projectHandle; } @@ -162,9 +157,8 @@ public class ContainerGenerator { public IContainer generateContainer(IProgressMonitor monitor) throws CoreException { IDEWorkbenchPlugin.getPluginWorkspace().run(monitor1 -> { - monitor1 - .beginTask( - IDEWorkbenchMessages.ContainerGenerator_progressMessage, 1000 * containerFullPath.segmentCount()); + SubMonitor subMonitor = SubMonitor.convert(monitor1, + IDEWorkbenchMessages.ContainerGenerator_progressMessage, containerFullPath.segmentCount()); if (container != null) { return; } @@ -187,18 +181,16 @@ public class ContainerGenerator { throw new CoreException(new Status(IStatus.ERROR, IDEWorkbenchPlugin.IDE_WORKBENCH, 1, msg, null)); } container = (IContainer) resource; - monitor1.worked(1000); + subMonitor.worked(1); } else { if (i == 0) { IProject projectHandle = createProjectHandle(root, currentSegment); - container = createProject(projectHandle, - new SubProgressMonitor(monitor1, 1000)); + container = createProject(projectHandle, subMonitor.newChild(1)); } else { IFolder folderHandle = createFolderHandle( container, currentSegment); - container = createFolder(folderHandle, - new SubProgressMonitor(monitor1, 1000)); + container = createFolder(folderHandle, subMonitor.newChild(1)); } } } diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java index fe601583021..495e7e91827 100644 --- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java +++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java @@ -37,7 +37,7 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Preferences; -import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; @@ -299,14 +299,15 @@ public class WizardNewFolderMainPage extends WizardPage implements Listener { @Deprecated protected void createFolder(IFolder folderHandle, IProgressMonitor monitor) throws CoreException { + SubMonitor subMonitor = SubMonitor.convert(monitor, 100); + try { // Create the folder resource in the workspace // Update: Recursive to create any folders which do not exist // already if (!folderHandle.exists()) { if (linkTargetPath != null) { - folderHandle.createLink(linkTargetPath, - IResource.ALLOW_MISSING_LOCAL, monitor); + folderHandle.createLink(linkTargetPath, IResource.ALLOW_MISSING_LOCAL, subMonitor.newChild(100)); } else { IPath path = folderHandle.getFullPath(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace() @@ -315,6 +316,8 @@ public class WizardNewFolderMainPage extends WizardPage implements Listener { if (numSegments > 2 && !root.getFolder(path.removeLastSegments(1)) .exists()) { + + SubMonitor loopProgress = subMonitor.newChild(90).setWorkRemaining(numSegments - 3); // If the direct parent of the path doesn't exist, try // to create the // necessary directories. @@ -322,25 +325,25 @@ public class WizardNewFolderMainPage extends WizardPage implements Listener { IFolder folder = root.getFolder(path .removeLastSegments(i)); if (!folder.exists()) { - folder.create(false, true, monitor); + folder.create(false, true, loopProgress.newChild(1)); } } } - folderHandle.create(false, true, monitor); + subMonitor.setWorkRemaining(10); + folderHandle.create(false, true, subMonitor.newChild(10)); } } } catch (CoreException e) { // If the folder already existed locally, just refresh to get // contents if (e.getStatus().getCode() == IResourceStatus.PATH_OCCUPIED) { - folderHandle.refreshLocal(IResource.DEPTH_INFINITE, - new SubProgressMonitor(monitor, 500)); + folderHandle.refreshLocal(IResource.DEPTH_INFINITE, subMonitor.setWorkRemaining(1).newChild(1)); } else { throw e; } } - if (monitor.isCanceled()) { + if (subMonitor.isCanceled()) { throw new OperationCanceledException(); } } |
