You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by en...@apache.org on 2021/08/25 17:32:23 UTC
[netbeans] branch master updated: Restart frame action implemented
in the DAP.
This is an automated email from the ASF dual-hosted git repository.
entl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 65feb02 Restart frame action implemented in the DAP.
65feb02 is described below
commit 65feb026d3e375311a8b724852a54c2315fc7f33
Author: Martin Entlicher <ma...@oracle.com>
AuthorDate: Thu Aug 19 18:48:51 2021 +0200
Restart frame action implemented in the DAP.
---
ide/spi.debugger.ui/manifest.mf | 2 +-
.../netbeans/spi/debugger/ui/DebuggingView.java | 30 ++++++++++++++++++++++
java/debugger.jpda.truffle/nbproject/project.xml | 2 +-
.../jpda/truffle/frames/models/TruffleDVFrame.java | 26 +++++++++++++++++++
java/debugger.jpda.ui/nbproject/project.xml | 2 +-
.../debugger/jpda/ui/debugging/JPDADVFrame.java | 17 +++++++++++-
.../debugger/jpda/models/CallStackFrameImpl.java | 4 +--
java/java.lsp.server/nbproject/project.xml | 2 +-
.../lsp/server/debugging/NbProtocolServer.java | 29 +++++++++++++++++++++
9 files changed, 107 insertions(+), 7 deletions(-)
diff --git a/ide/spi.debugger.ui/manifest.mf b/ide/spi.debugger.ui/manifest.mf
index 51cbb37..92fd524 100644
--- a/ide/spi.debugger.ui/manifest.mf
+++ b/ide/spi.debugger.ui/manifest.mf
@@ -2,6 +2,6 @@ Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.spi.debugger.ui/1
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/debugger/ui/Bundle.properties
OpenIDE-Module-Layer: org/netbeans/modules/debugger/resources/mf-layer.xml
-OpenIDE-Module-Specification-Version: 2.69
+OpenIDE-Module-Specification-Version: 2.70
OpenIDE-Module-Provides: org.netbeans.spi.debugger.ui
OpenIDE-Module-Install: org/netbeans/modules/debugger/ui/DebuggerModule.class
diff --git a/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/DebuggingView.java b/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/DebuggingView.java
index dd085bf..cbf64c2 100644
--- a/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/DebuggingView.java
+++ b/ide/spi.debugger.ui/src/org/netbeans/spi/debugger/ui/DebuggingView.java
@@ -508,6 +508,36 @@ public final class DebuggingView {
* @since 2.65
*/
int getColumn();
+
+ /**
+ * Pop all frames up to and including this frame off the stack.
+ *
+ * @throws UnsupportedOperationException thrown when popping of stack frames is not supported.
+ * @throws PopException when the pop frame operation fails.
+ * @since 2.70
+ */
+ default void popOff() throws UnsupportedOperationException, PopException {
+ throw new UnsupportedOperationException("The frame pop is not supported.");
+ }
+ }
+
+ /**
+ * Thrown when {@link DVFrame#popOff()} operation fails. The message of this
+ * exception describes the failure.
+ *
+ * @since 2.70
+ */
+ public static final class PopException extends Exception {
+
+ /**
+ * Creates a new PopException with a description message.
+ * @param message the description
+ *
+ * @since 2.70
+ */
+ public PopException(String message) {
+ super(message);
+ }
}
/**
diff --git a/java/debugger.jpda.truffle/nbproject/project.xml b/java/debugger.jpda.truffle/nbproject/project.xml
index d06cb2a..f15d913 100644
--- a/java/debugger.jpda.truffle/nbproject/project.xml
+++ b/java/debugger.jpda.truffle/nbproject/project.xml
@@ -130,7 +130,7 @@
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
- <specification-version>2.67</specification-version>
+ <specification-version>2.70</specification-version>
</run-dependency>
</dependency>
<dependency>
diff --git a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/frames/models/TruffleDVFrame.java b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/frames/models/TruffleDVFrame.java
index da348c2..c1c0395 100644
--- a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/frames/models/TruffleDVFrame.java
+++ b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/frames/models/TruffleDVFrame.java
@@ -18,8 +18,11 @@
*/
package org.netbeans.modules.debugger.jpda.truffle.frames.models;
+import java.io.InvalidObjectException;
import java.net.URI;
import java.net.URISyntaxException;
+import org.netbeans.api.debugger.jpda.JPDADebugger;
+import org.netbeans.api.debugger.jpda.JPDAThread;
import org.netbeans.modules.debugger.jpda.truffle.access.CurrentPCInfo;
import org.netbeans.modules.debugger.jpda.truffle.access.TruffleAccess;
import org.netbeans.modules.debugger.jpda.truffle.frames.TruffleStackFrame;
@@ -27,6 +30,9 @@ import org.netbeans.modules.debugger.jpda.truffle.source.Source;
import org.netbeans.modules.debugger.jpda.truffle.source.SourcePosition;
import org.netbeans.spi.debugger.ui.DebuggingView.DVFrame;
import org.netbeans.spi.debugger.ui.DebuggingView.DVThread;
+import org.netbeans.spi.debugger.ui.DebuggingView.PopException;
+import org.openide.util.Exceptions;
+import org.openide.util.NbBundle;
/**
*
@@ -113,4 +119,24 @@ public final class TruffleDVFrame implements DVFrame {
}
}
+ @Override
+ @NbBundle.Messages("MSG_FramePopFailed=Pop of the stack frame has failed.")
+ public void popOff() throws PopException {
+ JPDADebugger debugger = truffleFrame.getDebugger();
+ JPDAThread tr = truffleFrame.getThread();
+ int depth = truffleFrame.getDepth();
+ boolean unwindScheduled = TruffleAccess.unwind(debugger, tr, depth);
+ if (unwindScheduled) {
+ CurrentPCInfo currentPCInfo = TruffleAccess.getCurrentGuestPCInfo(tr);
+ try {
+ currentPCInfo.getStepCommandVar().setFromMirrorObject(-1);
+ tr.resume();
+ } catch (InvalidObjectException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+ } else {
+ throw new PopException(Bundle.MSG_FramePopFailed());
+ }
+ }
+
}
diff --git a/java/debugger.jpda.ui/nbproject/project.xml b/java/debugger.jpda.ui/nbproject/project.xml
index afcc310..fff6739 100644
--- a/java/debugger.jpda.ui/nbproject/project.xml
+++ b/java/debugger.jpda.ui/nbproject/project.xml
@@ -202,7 +202,7 @@
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
- <specification-version>2.65</specification-version>
+ <specification-version>2.70</specification-version>
</run-dependency>
</dependency>
<dependency>
diff --git a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/debugging/JPDADVFrame.java b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/debugging/JPDADVFrame.java
index fce4ac0..57152e3 100644
--- a/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/debugging/JPDADVFrame.java
+++ b/java/debugger.jpda.ui/src/org/netbeans/modules/debugger/jpda/ui/debugging/JPDADVFrame.java
@@ -18,6 +18,10 @@
*/
package org.netbeans.modules.debugger.jpda.ui.debugging;
+import com.sun.jdi.IncompatibleThreadStateException;
+import com.sun.jdi.InvalidStackFrameException;
+import com.sun.jdi.NativeMethodException;
+import com.sun.jdi.VMCannotBeModifiedException;
import java.net.URI;
import java.net.URISyntaxException;
import org.netbeans.api.debugger.Session;
@@ -30,6 +34,7 @@ import org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper;
import org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper;
import org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl;
import org.netbeans.modules.debugger.jpda.ui.models.CallStackNodeModel;
+import org.netbeans.spi.debugger.ui.DebuggingView;
import org.netbeans.spi.debugger.ui.DebuggingView.DVFrame;
import org.netbeans.spi.debugger.ui.DebuggingView.DVThread;
import org.openide.util.Exceptions;
@@ -113,5 +118,15 @@ public final class JPDADVFrame implements DVFrame {
public int getColumn() {
return -1;
}
-
+
+ @Override
+ public void popOff() throws DebuggingView.PopException {
+ try {
+ stackFrame.popFrame();
+ } catch (VMCannotBeModifiedException ex) {
+ throw new UnsupportedOperationException(ex.getLocalizedMessage());
+ } catch (InvalidStackFrameException | IllegalArgumentException | NativeMethodException ex) {
+ throw new DebuggingView.PopException(ex.getLocalizedMessage());
+ }
+ }
}
diff --git a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/CallStackFrameImpl.java b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/CallStackFrameImpl.java
index 7b4d2f3..e9bd854 100644
--- a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/CallStackFrameImpl.java
+++ b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/models/CallStackFrameImpl.java
@@ -905,9 +905,9 @@ public class CallStackFrameImpl implements CallStackFrame {
StackFrame frame = getStackFrame();
debugger.popFrames(StackFrameWrapper.thread(frame), frame);
} catch (InternalExceptionWrapper ex) {
- // Ignored
+ throw new InvalidStackFrameException(ex.getLocalizedMessage());
} catch (VMDisconnectedExceptionWrapper ex) {
- // Ignored
+ throw new InvalidStackFrameException(ex.getLocalizedMessage());
} catch (InvalidStackFrameExceptionWrapper ex) {
throw ex.getCause();
}
diff --git a/java/java.lsp.server/nbproject/project.xml b/java/java.lsp.server/nbproject/project.xml
index 9ffd7dc..99f64a7 100644
--- a/java/java.lsp.server/nbproject/project.xml
+++ b/java/java.lsp.server/nbproject/project.xml
@@ -432,7 +432,7 @@
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
- <specification-version>2.67</specification-version>
+ <specification-version>2.70</specification-version>
</run-dependency>
</dependency>
<dependency>
diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
index 5f9581b..d22b718 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/debugging/NbProtocolServer.java
@@ -46,6 +46,7 @@ import org.eclipse.lsp4j.debug.ExceptionInfoResponse;
import org.eclipse.lsp4j.debug.InitializeRequestArguments;
import org.eclipse.lsp4j.debug.NextArguments;
import org.eclipse.lsp4j.debug.PauseArguments;
+import org.eclipse.lsp4j.debug.RestartFrameArguments;
import org.eclipse.lsp4j.debug.Scope;
import org.eclipse.lsp4j.debug.ScopesArguments;
import org.eclipse.lsp4j.debug.ScopesResponse;
@@ -87,8 +88,10 @@ import org.netbeans.modules.java.lsp.server.debugging.utils.ErrorUtilities;
import org.netbeans.modules.nativeimage.api.debug.EvaluateException;
import org.netbeans.modules.nativeimage.api.debug.NIDebugger;
import org.netbeans.modules.nativeimage.api.debug.NIVariable;
+import org.netbeans.spi.debugger.ui.DebuggingView;
import org.netbeans.spi.debugger.ui.DebuggingView.DVFrame;
import org.netbeans.spi.debugger.ui.DebuggingView.DVThread;
+import org.openide.util.NbBundle;
import org.openide.util.RequestProcessor;
/**
@@ -350,6 +353,32 @@ public final class NbProtocolServer implements IDebugProtocolServer, LspSession.
}
@Override
+ @NbBundle.Messages({"MSG_FrameRestartUnsupported=Restart of frames is not supported.",
+ "# {0} - frame pop error message",
+ "MSG_FrameRestartFailed=Unable to restart frame: {0}"})
+ public CompletableFuture<Void> restartFrame(RestartFrameArguments args) {
+ CompletableFuture<Void> future = new CompletableFuture<>();
+ NbFrame stackFrame = (NbFrame) context.getThreadsProvider().getThreadObjects().getObject(args.getFrameId());
+ String popError = null;
+ if (stackFrame != null) {
+ try {
+ stackFrame.getDVFrame().popOff();
+ ActionsManager am = DebuggerManager.getDebuggerManager().getCurrentEngine().getActionsManager();
+ am.doAction("stepInto");
+ future.complete(null);
+ } catch (UnsupportedOperationException ex) {
+ popError = Bundle.MSG_FrameRestartUnsupported();
+ } catch (DebuggingView.PopException ex) {
+ popError = Bundle.MSG_FrameRestartFailed(ex.getLocalizedMessage());
+ }
+ }
+ if (popError != null) {
+ ErrorUtilities.completeExceptionally(future, popError, ResponseErrorCode.InvalidParams);
+ }
+ return future;
+ }
+
+ @Override
public CompletableFuture<ScopesResponse> scopes(ScopesArguments args) {
List<Scope> result = new ArrayList<>();
NbFrame stackFrame = (NbFrame) context.getThreadsProvider().getThreadObjects().getObject(args.getFrameId());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists