diff options
Diffstat (limited to 'python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java')
-rw-r--r-- | python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java | 50 |
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"; + } + }; + } +} |