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