Skip to content

Commit bb37c63

Browse files
author
dlsmith
committed
Added a "run" check to verify that the main method to be invoked has the correct signature. Updated dynamicjava-base.jar with other improvements for the Interactions pane.
git-svn-id: file:///tmp/test-svn/trunk@4986 fe72c1cf-3628-48e9-8b72-1c46755d3cff
1 parent 36f3a0c commit bb37c63

File tree

6 files changed

+34
-26
lines changed

6 files changed

+34
-26
lines changed

drjava/lib/dynamicjava-base.jar

4.07 KB
Binary file not shown.

drjava/lib/platform.jar

10 Bytes
Binary file not shown.

drjava/lib/plt.jar

-8 Bytes
Binary file not shown.

drjava/lib/readme.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ VERSIONS:
77

88
asm-3.1.jar: ASM 3.1 (http://asm.objectweb.org)
99
docs.jar: docs-20060901-2010
10-
dynamicjava-base.jar: dynamicjava-20090225-r4773
10+
dynamicjava-base.jar: dynamicjava-20090812-r4982
1111
forms-1.0.7.jar: JGoodies Forms
1212
javalanglevels-base.jar: javalanglevels-20090223-r4766
1313
junit.jar: JUnit 4.4
1414
looks-2.1.4.jar: JGoodies Looks
15-
platform.jar: platform-20090103-r4686
16-
plt.jar: plt-20090224-r4770
15+
platform.jar: platform-20090812-r4985
16+
plt.jar: plt-20090812-r4961
1717

1818
buildlib/ant-contrib.jar: ANT Contrib 1.0b3
1919
buildlib/cenquatasks.jar: Distributed with Clover 1.3.9

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -859,14 +859,23 @@ public void performDefaultImports() {
859859
public abstract void _notifyInterpreterReady(File wd);
860860

861861
protected static String _transformJavaCommand(String s) {
862-
return _transformCommand(s,"{0}.main(new String[]'{'{1}'}');");
862+
// check the return type and public access before executing, per bug #1585210
863+
String command = "try '{'\n" +
864+
" java.lang.reflect.Method m = {0}.class.getMethod(\"main\", java.lang.String[].class);\n" +
865+
" if (!m.getReturnType().equals(void.class)) throw new java.lang.NoSuchMethodException();\n" +
866+
"'}'\n" +
867+
"catch (java.lang.NoSuchMethodException e) '{'\n" +
868+
" throw new java.lang.NoSuchMethodError(\"main\");\n" +
869+
"'}'\n" +
870+
"{0}.main(new String[]'{'{1}'}');";
871+
return _transformCommand(s, command);
863872
}
864873

865874
protected static String _transformAppletCommand(String s) {
866875
return _transformCommand(s,"edu.rice.cs.plt.swing.SwingUtil.showApplet(new {0}({1}), 400, 300);");
867876
}
868877

869-
/** Assumes a trimmed String. Returns a string of the call that the interpretor can use.
878+
/** Assumes a trimmed String. Returns a string of the call that the interpreter can use.
870879
* The arguments get formatted as comma-separated list of strings enclosed in quotes.
871880
* Example: _transformCommand("java MyClass arg1 arg2 arg3", "{0}.main(new String[]'{'{1}'}');")
872881
* returns "MyClass.main(new String[]{\"arg1\",\"arg2\",\"arg3\"});"

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

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,13 @@ public void run() {
104104
}
105105

106106
/** Asserts that the given string typed by the user of the form "java classname" is transformed to the given
107-
* expected main method invocation.
107+
* expected main method invocation. An arbitrary prefix may precede the expected string.
108108
* @param typed the "java classname args ..." typed by the user
109109
* @param expected the expected main class call
110110
*/
111-
protected void _assertJavaTransformation(final String typed, final String expected) {
112-
assertEquals("main transformation should match expected",
113-
expected,
114-
TestInteractionsModel._transformJavaCommand(typed));
111+
protected void _assertJavaTransformationTail(final String typed, final String expected) {
112+
assertTrue("main transformation should match expected",
113+
TestInteractionsModel._transformJavaCommand(typed).endsWith(expected));
115114
}
116115

117116
/** Asserts that the given string typed by the user of the form "applet classname" is transformed to the given
@@ -223,23 +222,23 @@ public void testInterpretJavaArguments() {
223222
_log.log("testInterpretJavaArguments started");
224223
// java Foo a b c
225224
// Foo.main(new String[]{"a", "b", "c"});
226-
_assertJavaTransformation("java Foo a b c", "Foo.main(new String[]{\"a\",\"b\",\"c\"});");
225+
_assertJavaTransformationTail("java Foo a b c", "Foo.main(new String[]{\"a\",\"b\",\"c\"});");
227226
// java Foo "a b c"
228227
// Foo.main(new String[]{"a b c"});
229-
_assertJavaTransformation("java Foo \"a b c\"", "Foo.main(new String[]{\"a b c\"});");
228+
_assertJavaTransformationTail("java Foo \"a b c\"", "Foo.main(new String[]{\"a b c\"});");
230229
// java Foo "a b"c d
231230
// Foo.main(new String[]{"a bc", "d"});
232231
// This is different behavior than Unix or DOS, but it's more
233232
// intuitive to the user (and easier to implement).
234-
_assertJavaTransformation("java Foo \"a b\"c d", "Foo.main(new String[]{\"a bc\",\"d\"});");
233+
_assertJavaTransformationTail("java Foo \"a b\"c d", "Foo.main(new String[]{\"a bc\",\"d\"});");
235234

236235
// java Foo c:\\file.txt
237236
// Foo.main("c:\\file.txt");
238-
_assertJavaTransformation("java Foo c:\\\\file.txt", "Foo.main(new String[]{\"c:\\\\file.txt\"});");
237+
_assertJavaTransformationTail("java Foo c:\\\\file.txt", "Foo.main(new String[]{\"c:\\\\file.txt\"});");
239238

240239
// java Foo /home/user/file
241240
// Foo.main("/home/user/file");
242-
_assertJavaTransformation("java Foo /home/user/file", "Foo.main(new String[]{\"/home/user/file\"});");
241+
_assertJavaTransformationTail("java Foo /home/user/file", "Foo.main(new String[]{\"/home/user/file\"});");
243242
_log.log("testInterpretJavaArguments ended");
244243
}
245244

@@ -252,16 +251,16 @@ public void testInterpretJavaEscapedArgs() {
252251
_log.log("testInterpretJavaEscapedArgs started");
253252
// java Foo \j
254253
// Foo.main(new String[]{"j"});
255-
_assertJavaTransformation("java Foo \\j", "Foo.main(new String[]{\"j\"});");
254+
_assertJavaTransformationTail("java Foo \\j", "Foo.main(new String[]{\"j\"});");
256255
// java Foo \"
257256
// Foo.main(new String[]{"\""});
258-
_assertJavaTransformation("java Foo \\\"", "Foo.main(new String[]{\"\\\"\"});");
257+
_assertJavaTransformationTail("java Foo \\\"", "Foo.main(new String[]{\"\\\"\"});");
259258
// java Foo \\
260259
// Foo.main(new String[]{"\\"});
261-
_assertJavaTransformation("java Foo \\\\", "Foo.main(new String[]{\"\\\\\"});");
260+
_assertJavaTransformationTail("java Foo \\\\", "Foo.main(new String[]{\"\\\\\"});");
262261
// java Foo a\ b
263262
// Foo.main(new String[]{"a b"});
264-
_assertJavaTransformation("java Foo a\\ b", "Foo.main(new String[]{\"a b\"});");
263+
_assertJavaTransformationTail("java Foo a\\ b", "Foo.main(new String[]{\"a b\"});");
265264
_log.log("testInterpretJavaEscapedArgs ended");
266265
}
267266

@@ -272,16 +271,16 @@ public void testInterpretJavaQuotedEscapedArgs() {
272271
_log.log("testInterpretJavaQuotedEscapedArgs started");
273272
// java Foo "a \" b"
274273
// Foo.main(new String[]{"a \" b"});
275-
_assertJavaTransformation("java Foo \"a \\\" b\"", "Foo.main(new String[]{\"a \\\" b\"});");
274+
_assertJavaTransformationTail("java Foo \"a \\\" b\"", "Foo.main(new String[]{\"a \\\" b\"});");
276275
// java Foo "\'"
277276
// Foo.main(new String[]{"\\'"});
278-
_assertJavaTransformation("java Foo \"\\'\"", "Foo.main(new String[]{\"\\\\'\"});");
277+
_assertJavaTransformationTail("java Foo \"\\'\"", "Foo.main(new String[]{\"\\\\'\"});");
279278
// java Foo "\\"
280279
// Foo.main(new String[]{"\\"});
281-
_assertJavaTransformation("java Foo \"\\\\\"", "Foo.main(new String[]{\"\\\\\"});");
280+
_assertJavaTransformationTail("java Foo \"\\\\\"", "Foo.main(new String[]{\"\\\\\"});");
282281
// java Foo "\" \d"
283282
// Foo.main(new String[]{"\" \\d"});
284-
_assertJavaTransformation("java Foo \"\\\" \\d\"", "Foo.main(new String[]{\"\\\" \\\\d\"});");
283+
_assertJavaTransformationTail("java Foo \"\\\" \\d\"", "Foo.main(new String[]{\"\\\" \\\\d\"});");
285284
// java Foo "\n"
286285
// Foo.main(new String[]{"\n"});
287286
/* _assertJavaTransformation("java Foo \"\\n\"", "Foo.main(new String[]{\"\\n\"});");
@@ -304,13 +303,13 @@ public void testInterpretJavaQuotedEscapedArgs() {
304303
public void testInterpretJavaSingleQuotedArgs() {
305304
_log.log("testInterpretJavaSingleQuotedArgs started");
306305
// java Foo 'asdf'
307-
_assertJavaTransformation("java Foo 'asdf'", "Foo.main(new String[]{\"asdf\"});");
306+
_assertJavaTransformationTail("java Foo 'asdf'", "Foo.main(new String[]{\"asdf\"});");
308307

309308
// java Foo 'a b c'
310-
_assertJavaTransformation("java Foo 'a b c'", "Foo.main(new String[]{\"a b c\"});");
309+
_assertJavaTransformationTail("java Foo 'a b c'", "Foo.main(new String[]{\"a b c\"});");
311310

312311
// java Foo 'a b'c
313-
_assertJavaTransformation("java Foo 'a b'c", "Foo.main(new String[]{\"a bc\"});");
312+
_assertJavaTransformationTail("java Foo 'a b'c", "Foo.main(new String[]{\"a bc\"});");
314313
_log.log("testInterpretJavaSingleQuotedArgs ended");
315314
}
316315

0 commit comments

Comments
 (0)