use of org.eclipse.debug.core.model.ILineBreakpoint in project webtools.sourceediting by eclipse.
the class JAXPDebugTarget method breakpointRemoved.
public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
if (supportsBreakpoint(breakpoint)) {
try {
ILineBreakpoint lb = (ILineBreakpoint) breakpoint;
IMarker marker = lb.getMarker();
if (marker != null) {
URL file = marker.getResource().getLocation().toFile().toURI().toURL();
sendRequest(DebugConstants.REQUEST_REMOVE_BREAKPOINT + " " + file + " " + // $NON-NLS-1$ //$NON-NLS-2$
lb.getLineNumber());
}
} catch (CoreException e) {
JAXPLaunchingPlugin.log(e);
} catch (MalformedURLException e) {
JAXPLaunchingPlugin.log(e);
}
}
}
use of org.eclipse.debug.core.model.ILineBreakpoint in project liferay-ide by liferay.
the class FMDebugTarget method step.
/*
* Since current fm debugger doens't have native stepping we must emulate stepping with following steps.
*
* 1. Starting at the current stopped line, continue going down the template file to find a
* suitable line to stop, ie, a addBreakpoint() that doesn't throw an exception.
* 2. For the next line if there is already a breakpoint, simply call resume(),
* 3. If there is no breakpoint already installed, add another one to the next line if that line has a valid
* breakpoint location, then resume().
* 4. Once the next breakpoint is hit, we need to remove the previously added step breakpoint
*/
@SuppressWarnings({ "rawtypes" })
void step(FMThread thread) throws DebugException {
int currentLineNumber = -1;
String templateName = null;
Breakpoint existingStepBp = null;
final IBreakpoint[] breakpoints = thread.getBreakpoints();
if (breakpoints.length > 0) {
try {
ILineBreakpoint bp = (ILineBreakpoint) breakpoints[0];
currentLineNumber = bp.getLineNumber();
templateName = bp.getMarker().getAttribute(ILRDebugConstants.FM_TEMPLATE_NAME, "");
} catch (CoreException e) {
PortalCore.logError("Could not get breakpoint information.", e);
}
} else {
existingStepBp = thread.getStepBreakpoint();
currentLineNumber = existingStepBp.getLine();
templateName = existingStepBp.getTemplateName();
}
if (currentLineNumber > -1 && templateName != null) {
final String remoteTemplateName = createRemoteTemplateName(templateName);
int stepLine = currentLineNumber + 1;
Breakpoint existingBp = null;
Debugger debugCli = getDebuggerClient();
try {
List remoteBps = debugCli.getBreakpoints(remoteTemplateName);
for (Iterator i = remoteBps.iterator(); i.hasNext(); ) {
Breakpoint remoteBp = (Breakpoint) i.next();
if (remoteBp.getLine() == stepLine) {
existingBp = remoteBp;
break;
}
}
if (existingBp == null) {
boolean addedRemote = false;
while (!addedRemote) {
Breakpoint newBp = new Breakpoint(remoteTemplateName, stepLine++);
try {
debugCli.addBreakpoint(newBp);
} catch (RemoteException e) {
// we except to get some remote exceptions if the next line is invalid breakpoint location
}
List updatedRemoteBps = debugCli.getBreakpoints(remoteTemplateName);
if (// our new remote bp was sucessfully added
updatedRemoteBps.size() == remoteBps.size() + 1) {
addedRemote = true;
thread.setStepBreakpoint(newBp);
thread.setStepping(true);
fireResumeEvent(DebugEvent.RESUME);
if (existingStepBp != null) {
debugCli.removeBreakpoint(existingStepBp);
}
thread.getEnvironment().resume();
}
}
} else {
// the next line already has a remote breakpoint installed so lets clear our "step" breakpoint
thread.setStepBreakpoint(null);
thread.setStepping(false);
fireResumeEvent(DebugEvent.RESUME);
if (existingStepBp != null) {
debugCli.removeBreakpoint(existingStepBp);
}
thread.getEnvironment().resume();
}
} catch (RemoteException e) {
PortalCore.logError("Unable to check remote breakpoints", e);
}
} else {
PortalCore.logError("Unable to step because of missing lineNumber or templateName information.");
}
}
use of org.eclipse.debug.core.model.ILineBreakpoint in project liferay-ide by liferay.
the class FMLineBreakpointAdapter method toggleLineBreakpoints.
public void toggleLineBreakpoints(IWorkbenchPart part, ISelection selection) throws CoreException {
ITextEditor textEditor = getEditor(part);
if (textEditor != null) {
IResource resource = (IResource) textEditor.getEditorInput().getAdapter(IResource.class);
ITextSelection textSelection = (ITextSelection) selection;
int lineNumber = textSelection.getStartLine();
IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(ILRDebugConstants.ID_FM_DEBUG_MODEL);
for (int i = 0; i < breakpoints.length; i++) {
IBreakpoint breakpoint = breakpoints[i];
if (resource.equals(breakpoint.getMarker().getResource())) {
if (((ILineBreakpoint) breakpoint).getLineNumber() == (lineNumber + 1)) {
// remove
breakpoint.delete();
return;
}
}
}
// create line breakpoint (doc line numbers start at 0)
FMLineBreakpoint lineBreakpoint = new FMLineBreakpoint(resource, lineNumber + 1);
DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(lineBreakpoint);
}
}
Aggregations