Bug 70046 No progress when copying project
Build: 3.0 final 1) Create a large project (I imported org.eclipse.jdt.ui as a source plugin) 2) In the Navigator view, select the project, and pick "Copy" 3) Right click again and select paste -> The copy operation occurs, but there is never any progress message, and the progress bar is stuck at 50% for the entire duration. Looking at CopyProjectOperation.performCopyOperation. It does the following: 1) beginTask on the monitor with 100 units of work 2) Create the project description 3) Report 50 units of progress 4) Call IProject.copy, passing in the 50% complete monitor 5) Report another 50 units of progress Problems: - Realistically creating the description represents a negligible amount of work, and shouldn't account for any progress, let alone 50%. - You should never pass a half used monitor to an API call. It should instead pass a new SubProgressMonitor
bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectOperation.java
/**
     * Copies the project to the new values.
     *
     * @param project the project to copy
     * @param projectName the name of the copy
     * @param newLocation IPath
     * @return <code>true</code> if the copy operation completed, and 
     *   <code>false</code> if it was abandoned part way
     */
    private boolean performProjectCopy(final IProject project,
            final String projectName, final IPath newLocation) {
        WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
            public void execute(IProgressMonitor monitor) {
                monitor.beginTask(IDEWorkbenchMessages
                        .getString("CopyProjectOperation.progressTitle"), 100); 
                try {
                    if (monitor.isCanceled())
                        throw new OperationCanceledException();
                    
                    IProjectDescription newDescription = createProjectDescription(
                            project, projectName, newLocation);
                    monitor.worked(50);
                    project.copy(newDescription, IResource.SHALLOW
                            | IResource.FORCE, monitor);
                    monitor.worked(50);
                } catch (CoreException e) {
                    recordError(e); 
                } finally {
                    monitor.done();
                }