Skip to content

Commit

Permalink
JBIDE-21059 - expand adding debugger to local servers run externally
Browse files Browse the repository at this point in the history
Refactor some internal classes
Ensure attach-debugger setting is respected
  • Loading branch information
robstryker committed May 31, 2016
1 parent be32d05 commit 6eb6d04
Show file tree
Hide file tree
Showing 18 changed files with 765 additions and 533 deletions.
Expand Up @@ -21,10 +21,8 @@
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.debug.internal.core.BreakpointManager;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaHotCodeReplaceListener;
import org.eclipse.jdt.debug.core.JDIDebugModel;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.server.core.IModule;
Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.jboss.ide.eclipse.as.core.util.IJBossRuntimeResourceConstants;
import org.jboss.ide.eclipse.as.core.util.LaunchCommandPreferences;
import org.jboss.ide.eclipse.as.core.util.ServerConverter;
import org.jboss.ide.eclipse.as.wtp.core.debug.RemoteDebugUtils;
import org.jboss.ide.eclipse.as.wtp.core.util.ServerTCPIPMonitorUtil;

/**
Expand Down Expand Up @@ -173,12 +174,12 @@ protected String getLaunchDebugCommand(JBossServer jbossServer) throws CoreExcep
}

protected boolean attachDebugger() {
Boolean b = jbossServer.getServer().getAttribute(RSEJbossLaunchConstants.ATTACH_DEBUGGER, true);
Boolean b = jbossServer.getServer().getAttribute(RemoteDebugUtils.ATTACH_DEBUGGER, true);
return b;

}
protected String getDebugPort() {
String dbugPort = jbossServer.getServer().getAttribute(RSEJbossLaunchConstants.DEBUG_PORT, new Integer(RSEJbossLaunchConstants.DEFAULT_DEBUG_PORT).toString());
String dbugPort = jbossServer.getServer().getAttribute(RemoteDebugUtils.DEBUG_PORT, new Integer(RemoteDebugUtils.DEFAULT_DEBUG_PORT).toString());
return dbugPort;
}

Expand Down
Expand Up @@ -17,11 +17,8 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.rse.core.subsystems.IServerLauncher;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.IServerListener;
import org.eclipse.wst.server.core.ServerEvent;
import org.eclipse.wst.server.core.ServerUtil;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
import org.jboss.ide.eclipse.as.core.util.JBossServerBehaviorUtils;
Expand All @@ -30,7 +27,6 @@
import org.jboss.ide.eclipse.as.wtp.core.debug.RemoteDebugUtils;
import org.jboss.ide.eclipse.as.wtp.core.server.behavior.ControllableServerBehavior;
import org.jboss.ide.eclipse.as.wtp.core.server.behavior.IControllableServerBehavior;
import org.jboss.tools.foundation.core.plugin.log.StatusFactory;

/**
* This is a launch configuration delegate for use with rse jboss servers.
Expand Down Expand Up @@ -59,7 +55,7 @@ protected void actualLaunch(ILaunchConfiguration configuration,
RSELaunchConfigProperties propertyUtil = new RSELaunchConfigProperties();
boolean detectStartupCommand = propertyUtil.isDetectStartupCommand(configuration, true);
IServer server = ServerUtil.getServer(configuration);
boolean attachDebugger = server.getAttribute(RSEJbossLaunchConstants.ATTACH_DEBUGGER, true);
boolean attachDebugger = server.getAttribute(RemoteDebugUtils.ATTACH_DEBUGGER, true);

if("debug".equals(mode) && detectStartupCommand && attachDebugger) {
// Only manipulate the args and attach debugger if they're
Expand Down Expand Up @@ -104,57 +100,19 @@ protected void afterVMRunner(ILaunchConfiguration configuration, String mode,
ILaunch launch, IProgressMonitor monitor) throws CoreException {
// Initiate Polling!
IServer s = ServerUtil.getServer(configuration);
if( "debug".equals(mode)) {
// add a listener which will run the
boolean attachDebugger = s.getAttribute(RemoteDebugUtils.ATTACH_DEBUGGER, true);
if( "debug".equals(mode) && attachDebugger) {
// add a listener which will run the debugger once server is started
IServerListener listener = createAttachDebuggerListener();
s.addServerListener(listener);
}
pollServer(s, IServerStatePoller.SERVER_UP);
}

private IServerListener createAttachDebuggerListener() {
return new IServerListener() {
boolean serverSwitchesToState(ServerEvent event, int state) {
int eventKind = event.getKind();
if ((eventKind & ServerEvent.SERVER_CHANGE) != 0) {
// server change event
if ((eventKind & ServerEvent.STATE_CHANGE) != 0) {
if( event.getServer().getServerState() == state ) {
return true;
}
}
}
return false;
}
public void serverChanged(ServerEvent event) {
if( serverSwitchesToState(event, IServer.STATE_STARTED)) {
event.getServer().removeServerListener(this);
IServer s = event.getServer();
int debugPort = getDebugPort(s);
try {
attachRemoteDebugger(event.getServer(), debugPort, new NullProgressMonitor());
} catch(CoreException ce) {
RSECorePlugin.pluginLog().logError(ce);
}
} else if( serverSwitchesToState(event, IServer.STATE_STOPPED)) {
event.getServer().removeServerListener(this);
}
}
};
return RemoteDebugUtils.get().createAttachDebuggerListener();
}

protected int getDebugPort(IServer server) {
String debugPort = server.getAttribute(RSEJbossLaunchConstants.DEBUG_PORT, Integer.toString(RSEJbossLaunchConstants.DEFAULT_DEBUG_PORT));
int port = -1;
try {
port = Integer.parseInt(debugPort);
} catch(NumberFormatException nfe) {
port = RSEJbossLaunchConstants.DEFAULT_DEBUG_PORT;
}
if( port < 1 )
port = RSEJbossLaunchConstants.DEFAULT_DEBUG_PORT;
return port;
}

/*
* Synchronous check to see if server is currently up.
Expand All @@ -181,48 +139,6 @@ protected boolean setServerAlreadyStarted(ILaunchConfiguration configuration, St

protected void connectDebugger(ILaunchConfiguration configuration, String mode,
IControllableServerBehavior beh) throws CoreException {
attachRemoteDebugger(beh.getServer(), getDebugPort(beh.getServer()), new NullProgressMonitor());
}


private ILaunch attachRemoteDebugger(IServer server, int localDebugPort, IProgressMonitor monitor)
throws CoreException {
monitor.subTask("Attaching remote debugger");
ILaunch ret = null;
RemoteDebugUtils debugUtils = RemoteDebugUtils.get();
ILaunchConfiguration debuggerLaunchConfig = debugUtils.getRemoteDebuggerLaunchConfiguration(server);
ILaunchConfigurationWorkingCopy workingCopy;
if (debuggerLaunchConfig == null) {
workingCopy = debugUtils.createRemoteDebuggerLaunchConfiguration(server);
} else {
if (debugUtils.isRunning(debuggerLaunchConfig, localDebugPort)) {
return null;
}
workingCopy = debuggerLaunchConfig.getWorkingCopy();
}

debugUtils.setupRemoteDebuggerLaunchConfiguration(workingCopy, null, localDebugPort);
debuggerLaunchConfig = workingCopy.doSave();
boolean launched = false;
try {
ret = debuggerLaunchConfig.launch("debug", new NullProgressMonitor());
launched = true;
} catch (Exception e) {
e.printStackTrace();
}

if (!launched){
throw toCoreException("Unable to start a remote debugger to localhost:"+localDebugPort);
}

monitor.worked(10);
return ret;
}
private CoreException toCoreException(String msg, Exception e) {
return new CoreException(StatusFactory.errorStatus(RSECorePlugin.PLUGIN_ID, msg, e));
}

private CoreException toCoreException(String msg) {
return toCoreException(msg, null);
RemoteDebugUtils.get().attachRemoteDebugger(beh.getServer(), new NullProgressMonitor());
}
}
11 changes: 1 addition & 10 deletions as/plugins/org.jboss.ide.eclipse.as.rse.ui/plugin.xml
Expand Up @@ -94,16 +94,7 @@
<subsystem system="launchTabProvider" subsystem="launchTabProvider.rse"/>
</serverProfile>
</extension>

<extension
point="org.jboss.ide.eclipse.as.ui.ServerEditorPortSection">
<section
weight="150"
class="org.jboss.ide.eclipse.as.rse.ui.editor.DebugPortSection"
serverIds="%AllJBossServerTypes">
</section>
</extension>


<extension
point="org.jboss.ide.eclipse.as.wtp.ui.ServerProfileWizardFragments">
<wizardFragment
Expand Down

This file was deleted.

Expand Up @@ -72,6 +72,7 @@ Export-Package: org.jboss.ide.eclipse.as.ui,
org.jboss.ide.eclipse.as.ui.dialogs,
org.jboss.ide.eclipse.as.ui.editor,
org.jboss.ide.eclipse.as.ui.editor.internal;x-friends:="org.jboss.ide.eclipse.as.rse.ui",
org.jboss.ide.eclipse.as.ui.editor.ports,
org.jboss.ide.eclipse.as.ui.launch,
org.jboss.ide.eclipse.as.ui.launch.internal;x-friends:="org.jboss.tools.as.test.core",
org.jboss.ide.eclipse.as.ui.preferences,
Expand Down

0 comments on commit 6eb6d04

Please sign in to comment.