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
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ProjectLocationSelectionDialog;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog;
/**
 * Implementation class to perform the actual copying of project resources from the clipboard 
 * when paste action is invoked.
 * <p>
 * This class may be instantiated; it is not intended to be subclassed.
 * </p>
 */
public class CopyProjectOperation {
    /**
     * Status containing the errors detected when running the operation or
     * <code>null</code> if no errors detected.
     */
    private MultiStatus errorStatus;
    /**
     * The parent shell used to show any dialogs.
     */
    private Shell parentShell;
    /** 
     * Create a new operation initialized with a shell. 
     * 
     * @param shell parent shell for error dialogs
     */
    public CopyProjectOperation(Shell shell) {