From 16745f7684a14a9b04dfd088789dfeb12b8979fc Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 2 Sep 2014 16:53:11 +0200 Subject: [PATCH 1/3] Remove unused fields. --- .../python/debugger/PyReferringObjectsValue.java | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java b/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java index 3270421d99f6..73d1e9b25013 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java @@ -24,11 +24,6 @@ import org.jetbrains.annotations.NotNull; public class PyReferringObjectsValue extends PyDebugValue { private static final Logger LOG = Logger.getInstance(PyReferringObjectsValue.class); - //private final boolean myIsField; - - private String myId; - private String myFoundAs; - private final @NotNull PyReferrersLoader myReferrersLoader; public PyReferringObjectsValue(@NotNull String name, @@ -41,7 +36,6 @@ public class PyReferringObjectsValue extends PyDebugValue { public PyReferringObjectsValue(PyDebugValue debugValue) { this(debugValue.getName(), debugValue.getType(), debugValue.getValue(), debugValue.isContainer(), debugValue.isErrorOnEval(), debugValue.getFrameAccessor()); - //myIsField = isField; } @Override @@ -74,13 +68,4 @@ public class PyReferringObjectsValue extends PyDebugValue { public boolean isField() { return false; //TODO } - - public String getId() { - return myId; - } - - public void setReferrerFoundInfo(String id, String foundAs) { - myId = id; - myFoundAs = foundAs; - } } From 73936c8cecde33cdb4400bc98b3633ea9481551a Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 2 Sep 2014 16:54:04 +0200 Subject: [PATCH 2/3] NotNull --- .../com/jetbrains/python/debugger/PyReferringObjectsValue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java b/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java index 73d1e9b25013..283653659d0d 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/PyReferringObjectsValue.java @@ -29,7 +29,7 @@ public class PyReferringObjectsValue extends PyDebugValue { public PyReferringObjectsValue(@NotNull String name, String type, String value, - boolean container, boolean errorOnEval, PyFrameAccessor frameAccessor) { + boolean container, boolean errorOnEval, @NotNull PyFrameAccessor frameAccessor) { super(name, type, value, container, errorOnEval, frameAccessor); myReferrersLoader = frameAccessor.getReferrersLoader(); } From 4dd3e720d95e5d8b488f4d8b00f272d98aa68386 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 2 Sep 2014 17:17:21 +0200 Subject: [PATCH 3/3] Get referrers refactored a bit. --- .../debugger/pydev/AbstractCommand.java | 7 ++- .../debugger/pydev/ConsoleExecCommand.java | 2 +- .../debugger/pydev/GetReferrersCommand.java | 50 +++++++++++++++++++ .../python/debugger/pydev/RemoteDebugger.java | 36 +------------ .../pydev/RunCustomOperationCommand.java | 40 ++++----------- 5 files changed, 67 insertions(+), 68 deletions(-) create mode 100644 python/pydevSrc/com/jetbrains/python/debugger/pydev/GetReferrersCommand.java diff --git a/python/pydevSrc/com/jetbrains/python/debugger/pydev/AbstractCommand.java b/python/pydevSrc/com/jetbrains/python/debugger/pydev/AbstractCommand.java index b2798fb05fdf..f92d8d110b80 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/pydev/AbstractCommand.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/pydev/AbstractCommand.java @@ -42,7 +42,7 @@ public abstract class AbstractCommand { public static final String TAB_CHAR = "@_@TAB_CHAR@_@"; - @NotNull protected final RemoteDebugger myDebugger; + @NotNull private final RemoteDebugger myDebugger; private final int myCommandCode; private final ResponseProcessor myResponseProcessor; @@ -187,6 +187,11 @@ public abstract class AbstractCommand { return command == ERROR; } + @NotNull + public RemoteDebugger getDebugger() { + return myDebugger; + } + protected static class Payload { private final StringBuilder myBuilder = new StringBuilder(); private static final char SEPARATOR = '\t'; diff --git a/python/pydevSrc/com/jetbrains/python/debugger/pydev/ConsoleExecCommand.java b/python/pydevSrc/com/jetbrains/python/debugger/pydev/ConsoleExecCommand.java index 14d8c084a39d..c03890f088e8 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/pydev/ConsoleExecCommand.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/pydev/ConsoleExecCommand.java @@ -28,7 +28,7 @@ public class ConsoleExecCommand extends AbstractFrameCommand { return new ResponseProcessor() { @Override protected String parseResponse(ProtocolFrame response) throws PyDebuggerException { - final PyDebugValue value = ProtocolParser.parseValue(response.getPayload(), myDebugger.getDebugProcess()); + final PyDebugValue value = ProtocolParser.parseValue(response.getPayload(), getDebugger().getDebugProcess()); return value.getValue(); } }; 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> { + + 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> createResponseProcessor() { + return new ResponseProcessor>() { + @Override + protected List 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"; + } + }; + } +} diff --git a/python/pydevSrc/com/jetbrains/python/debugger/pydev/RemoteDebugger.java b/python/pydevSrc/com/jetbrains/python/debugger/pydev/RemoteDebugger.java index 11e4cfe44010..8048a7b62a54 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/pydev/RemoteDebugger.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/pydev/RemoteDebugger.java @@ -160,20 +160,8 @@ public class RemoteDebugger implements ProcessDebugger { final String frameId, final PyReferringObjectsValue var, final PyDebugCallback callback) { - RunCustomOperationCommand cmd = new RunCustomOperationCommand>(this, createVariableLocator(threadId, frameId, var), - "from pydevd_referrers import get_referrer_info", - "get_referrer_info") { + RunCustomOperationCommand cmd = new GetReferrersCommand(this, threadId, frameId, var); - @Override - protected ResponseProcessor> createResponseProcessor() { - return new ResponseProcessor>() { - @Override - protected List parseResponse(ProtocolFrame response) throws PyDebuggerException { - return ProtocolParser.parseReferrers(decode(response.getPayload()), RemoteDebugger.this.getDebugProcess()); - } - }; - } - }; cmd.execute(new PyDebugCallback>() { @Override public void ok(List value) { @@ -191,28 +179,6 @@ public class RemoteDebugger implements ProcessDebugger { }); } - private 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"; - } - }; - } - - @Override public PyDebugValue changeVariable(final String threadId, final String frameId, final PyDebugValue var, final String value) throws PyDebuggerException { diff --git a/python/pydevSrc/com/jetbrains/python/debugger/pydev/RunCustomOperationCommand.java b/python/pydevSrc/com/jetbrains/python/debugger/pydev/RunCustomOperationCommand.java index 622330cba4f1..7a3315b4acce 100644 --- a/python/pydevSrc/com/jetbrains/python/debugger/pydev/RunCustomOperationCommand.java +++ b/python/pydevSrc/com/jetbrains/python/debugger/pydev/RunCustomOperationCommand.java @@ -25,20 +25,19 @@ import java.net.URLEncoder; public class RunCustomOperationCommand extends AbstractCommand { private static final Logger LOG = Logger.getInstance(RunCustomOperationCommand.class); - private String encodedCodeOrFile; - private String operationFnName; - private PyVariableLocator locator; - private String style; - private String responsePayload; + private String myEncodedCodeOrFile; + private String myOperationFnName; + private PyVariableLocator myLocator; + private String myStyle; private RunCustomOperationCommand(RemoteDebugger target, PyVariableLocator locator, String style, String codeOrFile, String operationFnName) { super(target, CMD_RUN_CUSTOM_OPERATION); - this.locator = locator; - this.style = style; - this.encodedCodeOrFile = encode(codeOrFile); - this.operationFnName = operationFnName; + this.myLocator = locator; + this.myStyle = style; + this.myEncodedCodeOrFile = encode(codeOrFile); + this.myOperationFnName = operationFnName; } /** @@ -54,23 +53,10 @@ public class RunCustomOperationCommand extends AbstractCommand { this(target, locator, "EXEC", operationSource, operationFnName); } - /** - * Create a new command to run with the function defined in a file. - * - * @param target Debug Target to run on - * @param locator Location of variable or expression. - * @param operationPyFile Definition of the function to be run (this file is "execfile"d by the target) - * @param operationFnName Function to call, must be defined by operationSource - */ - public RunCustomOperationCommand(RemoteDebugger target, PyVariableLocator locator, - File operationPyFile, String operationFnName) { - this(target, locator, "EXECFILE", operationPyFile.toString(), operationFnName); - } - @Override protected void buildPayload(Payload payload) { - payload.add(locator.getPyDBLocation() + "||" + style).add(encodedCodeOrFile).add(operationFnName); + payload.add(myLocator.getPyDBLocation() + "||" + myStyle).add(myEncodedCodeOrFile).add(myOperationFnName); } @Override @@ -78,14 +64,6 @@ public class RunCustomOperationCommand extends AbstractCommand { return true; } - /** - * Return the response received from the custom command - * @return the response or null if an error or no response has been received. - */ - public String getResponsePayload() { - return responsePayload; - } - private static String encode(String in) { try { return URLEncoder.encode(in, "UTF-8");