Skip to content

Commit 18853ae

Browse files
author
mgricken
committed
Changed interpreter interface to return pairs of value-type string.
Better type displays for watches, except ambiguity with primitive/boxed types, which cannot be distinguished unless DynamicJava is changed. git-svn-id: file:///tmp/test-svn/trunk@5181 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent a30a550 commit 18853ae

File tree

13 files changed

+128
-700
lines changed

13 files changed

+128
-700
lines changed

drjava/src/edu/rice/cs/drjava/DrJava.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public static synchronized void clearFilesToOpen() {
185185
* running, numAttempts attempts will be made, with WAIT_BEFORE_REMOTE_CONTROL_RETRY
186186
* ms of sleep time in between.
187187
* @param files files to open with remote control
188-
* @param number of attempts to be made
188+
* @param numAttempts of attempts to be made
189189
* @return true if successful
190190
*/
191191
public static synchronized boolean openWithRemoteControl(ArrayList<String> files, int numAttempts) {

drjava/src/edu/rice/cs/drjava/model/debug/jpda/JPDADebugger.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
import edu.rice.cs.drjava.model.debug.*;
6565
import edu.rice.cs.drjava.DrJava;
6666
import edu.rice.cs.drjava.config.OptionConstants;
67-
67+
import edu.rice.cs.plt.tuple.Pair;
6868

6969
import com.sun.jdi.*;
7070
import com.sun.jdi.connect.*;
@@ -90,11 +90,19 @@ public class JPDADebugger implements Debugger {
9090

9191
private static final int OBJECT_COLLECTED_TRIES = 5;
9292

93+
/** Signature of the InterpreterJVM.addInterpreter method.
94+
* @see edu.rice.cs.drjava.model.repl.newjvm.InterpreterJVM#addInterpreter
95+
* @see #_dumpVariablesIntoInterpreterAndSwitch
96+
*/
9397
private static final String ADD_INTERPRETER_SIG =
9498
"(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Class;" +
9599
"[Ljava/lang/Object;[Ljava/lang/String;[Ljava/lang/Class;)V";
96100

97-
private static final String GET_VARIABLE_SIG = "(Ljava/lang/String;)[Ljava/lang/Object;";
101+
/** Signature of the InterpreterJVM.getVariableValue method.
102+
* @see edu.rice.cs.drjava.model.repl.newjvm.InterpreterJVM#getVariableValue
103+
* @see #_copyVariablesFromInterpreter
104+
*/
105+
private static final String GET_VARIABLE_VALUE_SIG = "(Ljava/lang/String;)[Ljava/lang/Object;";
98106

99107
private static final String NEW_INSTANCE_SIG = "(Ljava/lang/Class;I)Ljava/lang/Object;";
100108

@@ -1331,8 +1339,10 @@ private void _hideWatches() {
13311339
// for (int i = 0; i < arr_index.size(); i++) {
13321340
// indices[i] = arr_index.get(i);
13331341
// }
1334-
val = _model.getInteractionsModel().getVariableToString(name);
1335-
type = _model.getInteractionsModel().getVariableType(name);
1342+
Pair<String,String> pair = _model.getInteractionsModel().getVariableToString(name);
1343+
System.out.println("pair==null? "+(pair==null));
1344+
val = pair.first();
1345+
type = pair.second();
13361346

13371347
if (val == null) { w.setNoValue(); }
13381348
else { w.setValue(val); }
@@ -1619,7 +1629,10 @@ private String _getUniqueThreadName(ThreadReference thread) {
16191629
return Long.toString(thread.uniqueID());
16201630
}
16211631

1622-
/** Assumes lock is already held. */
1632+
/** Assumes lock is already held.
1633+
* @see edu.rice.cs.drjava.model.repl.newjvm.InterpreterJVM#getVariableValue()
1634+
* @see #GET_VARIABLE_VALUE_SIG
1635+
* */
16231636
private void _copyVariablesFromInterpreter() throws DebugException {
16241637
// copy variables' values out of interpreter's environment and
16251638
// into the relevant stack frame
@@ -1631,8 +1644,8 @@ private void _copyVariablesFromInterpreter() throws DebugException {
16311644
Value oldVal = _runningThread.frame(0).getValue(var);
16321645
StringReference name = _mirrorString(var.name(), toRelease);
16331646
ArrayReference wrappedVal =
1634-
(ArrayReference) _invokeMethod(_runningThread, _interpreterJVM, "getVariable",
1635-
GET_VARIABLE_SIG, name);
1647+
(ArrayReference) _invokeMethod(_runningThread, _interpreterJVM, "getVariableValue",
1648+
GET_VARIABLE_VALUE_SIG, name);
16361649
if ((wrappedVal != null) && (wrappedVal.length() == 1)) { // if it can't be found (length is 0), just ignore it
16371650
try {
16381651
Value val = wrappedVal.getValue(0);

drjava/src/edu/rice/cs/drjava/model/repl/InteractionsModel.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -301,12 +301,7 @@ private void _prepareToInterpret(String text) {
301301
* @param var the name of the variable
302302
* @return A string representation of the value, or {@code null} if the variable is not defined.
303303
*/
304-
public abstract String getVariableToString(String var);
305-
306-
/** Gets the class name of a variable in the current interpreter.
307-
* @param var the name of the variable
308-
*/
309-
public abstract String getVariableType(String var);
304+
public abstract Pair<String,String> getVariableToString(String var);
310305

311306
/** Resets the Java interpreter with working directory wd. */
312307
public final void resetInterpreter(File wd, boolean force) {

drjava/src/edu/rice/cs/drjava/model/repl/InteractionsModelTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import edu.rice.cs.util.swing.Utilities;
4747
import edu.rice.cs.util.text.ConsoleDocument;
4848
import edu.rice.cs.util.text.EditDocumentException;
49+
import edu.rice.cs.plt.tuple.Pair;
4950

5051
import java.io.File;
5152
import java.io.IOException;
@@ -683,14 +684,10 @@ protected void _notifyInteractionEnded() {
683684
}
684685
}
685686

686-
public String getVariableToString(String var) {
687+
public Pair<String,String> getVariableToString(String var) {
687688
fail("cannot getVariableToString in a test");
688689
return null;
689690
}
690-
public String getVariableType(String var) {
691-
fail("cannot getVariableClassName in a test");
692-
return null;
693-
}
694691

695692
public void addProjectClassPath(File path) { fail("cannot add to classpath in a test"); }
696693
public void addBuildDirectoryClassPath(File path) { fail("cannot add to classpath in a test"); }

drjava/src/edu/rice/cs/drjava/model/repl/RMIInteractionsModel.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,17 +79,13 @@ protected void _interpret(String toEval) {
7979
/** Gets the string representation of the value of a variable in the current interpreter.
8080
* @param var the name of the variable
8181
*/
82-
public String getVariableToString(String var) {
83-
Option<String> result = _jvm.getVariableToString(var);
84-
return result.unwrap("");
85-
}
86-
87-
/** Gets the class name of a variable in the current interpreter.
88-
* @param var the name of the variable
89-
*/
90-
public String getVariableType(String var) {
91-
Option<String> result = _jvm.getVariableType(var);
92-
return result.unwrap("");
82+
public Pair<String,String> getVariableToString(String var) {
83+
System.out.println("getVariableToString: "+var);
84+
Option<Pair<String,String>> result = _jvm.getVariableToString(var);
85+
System.out.println("\tresult.isNone? "+result.isNone());
86+
Pair<String,String> retval = result.unwrap(new Pair<String,String>("",""));
87+
System.out.println("\tretval: "+retval);
88+
return retval;
9389
}
9490

9591
/** Adds the given path to the interpreter's class path.

drjava/src/edu/rice/cs/drjava/model/repl/SimpleInteractionsModel.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
import edu.rice.cs.util.text.ConsoleDocument;
5151
import edu.rice.cs.plt.reflect.ReflectUtil;
5252
import edu.rice.cs.plt.tuple.Option;
53+
import edu.rice.cs.plt.tuple.OptionVisitor;
54+
import edu.rice.cs.plt.tuple.Pair;
5355
import edu.rice.cs.plt.text.TextUtil;
5456

5557
import edu.rice.cs.dynamicjava.Options;
@@ -109,22 +111,22 @@ protected void _interpret(String toEval) {
109111
/** Gets the string representation of the value of a variable in the current interpreter.
110112
* @param var the name of the variable
111113
*/
112-
public String getVariableToString(String var) {
114+
public Pair<String,String> getVariableToString(String var) {
113115
try {
114116
Option<Object> value = _interpreter.interpret(var);
115-
try { return TextUtil.toString(value.unwrap("")); }
117+
try {
118+
return value.apply(new OptionVisitor<Object,Pair<String,String>>() {
119+
public Pair<String,String> forNone() {
120+
return new Pair<String,String>("","");
121+
}
122+
public Pair<String,String> forSome(Object value) {
123+
return new Pair<String,String>(TextUtil.toString(value),value.getClass().getName());
124+
}
125+
});
126+
}
116127
catch (Throwable t) { throw new EvaluatorException(t); }
117128
}
118-
catch (InterpreterException e) { return ""; }
119-
}
120-
121-
/** Gets the class name of a variable in the current interpreter.
122-
* @param var the name of the variable
123-
*/
124-
public String getVariableType(String var) {
125-
return null; // TODO: implement
126-
// Class c = _interpreter.getVariableClass(var);
127-
// return c.getName();
129+
catch (InterpreterException e) { return new Pair<String,String>("",""); }
128130
}
129131

130132
/** Adds the given path to the interpreter's classpath.

drjava/src/edu/rice/cs/drjava/model/repl/newjvm/InterpretResult.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public static interface Visitor<T> {
5656
public T forCharValue(Character val);
5757
public T forNumberValue(Number val);
5858
public T forBooleanValue(Boolean val);
59-
public T forObjectValue(String valString);
59+
public T forObjectValue(String valString, String objTypeStr);
6060
public T forException(String message);
6161
public T forEvalException(String message, StackTraceElement[] stackTrace);
6262
public T forUnexpectedException(Throwable t);
@@ -156,12 +156,16 @@ private static class BooleanValueResult extends InterpretResult {
156156
}
157157

158158

159-
public static InterpretResult objectValue(String objS) { return new ObjectValueResult(objS); }
159+
public static InterpretResult objectValue(String objS, String objTS) { return new ObjectValueResult(objS, objTS); }
160160

161161
private static class ObjectValueResult extends InterpretResult {
162162
private final String _objString;
163-
public ObjectValueResult(String objString) { _objString = objString; }
164-
public <T> T apply(Visitor<T> v) { return v.forObjectValue(_objString); }
163+
private final String _objTypeStr;
164+
public ObjectValueResult(String objString, String objTypeStr) {
165+
_objString = objString;
166+
_objTypeStr = objTypeStr;
167+
}
168+
public <T> T apply(Visitor<T> v) { return v.forObjectValue(_objString, _objTypeStr); }
165169
}
166170

167171
}

0 commit comments

Comments
 (0)