Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDejan Glozic2002-12-17 03:29:57 +0000
committerDejan Glozic2002-12-17 03:29:57 +0000
commitc99c35f374e516c7f428c9628ade936a6d90676a (patch)
tree5e8533e5e110e727538b7a3291fa158949af4989
parent4dbe19d0d0d883ba04f116aa667140b7a634bb7c (diff)
downloadeclipse.pde.ui-20021217.tar.gz
eclipse.pde.ui-20021217.tar.xz
eclipse.pde.ui-20021217.zip
*** empty log message ***v20021217
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java11
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java116
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java100
-rw-r--r--ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java1
4 files changed, 128 insertions, 100 deletions
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
index f4fe1a1818..32e7f7a880 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPlugin.java
@@ -21,6 +21,7 @@ import org.eclipse.pde.internal.ui.editor.feature.FeatureAdapterFactory;
import org.eclipse.pde.internal.ui.editor.manifest.PluginAdapterFactory;
import org.eclipse.pde.internal.ui.editor.schema.SchemaAdapterFactory;
import org.eclipse.pde.internal.ui.editor.text.ColorManager;
+import org.eclipse.pde.internal.ui.launcher.LaunchListener;
import org.eclipse.pde.internal.ui.util.SWTUtil;
import org.eclipse.pde.internal.ui.view.PluginsViewAdapterFactory;
import org.eclipse.swt.widgets.*;
@@ -36,6 +37,8 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
private ResourceBundle resourceBundle;
// Shared label labelProvider
private PDELabelProvider labelProvider;
+ // Launches listener
+ private LaunchListener launchListener;
private java.util.Hashtable counters;
@@ -173,6 +176,8 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
}
public void shutdown() throws CoreException {
+ if (launchListener!=null)
+ launchListener.shutdown();
super.shutdown();
}
@@ -193,6 +198,12 @@ public class PDEPlugin extends AbstractUIPlugin implements IPDEUIConstants {
return labelProvider;
}
+ public LaunchListener getLaunchesListener() {
+ if (launchListener == null)
+ launchListener = new LaunchListener();
+ return launchListener;
+ }
+
protected void initializeDefaultPreferences(IPreferenceStore store) {
ColorManager.initializeDefaults(store);
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java
new file mode 100644
index 0000000000..c3a728b104
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchListener.java
@@ -0,0 +1,116 @@
+package org.eclipse.pde.internal.ui.launcher;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.debug.core.*;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+
+/**
+ * @author dejan
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class LaunchListener
+ implements ILaunchListener, IDebugEventSetListener {
+ private ArrayList managedLaunches;
+
+ public LaunchListener() {
+ managedLaunches = new ArrayList();
+ }
+
+ public void manage(ILaunch launch) {
+ if (managedLaunches.size() == 0)
+ hookListener(true);
+
+ if (!managedLaunches.contains(launch))
+ managedLaunches.add(launch);
+ }
+
+ /**
+ * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch)
+ */
+ public void launchRemoved(ILaunch launch) {
+ update(launch, true);
+ }
+
+ /**
+ * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch)
+ */
+ public void launchAdded(ILaunch launch) {
+ }
+
+ /**
+ * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch)
+ */
+ public void launchChanged(ILaunch launch) {
+ }
+
+ private void update(ILaunch launch, boolean remove) {
+ if (managedLaunches.contains(launch)) {
+ if (remove || launch.isTerminated()) {
+ managedLaunches.remove(launch);
+ if (managedLaunches.size() == 0) {
+ hookListener(false);
+ }
+ }
+ }
+ }
+
+ private void hookListener(boolean add) {
+ DebugPlugin debugPlugin = DebugPlugin.getDefault();
+ ILaunchManager launchManager = debugPlugin.getLaunchManager();
+ if (add) {
+ launchManager.addLaunchListener(this);
+ debugPlugin.addDebugEventListener(this);
+ } else {
+ launchManager.removeLaunchListener(this);
+ debugPlugin.removeDebugEventListener(this);
+ }
+ }
+
+ private void doRestart(ILaunch launch) {
+ ILaunchConfiguration config = launch.getLaunchConfiguration();
+ try {
+ config.launch(launch.getLaunchMode(), new NullProgressMonitor());
+ } catch (CoreException e) {
+ PDEPlugin.logException(e);
+ }
+ }
+
+ public void shutdown() {
+ hookListener(false);
+ }
+ /**
+ * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent)
+ */
+ public void handleDebugEvents(DebugEvent[] events) {
+ for (int i = 0; i < events.length; i++) {
+ DebugEvent event = events[i];
+ Object source = event.getSource();
+ if (source instanceof IProcess
+ && event.getKind() == DebugEvent.TERMINATE) {
+ IProcess process = (IProcess) source;
+ ILaunch launch = process.getLaunch();
+ if (launch != null) {
+ try {
+ launchTerminated(launch, process.getExitValue());
+ } catch (DebugException e) {
+ }
+ }
+ }
+ }
+ }
+
+ private void launchTerminated(ILaunch launch, int returnValue) {
+ if (managedLaunches.contains(launch)) {
+ update(launch, true);
+ if (returnValue == 23)
+ doRestart(launch);
+ }
+ }
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java
deleted file mode 100644
index a38b117cfa..0000000000
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchesListener.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.eclipse.pde.internal.ui.launcher;
-
-import java.util.ArrayList;
-
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.core.ILaunchesListener;
-import org.eclipse.debug.core.model.IProcess;
-
-/**
- * @author dejan
- *
- * To change this generated comment edit the template variable "typecomment":
- * Window>Preferences>Java>Templates.
- * To enable and disable the creation of type comments go to
- * Window>Preferences>Java>Code Generation.
- */
-public class LaunchesListener implements ILaunchesListener {
- private ArrayList managedLaunches;
-
- public LaunchesListener() {
- managedLaunches = new ArrayList();
- }
-
- public void manage(ILaunch launch) {
- //if (managedLaunches)
- }
-
- /**
- * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch)
- */
- public void launchesRemoved(ILaunch[] launches) {
- update(launches);
- }
-
- /**
- * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch)
- */
- public void launchesAdded(ILaunch[] launches) {
- }
-
- /**
- * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch)
- */
- public void launchesChanged(ILaunch[] launches) {
- checkForRestart(launches);
- update(launches);
- }
-
- private void update(ILaunch[] launches) {
- for (int i = 0; i < launches.length; i++) {
- ILaunch launch = launches[i];
- if (managedLaunches.contains(launch)) {
- if (launch.isTerminated()) {
- managedLaunches.remove(launch);
- }
- }
- }
- if (managedLaunches.size() == 0) {
- hookListener(false);
- }
- }
-
- private void hookListener(boolean add) {
- ILaunchManager launchManager =
- DebugPlugin.getDefault().getLaunchManager();
- if (add)
- launchManager.addLaunchListener(this);
- else
- launchManager.removeLaunchListener(this);
- }
-
- private void checkForRestart(ILaunch[] launches) {
- for (int i = 0; i < launches.length; i++) {
- ILaunch launch = launches[i];
- checkForRestart(launch);
- }
- }
-
- private void checkForRestart(ILaunch launch) {
- if (launch.isTerminated()) {
- IProcess[] processes = launch.getProcesses();
- for (int i = 0; i < processes.length; i++) {
- IProcess process = processes[i];
- try {
- if (process.getExitValue() == 23) {
- doRestart(launch);
- return;
- }
- } catch (DebugException e) {
- }
- }
- }
- }
-
- private void doRestart(ILaunch launch) {
- }
-}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java
index fe6aef7286..9574d98380 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/WorkbenchLaunchConfigurationDelegate.java
@@ -423,6 +423,7 @@ public class WorkbenchLaunchConfigurationDelegate
if (monitor.isCanceled()) {
return false;
}
+ PDEPlugin.getDefault().getLaunchesListener().manage(launch);
runner.run(runnerConfig, launch, monitor);
monitor.worked(1);
ISourceLocator sourceLocator = constructSourceLocator(plugins);

Back to the top