/** * When a Server runtime server is started and terminated, and the project has a GWT Facet, start and stop the GWT * Super Dev Mode Code Server with runtime server. */ @Override public void start(BundleContext context) throws Exception { super.start(context); // Observe launch events that are from the WTP server serverProcessListener = new IDebugEventSetListener() { @Override public void handleDebugEvents(DebugEvent[] events) { if (events != null) { onDebugEvents(events); } } }; DebugPlugin.getDefault().addDebugEventListener(serverProcessListener); }
protected void stopServer(ControllableServerBehavior behavior) { behavior.setServerStopped(); IDebugEventSetListener terminateListener = (IDebugEventSetListener) behavior.getSharedData(TERMINATE_LISTENER); if (terminateListener != null) { DebugPlugin.getDefault().removeDebugEventListener(terminateListener); behavior.putSharedData(TERMINATE_LISTENER, null); } }
/** * Registers an event listener on the debug session that responds to * {@link DebugEvent.TERMINATE} events. This will stop the MBBean connection * job, the {@link RuntimeDataProvider} and the {@link MBeanProvider}<br> * <br> * This will also cleanup the services registered during this debug session. * * @param launch * the launch process */ private IDebugEventSetListener getDebugEventListener(final ILaunch launch) throws CoreException { final IProcess process = launch.getProcesses()[0]; final String memento = launch.getLaunchConfiguration().getMemento(); return new IDebugEventSetListener() { @Override public void handleDebugEvents(final DebugEvent[] events) { if (events == null) { return; } for (final DebugEvent event : events) { if ( process != null && process.equals(event.getSource()) && event.getKind() == DebugEvent.TERMINATE) { final JMXServiceDescriptor descriptor = mbeanProviderDataMap.get(memento).getJmxServiceDescriptor(); jmxServiceManager.remove(descriptor); final MBeanServerConnectionJob job = mbeanProviderDataMap.get(memento).getMBeanServerConnectionJob(); if (job != null) { job.cancel(); } final RuntimeDataProvider runtimeDataProvider = mbeanProviderDataMap.get(memento).getRuntimeDataProvider(); runtimeDataProviderManager.remove(runtimeDataProvider); if (runtimeDataProvider != null) { runtimeDataProvider.stop(); } final MBeanProvider mbeanProvider = mbeanProviderDataMap.get(memento).getMbeanProvider(); mbeanProviderManager.remove(mbeanProvider); if (mbeanProvider != null) { mbeanProvider.close(); } } } } }; }
@Override public void earlyStartup() { //Note: preferences are in the PydevPlugin, not in the debug plugin. IPreferenceStore preferenceStore = PydevPlugin.getDefault().getPreferenceStore(); preferenceStore.addPropertyChangeListener(new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { if (DebugPluginPrefsInitializer.DEBUG_SERVER_STARTUP.equals(event.getProperty())) { //On a change in the preferences, re-check if it should be always on... checkAlwaysOnJob.schedule(200); } } }); RemoteDebuggerServer.getInstance().addListener(new IRemoteDebuggerListener() { @Override public void stopped(RemoteDebuggerServer remoteDebuggerServer) { //When it stops, re-check if it should be always on. checkAlwaysOnJob.schedule(200); } }); checkAlwaysOnJob.schedule(500); //wait a little bit more to enable on startup. DebugPlugin.getDefault().addDebugEventListener(new IDebugEventSetListener() { @Override public void handleDebugEvents(DebugEvent[] events) { if (events != null) { for (DebugEvent debugEvent : events) { if (debugEvent.getKind() == DebugEvent.SUSPEND) { if (debugEvent.getDetail() == DebugEvent.BREAKPOINT) { if (debugEvent.getSource() instanceof PyThread) { IPreferenceStore preferenceStore2 = PydevPlugin.getDefault().getPreferenceStore(); final int forceOption = preferenceStore2 .getInt(DebugPluginPrefsInitializer.FORCE_SHOW_SHELL_ON_BREAKPOINT); if (forceOption != DebugPluginPrefsInitializer.FORCE_SHOW_SHELL_ON_BREAKPOINT_MAKE_NOTHING) { Runnable r = new Runnable() { @Override public void run() { Shell activeShell = UIUtils.getActiveShell(); if (activeShell != null) { forceActive(activeShell, forceOption); } } }; boolean runNowIfInUiThread = true; RunInUiThread.async(r, runNowIfInUiThread); } } } } } } } }); }