From 5d4aede23e125997dcf49935db4c66cc7a5aa4d8 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Fri, 24 Oct 2008 19:01:15 +0000 Subject: [PATCH] [232311] - [launch] Progress monitor is ignored in the launch --- .../launching/FinalLaunchSequence.java | 5 +++-- .../launching/GdbLaunchDelegate.java | 18 ++++++++++++++---- .../launching/ServicesLaunchSequence.java | 5 +++-- .../gdb/launching/TestLaunchDelegate.java | 7 +++++-- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java index 4e49d2d69ce..592d2772cd4 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/FinalLaunchSequence.java @@ -17,6 +17,7 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.dd.dsf.concurrent.DataRequestMonitor; @@ -487,8 +488,8 @@ public class FinalLaunchSequence extends Sequence { DsfServicesTracker fTracker; - public FinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach) { - super(executor); + public FinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach, IProgressMonitor pm) { + super(executor, pm, "Configuring GDB", "Aborting configuring GDB", null); fLaunch = launch; fSessionType = sessionType; fAttach = attach; diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java index c44642c2d96..1178c570e62 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/GdbLaunchDelegate.java @@ -28,6 +28,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.dd.dsf.concurrent.DsfExecutor; import org.eclipse.dd.dsf.concurrent.Sequence; import org.eclipse.dd.dsf.concurrent.ThreadSafe; @@ -134,8 +135,10 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate launch.setServiceFactory(newServiceFactory(gdbVersion)); // Create and invoke the launch sequence to create the debug control and services + IProgressMonitor subMon1 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); final ServicesLaunchSequence servicesLaunchSequence = - new ServicesLaunchSequence(launch.getSession(), launch); + new ServicesLaunchSequence(launch.getSession(), launch, subMon1); + launch.getSession().getExecutor().execute(servicesLaunchSequence); try { servicesLaunchSequence.get(); @@ -145,6 +148,9 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, DebugException.REQUEST_FAILED, "Error in services launch sequence", e1.getCause())); //$NON-NLS-1$ } + if (monitor.isCanceled()) + return; + // The initializeControl method should be called after the ICommandControlService // be initialized in the ServicesLaunchSequence above. This is because it is that // service that will trigger the launch cleanup (if we need it during this launch) @@ -155,9 +161,13 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate launch.addCLIProcess("gdb"); //$NON-NLS-1$ launch.addInferiorProcess(exePath.lastSegment()); + monitor.worked(1); + // Create and invoke the final launch sequence to setup GDB + IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); final Sequence finalLaunchSequence = - getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach); + getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach, subMon2); + launch.getSession().getExecutor().execute(finalLaunchSequence); try { finalLaunchSequence.get(); @@ -172,8 +182,8 @@ public class GdbLaunchDelegate extends LaunchConfigurationDelegate * This method can be overridden by subclasses to allow to change the final launch sequence without * having to change the entire GdbLaunchDelegate */ - protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach) { - return new FinalLaunchSequence(executor, launch, type, attach); + protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach, IProgressMonitor pm) { + return new FinalLaunchSequence(executor, launch, type, attach, pm); } diff --git a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/ServicesLaunchSequence.java b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/ServicesLaunchSequence.java index 1a145848d97..7e576e292c4 100644 --- a/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/ServicesLaunchSequence.java +++ b/plugins/org.eclipse.dd.gdb/src/org/eclipse/dd/gdb/internal/provisional/launching/ServicesLaunchSequence.java @@ -12,6 +12,7 @@ package org.eclipse.dd.gdb.internal.provisional.launching; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.dd.dsf.concurrent.RequestMonitor; import org.eclipse.dd.dsf.concurrent.Sequence; import org.eclipse.dd.dsf.debug.service.IBreakpoints; @@ -118,8 +119,8 @@ public class ServicesLaunchSequence extends Sequence { IMIProcesses fProcService; CSourceLookup fSourceLookup; - public ServicesLaunchSequence(DsfSession session, GdbLaunch launch) { - super(session.getExecutor()); + public ServicesLaunchSequence(DsfSession session, GdbLaunch launch, IProgressMonitor pm) { + super(session.getExecutor(), pm, "Initializing debugger services", "Aborting debugger services initialization", null); fSession = session; fLaunch = launch; } diff --git a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/launching/TestLaunchDelegate.java b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/launching/TestLaunchDelegate.java index 5bd9a47108f..a702fba0016 100644 --- a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/launching/TestLaunchDelegate.java +++ b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/launching/TestLaunchDelegate.java @@ -22,6 +22,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.dd.dsf.concurrent.ThreadSafe; import org.eclipse.dd.gdb.internal.provisional.launching.FinalLaunchSequence; import org.eclipse.dd.gdb.internal.provisional.launching.GdbLaunch; @@ -84,8 +85,9 @@ public class TestLaunchDelegate extends LaunchConfigurationDelegate launch.setServiceFactory(new GdbDebugServicesFactory(LaunchUtils.getGDBVersion(config))); + IProgressMonitor subMon1 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); final ServicesLaunchSequence servicesLaunchSequence = - new ServicesLaunchSequence(launch.getSession(), launch); + new ServicesLaunchSequence(launch.getSession(), launch, subMon1); launch.getSession().getExecutor().execute(servicesLaunchSequence); try { servicesLaunchSequence.get(); @@ -102,8 +104,9 @@ public class TestLaunchDelegate extends LaunchConfigurationDelegate launch.addInferiorProcess(exePath.lastSegment()); // Create and invoke the final launch sequence to setup GDB + IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); final FinalLaunchSequence finalLaunchSequence = - new FinalLaunchSequence(launch.getSession().getExecutor(), launch, SessionType.LOCAL, false); + new FinalLaunchSequence(launch.getSession().getExecutor(), launch, SessionType.LOCAL, false, subMon2); launch.getSession().getExecutor().execute(finalLaunchSequence); try { finalLaunchSequence.get();