summaryrefslogtreecommitdiff
path: root/python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java')
-rw-r--r--python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java b/python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java
new file mode 100644
index 000000000000..3698266f66b7
--- /dev/null
+++ b/python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java
@@ -0,0 +1,50 @@
+package com.jetbrains.python.debugger.pydev;
+
+import com.jetbrains.python.debugger.PyDebugValue;
+import com.jetbrains.python.debugger.PyDebuggerException;
+import com.jetbrains.python.debugger.PyReferringObjectsValue;
+
+import java.util.List;
+
+/**
+ * @author traff
+ */
+public class GetReferrersCommand extends RunCustomOperationCommand<List<PyDebugValue>> {
+
+ public GetReferrersCommand(RemoteDebugger target, String threadId, String frameId, PyReferringObjectsValue value) {
+ super(target, createVariableLocator(threadId, frameId, value), "from pydevd_referrers import get_referrer_info",
+ "get_referrer_info");
+ }
+
+ @Override
+ protected ResponseProcessor<List<PyDebugValue>> createResponseProcessor() {
+ return new ResponseProcessor<List<PyDebugValue>>() {
+ @Override
+ protected List<PyDebugValue> parseResponse(ProtocolFrame response) throws PyDebuggerException {
+ return ProtocolParser.parseReferrers(decode(response.getPayload()), getDebugger().getDebugProcess());
+ }
+ };
+ }
+
+
+ private static PyVariableLocator createVariableLocator(final String threadId, final String frameId, final PyReferringObjectsValue var) {
+ return new PyVariableLocator() {
+ @Override
+ public String getThreadId() {
+ return threadId;
+ }
+
+
+ @Override
+ public String getPyDBLocation() {
+ if (var.getId() == null) {
+ return threadId + "\t" + frameId + "\tFRAME\t" + var.getName();
+ }
+ //Ok, this only happens when we're dealing with references with no proper scope given and we need to get
+ //things by id (which is usually not ideal). In this case we keep the proper thread id and set the frame id
+ //as the id of the object to be searched later on based on the list of all alive objects.
+ return getThreadId() + "\t" + var.getId() + "\tBY_ID";
+ }
+ };
+ }
+}