blob: dcd4d9745b540bce20b934638bac7db316afed0a [file] [log] [blame]
package org.eclipse.e4.languages.javascript.rhino.jsdi.request;
import org.eclipse.e4.languages.javascript.debug.connect.DisconnectException;
import org.eclipse.e4.languages.javascript.debug.connect.Request;
import org.eclipse.e4.languages.javascript.debug.connect.Response;
import org.eclipse.e4.languages.javascript.debug.connect.TimeoutException;
import org.eclipse.e4.languages.javascript.jsdi.Location;
import org.eclipse.e4.languages.javascript.jsdi.ThreadReference;
import org.eclipse.e4.languages.javascript.jsdi.request.BreakpointRequest;
import org.eclipse.e4.languages.javascript.rhino.jsdi.ScriptReferenceImpl;
import org.eclipse.e4.languages.javascript.rhino.jsdi.VirtualMachineImpl;
public class BreakpointRequestImpl extends EventRequestImpl implements BreakpointRequest {
private final Location location;
private ThreadReference thread;
private String condition;
private Long breakpointId;
public BreakpointRequestImpl(VirtualMachineImpl vm, Location location) {
super(vm);
this.location = location;
}
public synchronized void addThreadFilter(ThreadReference thread) {
checkDeleted();
this.thread = thread;
}
public synchronized ThreadReference thread() {
return thread;
}
public synchronized void addConditionFilter(String condition) {
checkDeleted();
this.condition = condition;
}
public synchronized String condition() {
return condition;
}
public Location location() {
return location;
}
public synchronized void setEnabled(boolean enabled) {
checkDeleted();
if (this.enabled == enabled)
return;
if (enabled) {
ScriptReferenceImpl scriptReferenceImpl = (ScriptReferenceImpl) location.scriptReference();
Long scriptId = scriptReferenceImpl.getScriptId();
Request request = new Request("setbreakpoint");
request.getArguments().put("scriptId", scriptId);
if (location.functionName() != null)
request.getArguments().put("function", location.functionName());
else
request.getArguments().put("line", new Integer(location.lineNumber()));
try {
Response response = vm.sendRequest(request);
breakpointId = new Long(((Number) response.getBody().get("breakpointId")).longValue());
} catch (TimeoutException e) {
e.printStackTrace();
} catch (DisconnectException e) {
e.printStackTrace();
}
} else {
Request request = new Request("clearbreakpoint");
request.getArguments().put("breakpointId", breakpointId);
try {
vm.sendRequest(request);
breakpointId = null;
} catch (TimeoutException e) {
e.printStackTrace();
} catch (DisconnectException e) {
e.printStackTrace();
}
}
this.enabled = enabled;
}
public Long breakpointId() {
return breakpointId;
}
}