This is an automated email from the ASF dual-hosted git repository.

junichi11 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 b006691903 PHP: New way to set the current breakpoint
     new a34e57050b Merge pull request #6891 from 
troizet/php_improve_set_current_breakpoint
b006691903 is described below

commit b006691903e5d6188a9a176861782e12a305efb2
Author: Alexey Borokhvostov <troi...@gmail.com>
AuthorDate: Thu Dec 28 00:36:44 2023 +0700

    PHP: New way to set the current breakpoint
---
 .../php/dbgp/breakpoints/BreakpointModel.java      | 53 +++++++++++++++----
 .../php/dbgp/packets/FeatureGetCommand.java        |  5 ++
 .../php/dbgp/packets/FeatureSetResponse.java       | 19 +++++++
 .../modules/php/dbgp/packets/InitMessage.java      |  5 ++
 .../modules/php/dbgp/packets/MessageBuilder.java   |  5 +-
 .../modules/php/dbgp/packets/RunResponse.java      | 60 ++++++++++++++++++++++
 .../modules/php/dbgp/packets/StackGetResponse.java |  2 +-
 7 files changed, 137 insertions(+), 12 deletions(-)

diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/BreakpointModel.java
 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/BreakpointModel.java
index e147d393f8..2125444d93 100644
--- 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/BreakpointModel.java
+++ 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/breakpoints/BreakpointModel.java
@@ -54,6 +54,7 @@ public class BreakpointModel extends ViewModelSupport 
implements NodeModel {
     private static final String EXCEPTION = "TXT_Exception"; // NOI18N
     private static final String PARENS = "()"; // NOI18N
     private final Map<DebugSession, AbstractBreakpoint> myCurrentBreakpoints;
+    private volatile boolean searchCurrentBreakpointById = false;
 
     public BreakpointModel() {
         myCurrentBreakpoints = new WeakHashMap<>();
@@ -179,21 +180,55 @@ public class BreakpointModel extends ViewModelSupport 
implements NodeModel {
                 continue;
             }
             if (acceptor.accept(breakpoint)) {
-                AbstractBreakpoint abpnt = (AbstractBreakpoint) breakpoint;
-                synchronized (myCurrentBreakpoints) {
-                    AbstractBreakpoint bpnt = 
myCurrentBreakpoints.get(session);
-                    myCurrentBreakpoints.put(session, abpnt);
-                    fireChangeEvents(new ModelEvent[]{
-                        new ModelEvent.NodeChanged(this, bpnt),
-                        new ModelEvent.NodeChanged(this, abpnt)
-                    });
-                }
+                updateCurrentBreakpoint(session, breakpoint);
                 return true;
             }
         }
         return false;
     }
 
