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
private IProjectDescription createProjectDescription(IProject project,
            String projectName, IPath rootLocation) throws CoreException {
        
        IProjectDescription newDescription = project.getDescription();
        newDescription.setName(projectName);
        
        if (rootLocation.equals(Platform.getLocation()))
            newDescription.setLocation(null);
        else
            newDescription.setLocation(rootLocation);
        return newDescription;
    }
    /**
     * Records the core exception to be displayed to the user
     * once the action is finished.
     *
     * @param exception a <code>CoreException</code>
     */
    private void recordError(CoreException error) {
        if (errorStatus == null)
            errorStatus = new MultiStatus(
                    PlatformUI.PLUGIN_ID,
                    IStatus.ERROR,
                    IDEWorkbenchMessages
                            .getString("CopyProjectOperation.copyFailedMessage"), 
                    error);
        errorStatus.merge(error.getStatus());
    }
}