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 55af0b6  Fix of tooltip and evaluations of Truffle languages through 
LSP.
     new 136adc0  Merge pull request #2675 from entlicher/LSPTruffleEval
55af0b6 is described below

commit 55af0b660b154a9a2c15a316c1fd41be75b42431
Author: Martin Entlicher <[email protected]>
AuthorDate: Wed Jan 13 14:07:44 2021 +0100

    Fix of tooltip and evaluations of Truffle languages through LSP.
---
 .../jpda/truffle/vars/impl/TruffleEvaluator.java   |  6 ++--
 .../modules/debugger/jpda/JPDADebuggerImpl.java    | 37 ++++++++++++++--------
 .../modules/debugger/jpda/JavaEvaluator.java       |  2 +-
 .../lsp/server/debugging/NbProtocolServer.java     |  2 +-
 4 files changed, 27 insertions(+), 20 deletions(-)

diff --git 
a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/impl/TruffleEvaluator.java
 
b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/impl/TruffleEvaluator.java
index 0775584..de82b42 100644
--- 
a/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/impl/TruffleEvaluator.java
+++ 
b/java/debugger.jpda.truffle/src/org/netbeans/modules/debugger/jpda/truffle/vars/impl/TruffleEvaluator.java
@@ -19,7 +19,6 @@
 
 package org.netbeans.modules.debugger.jpda.truffle.vars.impl;
 
-import org.netbeans.api.debugger.jpda.CallStackFrame;
 import org.netbeans.api.debugger.jpda.InvalidExpressionException;
 import org.netbeans.api.debugger.jpda.JPDADebugger;
 import org.netbeans.api.debugger.jpda.ObjectVariable;
@@ -53,12 +52,11 @@ public class TruffleEvaluator implements 
Evaluator<TruffleExpression> {
             expr = TruffleExpression.parse(expression.getExpression());
             expression.setPreprocessedObject(expr);
         }
-        Variable ret = evaluateIn(expr, context.getCallStackFrame(), 
contextVariable);
+        Variable ret = evaluateIn(expr);
         return new Result(ret);
     }
 
-    private Variable evaluateIn(TruffleExpression expr, CallStackFrame 
callStackFrame, ObjectVariable contextVar) throws InvalidExpressionException {
-        //return DebuggerSupport.evaluate(debugger, callStackFrame, 
expr.getExpression(), contextVar);
+    private Variable evaluateIn(TruffleExpression expr) throws 
InvalidExpressionException {
         return TruffleEval.evaluate(debugger, expr.getExpression());
     }
     
diff --git 
a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JPDADebuggerImpl.java
 
b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JPDADebuggerImpl.java
index 7dc72e9..c84c44d 100644
--- 
a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JPDADebuggerImpl.java
+++ 
b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JPDADebuggerImpl.java
@@ -884,12 +884,16 @@ public class JPDADebuggerImpl extends JPDADebugger {
                 }
             }
         }
-        if (csf == null) {
+        JPDAThread frameThread;
+        if (csf != null) {
+            frameThread = csf.getThread();
+        } else {
+            frameThread = getCurrentThread();
+        }
+        if (frameThread == null) {
             throw new InvalidExpressionException
-                (NbBundle.getMessage(JPDADebuggerImpl.class, 
"MSG_NoCurrentContextStackFrame"));
+                (NbBundle.getMessage(JPDADebuggerImpl.class, 
"MSG_NoCurrentContext"));
         }
-
-        JPDAThread frameThread = csf.getThread();
         JPDAThreadImpl frameThreadImpl = (JPDAThreadImpl) frameThread;
         //Object pendingAction = frameThreadImpl.getPendingAction();
         //if (pendingAction != null) { For the case that evaluation should be 
blocked by pending action
@@ -918,8 +922,8 @@ public class JPDADebuggerImpl extends JPDADebugger {
             Evaluator.Result result;
             final JPDAThreadImpl[] resumedThread = new JPDAThreadImpl[] { null 
};
             try {
-                StackFrame sf = csf.getStackFrame();
-                int stackDepth = csf.getFrameDepth();
+                StackFrame sf = csf != null ? csf.getStackFrame() : null;
+                int stackDepth = csf != null ? csf.getFrameDepth() : -1;
                 final ThreadReference tr = 
frameThreadImpl.getThreadReference();
                 Runnable methodToBeInvokedNotifier = new Runnable() {
                         @Override
@@ -940,16 +944,21 @@ public class JPDADebuggerImpl extends JPDADebugger {
                             }
                         }
                     };
-                Lookup context;
+                List<Object> lookupVars = new ArrayList<>();
+                lookupVars.add(frameThread);
+                lookupVars.add(stackDepth);
+                if (csf != null) {
+                    lookupVars.add(csf);
+                    lookupVars.add(sf);
+                }
                 if (var != null) {
-                    if (v != null) {
-                        context = Lookups.fixed(csf, var, sf, stackDepth, v, 
methodToBeInvokedNotifier);
-                    } else {
-                        context = Lookups.fixed(csf, var, sf, stackDepth, 
methodToBeInvokedNotifier);
-                    }
-                } else {
-                    context = Lookups.fixed(csf, sf, stackDepth, 
methodToBeInvokedNotifier);
+                    lookupVars.add(var);
+                }
+                if (v != null) {
+                    lookupVars.add(v);
                 }
+                lookupVars.add(methodToBeInvokedNotifier);
+                Lookup context = Lookups.fixed(lookupVars.toArray());
                 result = expression.evaluate(e, new 
Evaluator.Context(context));
             } catch (InternalExceptionWrapper ex) {
                 return null;
diff --git 
a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JavaEvaluator.java 
b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JavaEvaluator.java
index fddaf22..1f0417e 100644
--- 
a/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JavaEvaluator.java
+++ 
b/java/debugger.jpda/src/org/netbeans/modules/debugger/jpda/JavaEvaluator.java
@@ -118,7 +118,7 @@ public class JavaEvaluator implements 
Evaluator<JavaExpression> {
         // should be already synchronized on the frame's thread
         if (csf == null)
             throw new InvalidExpressionException
-                    (NbBundle.getMessage(JPDADebuggerImpl.class, 
"MSG_NoCurrentContext"));
+                    (NbBundle.getMessage(JPDADebuggerImpl.class, 
"MSG_NoCurrentContextStackFrame"));
 
         // TODO: get imports from the source file
         CallStackFrameImpl csfi = (CallStackFrameImpl) csf;
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 73d83fc..6b274d2 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
@@ -433,7 +433,7 @@ public final class NbProtocolServer implements 
IDebugProtocolServer {
                 response.setResult(truffleVariable.getDisplayValue());
                 response.setVariablesReference(referenceId);
                 response.setType(truffleVariable.getType());
-                response.setIndexedVariables(truffleVariable.isLeaf() ? 0 : 
Integer.MAX_VALUE);
+                response.setIndexedVariables(truffleVariable.isLeaf() ? 0 : 
truffleVariable.getChildren().length);
             } else {
                 if (variable instanceof ObjectVariable) {
                     int referenceId = 
context.getThreadsProvider().getThreadObjects().addObject(threadId, variable);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

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

Reply via email to