use of freemarker.debug.Debugger in project liferay-ide by liferay.
the class FMDebugTarget method resume.
@SuppressWarnings("rawtypes")
public void resume() {
final Job job = new Job("resume") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
// need to check to see if current thread is stepping and then remove the step breakpoint
Debugger debugger = getDebuggerClient();
if (debugger != null) {
if (fmThread.isStepping()) {
Breakpoint stepBp = fmThread.getStepBreakpoint();
debugger.removeBreakpoint(stepBp);
}
for (Iterator i = debugger.getSuspendedEnvironments().iterator(); i.hasNext(); ) {
DebuggedEnvironment env = (DebuggedEnvironment) i.next();
try {
env.resume();
} catch (Exception e) {
PortalCore.logError("Could not resume suspended environment", e);
}
}
fmStackFrames = EMPTY_STACK_FRAMES;
resumed(DebugEvent.CLIENT_REQUEST);
}
} catch (RemoteException e) {
PortalCore.logError("Could not fully resume suspended environments", e);
}
return Status.OK_STATUS;
}
};
job.schedule();
}
use of freemarker.debug.Debugger 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.");
}
}
Aggregations