+    public void setCurrentBreakpoint(DebugSession session, String id) {
+        Breakpoint[] breakpoints = 
DebuggerManager.getDebuggerManager().getBreakpoints();
+        for (Breakpoint breakpoint : breakpoints) {
+            if (canSetCurrentBreakPoint(session, breakpoint, id)) {
+                updateCurrentBreakpoint(session, breakpoint);
+                break;
+            }
+        }
+    }
+
+    private boolean canSetCurrentBreakPoint(DebugSession session, Breakpoint 
breakpoint, String id) {
+        if (Utils.isValid(breakpoint) && breakpoint instanceof 
AbstractBreakpoint) {
+            AbstractBreakpoint abstractBreakpoint = (AbstractBreakpoint) 
breakpoint;
+            if (abstractBreakpoint.isSessionRelated(session)
+                    && abstractBreakpoint.isEnabled()
+                    && abstractBreakpoint.getBreakpointId().equals(id)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void updateCurrentBreakpoint(DebugSession session, Breakpoint 
breakpoint) {
+        AbstractBreakpoint abpnt = (AbstractBreakpoint) breakpoint;
+        synchronized (myCurrentBreakpoints) {
+            AbstractBreakpoint bpnt = myCurrentBreakpoints.get(session);
+            myCurrentBreakpoints.put(session, abpnt);
+            fireChangeEvents(new ModelEvent[]{
+                new ModelEvent.NodeChanged(this, bpnt),
+                new ModelEvent.NodeChanged(this, abpnt)
+            });
+        }
+    }
+
+    public void setSearchCurrentBreakpointById(boolean flag) {
+        searchCurrentBreakpointById = flag;
+    }
+
+    public boolean isSearchCurrentBreakpointById() {
+        return searchCurrentBreakpointById;
+    }
+
     private interface Acceptor {
         boolean accept(Breakpoint breakpoint);
 
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureGetCommand.java 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureGetCommand.java
index a88c3f3daf..0fc28483c1 100644
--- 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureGetCommand.java
+++ 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureGetCommand.java
@@ -36,6 +36,7 @@ public class FeatureGetCommand extends DbgpCommand {
         DATA_ENCODING,
         BREAKPOINT_LANGUAGES,
         BREAKPOINT_TYPES,
+        BREAKPOINT_DETAILS,
         MULTIPLE_SESSIONS,
         MAX_CHILDREN,
         MAX_DATA,
@@ -88,6 +89,10 @@ public class FeatureGetCommand extends DbgpCommand {
         myName = name;
     }
 
+    public String getFeature() {
+        return myName;
+    }
+
     @Override
     protected String getArguments() {
         return NAME_ARG + myName;
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureSetResponse.java
 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureSetResponse.java
index ec34f73ab1..01174bce6e 100644
--- 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureSetResponse.java
+++ 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/FeatureSetResponse.java
@@ -19,6 +19,7 @@
 package org.netbeans.modules.php.dbgp.packets;
 
 import org.netbeans.modules.php.dbgp.DebugSession;
+import org.netbeans.modules.php.dbgp.breakpoints.BreakpointModel;
 import org.w3c.dom.Node;
 
 /**
@@ -28,6 +29,7 @@ import org.w3c.dom.Node;
 public class FeatureSetResponse extends DbgpResponse {
     private static final String SUCCESS = "success"; // NOI18N
     private static final String FEATURE_NAME = "feature_name"; // NOI18N
+    private static final String ERROR = "error"; // NOI18N
 
     FeatureSetResponse(Node node) {
         super(node);
@@ -43,6 +45,23 @@ public class FeatureSetResponse extends DbgpResponse {
 
     @Override
     public void process(DebugSession session, DbgpCommand command) {
+        if (command instanceof FeatureSetCommand) {
+            String feature = ((FeatureSetCommand) command).getFeature();
+            if 
(feature.equals(FeatureGetCommand.Feature.BREAKPOINT_DETAILS.toString())) {
+                Node error = getChild(getNode(), ERROR);
+                setSearchCurrentBreakpointById(session, error == null);
+            }
+        }
+    }
+
+    private void setSearchCurrentBreakpointById(DebugSession session, boolean 
value) {
+        DebugSession.IDESessionBridge bridge = session.getBridge();
+        if (bridge != null) {
+            BreakpointModel breakpointModel = bridge.getBreakpointModel();
+            if (breakpointModel != null) {
+                breakpointModel.setSearchCurrentBreakpointById(value);
+            }
+        }
     }
 
 }
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/InitMessage.java 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/InitMessage.java
index 426de51421..71584df694 100644
--- a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/InitMessage.java
+++ b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/InitMessage.java
@@ -58,6 +58,7 @@ public class InitMessage extends DbgpMessage {
         setMaxDepth(session);
         setMaxChildren(session);
         setMaxDataSize(session);
+        setBreakpointDetails(session);
         setBreakpoints(session);
         negotiateOutputStream(session);
         negotiateRequestedUrls(session);
@@ -82,6 +83,10 @@ public class InitMessage extends DbgpMessage {
         setFeature(session, Feature.SHOW_HIDDEN, "1"); //NOI18N
     }
 
+    private void setBreakpointDetails(DebugSession session) {
+        setFeature(session, Feature.BREAKPOINT_DETAILS, "1"); //NOI18N
+    }
+
     private void setBreakpointResolution(DebugSession session) {
         if (DebuggerOptions.getGlobalInstance().resolveBreakpoints()) {
             setFeature(session, Feature.RESOLVED_BREAKPOINTS, "1"); // NOI18N
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/MessageBuilder.java 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/MessageBuilder.java
index 8aa364a0e1..2e8f5fe065 100644
--- a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/MessageBuilder.java
+++ b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/MessageBuilder.java
@@ -50,13 +50,14 @@ final class MessageBuilder {
 
     static DbgpMessage createResponse(Node node) {
         String command = DbgpMessage.getAttribute(node, DbgpResponse.COMMAND);
-        if (RunCommand.RUN.equals(command)
-                || StatusCommand.STATUS.equals(command)
+        if (StatusCommand.STATUS.equals(command)
                 || StepOutCommand.STEP_OUT.equals(command)
                 || StepOverCommand.STEP_OVER.equals(command)
                 || StepIntoCommand.STEP_INTO.equals(command)
                 || StopCommand.COMMAND.equals(command)) {
             return new StatusResponse(node);
+        } else if (RunCommand.RUN.equals(command)) {
+            return new RunResponse(node);
         } else if (BrkpntSetCommand.BREAKPOINT_SET.equals(command)) {
             return new BrkpntSetResponse(node);
         } else if (BrkpntUpdateCommand.UPDATE.equals(command)) {
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/RunResponse.java 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/RunResponse.java
new file mode 100644
index 0000000000..b24bb489d2
--- /dev/null
+++ b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/RunResponse.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.netbeans.modules.php.dbgp.packets;
+
+import org.netbeans.modules.php.dbgp.DebugSession;
+import org.netbeans.modules.php.dbgp.breakpoints.BreakpointModel;
+import org.w3c.dom.Node;
+
+public class RunResponse extends StatusResponse {
+    private static final String BREAKPOINT = "breakpoint"; //NOI18N
+    private static final String BREAKPOINT_ID = "id"; //NOI18N
+
+    RunResponse(Node node) {
+        super(node);
+    }
+
+    @Override
+    public void process(DebugSession dbgSession, DbgpCommand command) {
+        Status status = getStatus();
+        Reason reason = getReason();
+        if (status != null && reason != null) {
+            dbgSession.processStatus(status, reason, command);
+        }
+
+        Node breakpoint = getChild(getNode(), BREAKPOINT);
+        if (breakpoint != null) {
+            String id = DbgpMessage.getAttribute(breakpoint, BREAKPOINT_ID);
+            if (id != null) {
+                updateBreakpointsView(dbgSession, id);
+            }
+        }
+    }
+
+    private void updateBreakpointsView(DebugSession session, String id) {
+        DebugSession.IDESessionBridge bridge = session.getBridge();
+        if (bridge != null) {
+            BreakpointModel breakpointModel = bridge.getBreakpointModel();
+            if (breakpointModel != null && 
breakpointModel.isSearchCurrentBreakpointById()) {
+                breakpointModel.setCurrentBreakpoint(session, id);
+            }
+        }
+    }
+
+}
diff --git 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/StackGetResponse.java 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/StackGetResponse.java
index 904f2183cd..4b8496f4af 100644
--- 
a/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/StackGetResponse.java
+++ 
b/php/php.dbgp/src/org/netbeans/modules/php/dbgp/packets/StackGetResponse.java
@@ -96,7 +96,7 @@ public class StackGetResponse extends DbgpResponse {
         IDESessionBridge bridge = session.getBridge();
         if (bridge != null) {
             BreakpointModel breakpointModel = bridge.getBreakpointModel();
-            if (breakpointModel != null) {
+            if (breakpointModel != null && 
!breakpointModel.isSearchCurrentBreakpointById()) {
                 breakpointModel.setCurrentStack(
                         stacks.get(0), session);
             }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to