This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 7b2b3da Tweak `JavaShell` to compile lazily and rename method name to
align with `GroovyShell`
7b2b3da is described below
commit 7b2b3da4cf965f6895be33ac98e53d1856eef6b7
Author: Daniel Sun <[email protected]>
AuthorDate: Sat Mar 14 20:35:21 2020 +0800
Tweak `JavaShell` to compile lazily and rename method name to align with
`GroovyShell`
It is OK to rename `runMain` to `run` because `JavaShell` is introduced
since 4.0.0 and 4.0.0-alpha-1 has not been released.
---
.../java/org/apache/groovy/util/JavaShell.java | 26 +++++++++++++---------
.../org/apache/groovy/util/JavaShellTest.groovy | 4 ++--
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/src/main/java/org/apache/groovy/util/JavaShell.java
b/src/main/java/org/apache/groovy/util/JavaShell.java
index ee1bd21..c797cb7 100644
--- a/src/main/java/org/apache/groovy/util/JavaShell.java
+++ b/src/main/java/org/apache/groovy/util/JavaShell.java
@@ -90,7 +90,7 @@ public class JavaShell {
* @param args arguments for main method
* @throws Throwable
*/
- public void runMain(String className, String src, String... args) throws
Throwable {
+ public void run(String className, String src, String... args) throws
Throwable {
Class<?> c = compile(className, src);
Method mainMethod = c.getMethod(MAIN_METHOD_NAME, String[].class);
mainMethod.invoke(null, (Object) args);
@@ -105,7 +105,9 @@ public class JavaShell {
* @throws ClassNotFoundException
*/
public Class<?> compile(final String className, String src) throws
IOException, ClassNotFoundException {
- return compileAll(className, src).get(className);
+ doCompile(className, src);
+
+ return jscl.findClass(className);
}
/**
@@ -118,6 +120,18 @@ public class JavaShell {
* @throws ClassNotFoundException
*/
public Map<String, Class<?>> compileAll(final String className, String
src) throws IOException, ClassNotFoundException {
+ doCompile(className, src);
+
+ Map<String, Class<?>> classes = new LinkedHashMap<>();
+ for (String cn : jscl.getClassMap().keySet()) {
+ Class<?> c = jscl.findClass(cn);
+ classes.put(cn, c);
+ }
+
+ return classes;
+ }
+
+ private void doCompile(String className, String src) throws IOException {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
try (BytesJavaFileManager bjfm = new
BytesJavaFileManager(compiler.getStandardFileManager(null, locale, charset))) {
StringBuilderWriter out = new StringBuilderWriter();
@@ -142,14 +156,6 @@ public class JavaShell {
final Map<String, byte[]> classMap = bjfm.getClassMap();
jscl.setClassMap(classMap);
-
- Map<String, Class<?>> classes = new LinkedHashMap<>();
- for (String cn : classMap.keySet()) {
- Class<?> c = jscl.findClass(cn);
- classes.put(cn, c);
- }
-
- return classes;
}
}
diff --git a/src/test/org/apache/groovy/util/JavaShellTest.groovy
b/src/test/org/apache/groovy/util/JavaShellTest.groovy
index 70fa388..144ac2b 100644
--- a/src/test/org/apache/groovy/util/JavaShellTest.groovy
+++ b/src/test/org/apache/groovy/util/JavaShellTest.groovy
@@ -53,11 +53,11 @@ class JavaShellTest {
}
@Test
- void runMain() {
+ void run() {
JavaShell js = new JavaShell()
final mcn = "tests.Test1"
try {
- js.runMain(mcn, '''
+ js.run(mcn, '''
package tests;
public class Test1 {
public static void main(String[] args) {