Bug 553653: [Rhino] breakpoint on last line of include breaks debugger
Change-Id: Ib5f05f1702e31c8493043662cfad1047a37bb050
diff --git a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/LineNumberDebugger.java b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/LineNumberDebugger.java
index 989e6d8..9ecdb7a 100644
--- a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/LineNumberDebugger.java
+++ b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/LineNumberDebugger.java
@@ -19,7 +19,7 @@
}
@Override
- protected void processLine(Script script, int lineNumber) {
+ protected void processLine(Script script, int lineNumber, boolean checkBreakpoints) {
// we do not want to check for breakpoints, etc
}
}
diff --git a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebugger.java b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebugger.java
index 62da7aa..e85afb6 100644
--- a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebugger.java
+++ b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebugger.java
@@ -111,7 +111,7 @@
fScope = activation;
if (getScript() != null)
- processLine(getScript(), getLineNumber());
+ processLine(getScript(), getLineNumber(), true);
}
@Override
@@ -119,7 +119,7 @@
setLineNumber(lineNumber);
if (getScript() != null)
- processLine(getScript(), getLineNumber());
+ processLine(getScript(), getLineNumber(), true);
}
@Override
@@ -135,7 +135,7 @@
fScope = null;
if ((!byThrow) && (getScript() != null))
- processLine(getScript(), getLineNumber());
+ processLine(getScript(), getLineNumber(), false);
}
@Override
diff --git a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebuggerEngine.java b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebuggerEngine.java
index ef4b9ed..3ebd88e 100644
--- a/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebuggerEngine.java
+++ b/plugins/org.eclipse.ease.lang.javascript.rhino/src/org/eclipse/ease/lang/javascript/rhino/debugger/RhinoDebuggerEngine.java
@@ -150,6 +150,8 @@
@Override
public void setupDebugger(final ILaunch launch, final boolean suspendOnStartup, final boolean suspendOnScriptLoad, final boolean showDynamicCode) {
+ removeExecutionListener(fDebugger);
+
final RhinoDebugTarget debugTarget = new RhinoDebugTarget(launch, suspendOnStartup, suspendOnScriptLoad, showDynamicCode);
launch.addDebugTarget(debugTarget);
diff --git a/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java b/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
index daaf97c..bb73584 100644
--- a/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
+++ b/plugins/org.eclipse.ease.lang.python/src/org/eclipse/ease/lang/python/debugger/PythonDebugger.java
@@ -175,7 +175,7 @@
// do not evaluate breakpoints when returning from a function call
fBreakpointsDisabled = "return".equals(type) || "call".equals(type);
- processLine(script, frame.getLineNumber());
+ processLine(script, frame.getLineNumber(), true);
}
}
}
@@ -230,6 +230,7 @@
*
* @return {@link IPythonScriptRegistry} or {@code null}.
*/
+ @Override
public IPythonScriptRegistry getScriptRegistry() {
final IScriptRegistry scriptRegistry = super.getScriptRegistry();
if (scriptRegistry instanceof IPythonScriptRegistry) {
diff --git a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/AbstractEaseDebugger.java b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/AbstractEaseDebugger.java
index a9dcb6f..cdac561 100644
--- a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/AbstractEaseDebugger.java
+++ b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/AbstractEaseDebugger.java
@@ -469,7 +469,7 @@
* @param script
* @param lineNumber
*/
- protected void processLine(final Script script, final int lineNumber) {
+ protected void processLine(final Script script, final int lineNumber, boolean checkBreakpoints) {
if (!isTrackedScript(script))
return;
@@ -485,9 +485,11 @@
final Object thread = getThread();
// check breakpoints
- if (isActiveBreakpoint(script, lineNumber)) {
- suspend(new SuspendedEvent(DebugEvent.BREAKPOINT, thread, getStacktrace()));
- return;
+ if (checkBreakpoints) {
+ if (isActiveBreakpoint(script, lineNumber)) {
+ suspend(new SuspendedEvent(DebugEvent.BREAKPOINT, thread, getStacktrace()));
+ return;
+ }
}
// no breakpoint, check for step events
diff --git a/tests/org.eclipse.ease.lang.python.py4j.test/src/org/eclipse/ease/lang/python/py4j/Py4jDebugTest.java b/tests/org.eclipse.ease.lang.python.py4j.test/src/org/eclipse/ease/lang/python/py4j/Py4jDebugTest.java
index 67e943b..6c496bf 100644
--- a/tests/org.eclipse.ease.lang.python.py4j.test/src/org/eclipse/ease/lang/python/py4j/Py4jDebugTest.java
+++ b/tests/org.eclipse.ease.lang.python.py4j.test/src/org/eclipse/ease/lang/python/py4j/Py4jDebugTest.java
@@ -68,4 +68,11 @@
public void stepIntoIncludeCommand() throws CoreException {
// TODO see https://bugs.eclipse.org/bugs/show_bug.cgi?id=553619
}
+
+ @Override
+ @Test
+ @Ignore
+ public void resumeOnLastIncludeLine() throws CoreException {
+ // TODO see https://bugs.eclipse.org/bugs/show_bug.cgi?id=553652
+ }
}
diff --git a/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.js b/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.js
index 1ac445f..718bbcd 100644
--- a/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.js
+++ b/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.js
@@ -4,4 +4,4 @@
print("include function called");
}
-print("Include file processed");
\ No newline at end of file
+print("Include file processed"); // include-last-line-hook
\ No newline at end of file
diff --git a/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.py b/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.py
index c990ab3..0386a3d 100644
--- a/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.py
+++ b/tests/org.eclipse.ease.testhelper/resources/DebugTest/include.py
@@ -3,4 +3,4 @@
def includedFoo():
print("include function called")
-print("include file processed")
+print("include file processed") # include-last-line-hook
diff --git a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
index 5a15f67..91eed32 100644
--- a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
+++ b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
@@ -402,6 +402,23 @@
assertEquals(2, suspendedEvents);
}
+ @Test(timeout = TEST_TIMEOUT)
+ public void resumeOnLastIncludeLine() throws CoreException {
+ setBreakpoint(getFile(INCLUDE_SCRIPT), getLineNumber(INCLUDE_SCRIPT, "include-last-line-hook"));
+ assertEquals(1, getBreakpoints().length);
+
+ fScriptEngine.executeAsync(getFile(MAIN_SCRIPT));
+ final int suspendedEvents = runUntilTerminated(fScriptEngine, () -> {
+ final IStackFrame[] stackFrames = getStackFrames();
+ assertEquals(2, stackFrames.length);
+ assertEquals(getLineNumber(INCLUDE_SCRIPT, "include-last-line-hook"), getTopmostStackFrame().getLineNumber());
+
+ getThread().resume();
+ });
+
+ assertEquals(1, suspendedEvents);
+ }
+
// ---------- resume tests ------------------------------------------------------------------
public void resumeTestTemplate(IDebugElementProvider elementProvider) throws CoreException, IOException {