Date: Tue, 7 Oct 2014 10:39:28 -0500
Subject: [PATCH 04/83] JavaRunner: tweak javadoc
---
.../java/org/scijava/plugins/scripting/java/JavaRunner.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java b/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
index bcd8607..f37c926 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
@@ -37,7 +37,7 @@
import org.scijava.plugin.Plugin;
/**
- * A plugin which extends an Java script language's execution handling. A
+ * A plugin which extends the Java script language's execution handling. A
* {@code JavaRunner} knows how to execute certain classes, beyond just Java's
* usual {@code main} method.
*
From 55ee39bc454dae55d61bb5f9051c81aa2bb82a7c Mon Sep 17 00:00:00 2001
From: Johannes Schindelin
Date: Wed, 15 Oct 2014 18:36:32 -0500
Subject: [PATCH 05/83] Bump parent to 3.6
Signed-off-by: Johannes Schindelin
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 7512a32..e1f2734 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.scijava
pom-scijava
- 3.0
+ 3.6
From ae42086b0498d6d19dbfaab9d680f0f95e0316f6 Mon Sep 17 00:00:00 2001
From: Johannes Schindelin
Date: Wed, 15 Oct 2014 18:38:28 -0500
Subject: [PATCH 06/83] Bump to next development cycle
Signed-off-by: Jenkins
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index e1f2734..7d5860c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
scripting-java
- 0.2.5-SNAPSHOT
+ 0.2.6-SNAPSHOT
SciJava Scripting: Java
JSR-223-compliant Java scripting language plugin.
From bef176947f68b997b25dd34884a7e54eac8c7652 Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Wed, 11 Feb 2015 07:01:07 -0600
Subject: [PATCH 07/83] Happy belated New Year 2015
---
LICENSE.txt | 2 +-
.../scijava/plugins/scripting/java/AbstractJavaRunner.java | 2 +-
.../org/scijava/plugins/scripting/java/CommandJavaRunner.java | 2 +-
.../scijava/plugins/scripting/java/DefaultJavaService.java | 4 ++--
.../java/org/scijava/plugins/scripting/java/JavaEngine.java | 2 +-
.../scijava/plugins/scripting/java/JavaEngineBindings.java | 2 +-
.../java/org/scijava/plugins/scripting/java/JavaRunner.java | 2 +-
.../scijava/plugins/scripting/java/JavaScriptLanguage.java | 2 +-
.../java/org/scijava/plugins/scripting/java/JavaService.java | 4 ++--
.../org/scijava/plugins/scripting/java/MainJavaRunner.java | 2 +-
.../org/scijava/plugins/scripting/java/JavaEngineTest.java | 2 +-
.../java/org/scijava/plugins/scripting/java/MakeJarTest.java | 2 +-
src/test/resources/Dummy.java | 2 +-
13 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/LICENSE.txt b/LICENSE.txt
index e896c7f..cce13af 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2008 - 2014, Board of Regents of the University of
+Copyright (c) 2008 - 2015, Board of Regents of the University of
Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
Institute of Molecular Cell Biology and Genetics.
All rights reserved.
diff --git a/src/main/java/org/scijava/plugins/scripting/java/AbstractJavaRunner.java b/src/main/java/org/scijava/plugins/scripting/java/AbstractJavaRunner.java
index d6b362e..9c4165b 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/AbstractJavaRunner.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/AbstractJavaRunner.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/CommandJavaRunner.java b/src/main/java/org/scijava/plugins/scripting/java/CommandJavaRunner.java
index aa61123..37daa90 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/CommandJavaRunner.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/CommandJavaRunner.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/DefaultJavaService.java b/src/main/java/org/scijava/plugins/scripting/java/DefaultJavaService.java
index 2542c46..81b27f7 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/DefaultJavaService.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/DefaultJavaService.java
@@ -1,8 +1,8 @@
/*
* #%L
- * SciJava Common shared library for SciJava software.
+ * JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2009 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 0afe033..a17bbdf 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngineBindings.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngineBindings.java
index d38cf0f..173165c 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngineBindings.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngineBindings.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java b/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
index f37c926..005696c 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaRunner.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaScriptLanguage.java b/src/main/java/org/scijava/plugins/scripting/java/JavaScriptLanguage.java
index ac13d21..0aa43dd 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaScriptLanguage.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaScriptLanguage.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaService.java b/src/main/java/org/scijava/plugins/scripting/java/JavaService.java
index a44ba46..232d1b8 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaService.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaService.java
@@ -1,8 +1,8 @@
/*
* #%L
- * SciJava Common shared library for SciJava software.
+ * JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2009 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/main/java/org/scijava/plugins/scripting/java/MainJavaRunner.java b/src/main/java/org/scijava/plugins/scripting/java/MainJavaRunner.java
index 5486b7c..b4dea91 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/MainJavaRunner.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/MainJavaRunner.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/test/java/org/scijava/plugins/scripting/java/JavaEngineTest.java b/src/test/java/org/scijava/plugins/scripting/java/JavaEngineTest.java
index 8715acf..15bb104 100644
--- a/src/test/java/org/scijava/plugins/scripting/java/JavaEngineTest.java
+++ b/src/test/java/org/scijava/plugins/scripting/java/JavaEngineTest.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/test/java/org/scijava/plugins/scripting/java/MakeJarTest.java b/src/test/java/org/scijava/plugins/scripting/java/MakeJarTest.java
index 76c994a..5729664 100644
--- a/src/test/java/org/scijava/plugins/scripting/java/MakeJarTest.java
+++ b/src/test/java/org/scijava/plugins/scripting/java/MakeJarTest.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
diff --git a/src/test/resources/Dummy.java b/src/test/resources/Dummy.java
index 74474e6..6d168ce 100644
--- a/src/test/resources/Dummy.java
+++ b/src/test/resources/Dummy.java
@@ -2,7 +2,7 @@
* #%L
* JSR-223-compliant Java scripting language plugin.
* %%
- * Copyright (C) 2008 - 2014 Board of Regents of the University of
+ * Copyright (C) 2008 - 2015 Board of Regents of the University of
* Wisconsin-Madison, Broad Institute of MIT and Harvard, and Max Planck
* Institute of Molecular Cell Biology and Genetics.
* %%
From 510a488ab90e21d8d006b027e8ecbfeb49934f5e Mon Sep 17 00:00:00 2001
From: Squareys
Date: Fri, 6 Mar 2015 13:13:01 +0100
Subject: [PATCH 08/83] Add utility method for getting Reader contents as
String
Needed in future recompilation avoidance for hash calculation.
TODO: Move to a utility class?
Signed-off-by: Squareys
---
.../plugins/scripting/java/JavaEngine.java | 23 +++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 9bc7276..44a33d4 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -46,6 +46,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
+import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.JarFile;
@@ -730,4 +731,26 @@ private static void getSurefireBooterURLs(final File file, final URL baseURL,
}
}
+ /**
+ * Read complete contents of a Reader and return as String.
+ *
+ * @param reader {@link Reader} whose output should be returned as String.
+ * @return contents of reader as String.
+ */
+ private static String getReaderContentsAsString(Reader reader) throws IOException {
+ if (reader == null) {
+ return null;
+ }
+
+ CharBuffer buffer = CharBuffer.allocate(1024);
+ StringBuilder builder = new StringBuilder();
+
+ int read;
+ while ((read = reader.read(buffer)) != -1) {
+ builder.append(buffer, 0, read);
+ }
+
+ return builder.toString();
+ }
+
}
From 4913afd3e43279381cb75b7b2f11f8ea816e9061 Mon Sep 17 00:00:00 2001
From: Squareys
Date: Fri, 6 Mar 2015 13:28:18 +0100
Subject: [PATCH 09/83] Swap execution order of compile(String) and
compile(Reader)
This allows us to compute a hash on the script as a String even if it was
input via the gererating Reader. We need to compute the hash for future
recompilation avoidance.
Signed-off-by: Squareys
---
.../plugins/scripting/java/JavaEngine.java | 30 ++++++++++++-------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 44a33d4..fb651cf 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -168,21 +168,14 @@ public Object eval(Reader reader) throws ScriptException {
* @return the compiled Java class as {@link Class}.
*/
public Class> compile(String script) throws ScriptException {
- return compile(new StringReader(script));
- }
-
- /**
- * Compiles and runs the specified {@code .java} class.
- *
- * @param reader the reader producing the source code for a Java class
- * @returns the compiled Java class as {@link Class}.
- */
- public Class> compile(Reader reader) throws ScriptException {
final String path = (String)get(FILENAME);
File file = path == null ? null : new File(path);
final Writer writer = getContext().getErrorWriter();
try {
+ // script may be null, but then we cannot create a StringReader for it,
+ // therefore null is passed if script is null.
+ final Reader reader = (script == null) ? null : new StringReader(script);
final Builder builder = new Builder(file, reader, writer);
final MavenProject project = builder.project;
String mainClass = builder.mainClass;
@@ -229,6 +222,23 @@ public Class> compile(Reader reader) throws ScriptException {
return null;
}
+ /**
+ * Compiles and runs the specified {@code .java} class.
+ *
+ * @param reader the reader producing the source code for a Java class
+ * @return the compiled Java class as {@link Class}.
+ */
+ public Class> compile(Reader reader) throws ScriptException {
+ String script;
+ try {
+ script = getReaderContentsAsString(reader);
+ }
+ catch (IOException e) {
+ throw new ScriptException(e);
+ }
+ return compile(script);
+ }
+
/**
* Compiles the specified {@code .java} file.
*
From fededa42fe77b11b5b2bb7600fa221f70f1cf51c Mon Sep 17 00:00:00 2001
From: Squareys
Date: Fri, 6 Mar 2015 13:33:38 +0100
Subject: [PATCH 10/83] Swap execution order of eval(String) and eval(Reader)
This order is much more efficient with the recently swapped execution order
of compile(String) and compile(Reader). See e663151.
Signed-off-by: Squareys
---
.../plugins/scripting/java/JavaEngine.java | 38 +++++++++++--------
1 file changed, 23 insertions(+), 15 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index fb651cf..00a82e7 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -128,7 +128,23 @@ public class JavaEngine extends AbstractScriptEngine {
*/
@Override
public Object eval(String script) throws ScriptException {
- return eval(new StringReader(script));
+ final Writer writer = getContext().getErrorWriter();
+ try {
+ final Class> clazz = compile(script);
+ javaService.run(clazz);
+ }
+ catch (Exception e) {
+ if (writer != null) {
+ final PrintWriter err = new PrintWriter(writer);
+ e.printStackTrace(err);
+ err.flush();
+ }
+ else {
+ if (e instanceof ScriptException) throw (ScriptException) e;
+ throw new ScriptException(e);
+ }
+ }
+ return null;
}
/**
@@ -143,22 +159,14 @@ public Object eval(String script) throws ScriptException {
*/
@Override
public Object eval(Reader reader) throws ScriptException {
- final Writer writer = getContext().getErrorWriter();
+ String script;
try {
- final Class> clazz = compile(reader);
- javaService.run(clazz);
- } catch (Exception e) {
- if (writer != null) {
- final PrintWriter err = new PrintWriter(writer);
- e.printStackTrace(err);
- err.flush();
- } else {
- if (e instanceof ScriptException)
- throw (ScriptException) e;
- throw new ScriptException(e);
- }
+ script = getReaderContentsAsString(reader);
}
- return null;
+ catch (IOException e) {
+ throw new ScriptException(e);
+ }
+ return eval(script);
}
/**
From 1f8ec6990e9b25e864574178b3d92db956f19a11 Mon Sep 17 00:00:00 2001
From: Squareys
Date: Mon, 9 Mar 2015 12:04:35 +0100
Subject: [PATCH 11/83] Format JavaEngine.java
---
.../plugins/scripting/java/JavaEngine.java | 208 +++++++++++-------
1 file changed, 128 insertions(+), 80 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 00a82e7..016f9b0 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -101,7 +101,8 @@ public class JavaEngine extends AbstractScriptEngine {
/**
* The key to specify how to indent the XML written out by Xalan.
*/
- private final static String XALAN_INDENT_AMOUNT = "{http://xml.apache.org/xslt}indent-amount";
+ private final static String XALAN_INDENT_AMOUNT =
+ "{http://xml.apache.org/xslt}indent-amount";
{
engineScopeBindings = new JavaEngineBindings();
@@ -176,7 +177,7 @@ public Object eval(Reader reader) throws ScriptException {
* @return the compiled Java class as {@link Class}.
*/
public Class> compile(String script) throws ScriptException {
- final String path = (String)get(FILENAME);
+ final String path = (String) get(FILENAME);
File file = path == null ? null : new File(path);
final Writer writer = getContext().getErrorWriter();
@@ -193,8 +194,7 @@ public Class> compile(String script) throws ScriptException {
if (mainClass == null) {
mainClass = project.getMainClass();
if (mainClass == null) {
- throw new ScriptException(
- "No main class found for file " + file);
+ throw new ScriptException("No main class found for file " + file);
}
}
@@ -213,17 +213,19 @@ public Class> compile(String script) throws ScriptException {
// load main class
return classLoader.loadClass(mainClass);
- } finally {
+ }
+ finally {
builder.cleanup();
}
- } catch (Exception e) {
+ }
+ catch (Exception e) {
if (writer != null) {
final PrintWriter err = new PrintWriter(writer);
e.printStackTrace(err);
err.flush();
- } else {
- if (e instanceof ScriptException)
- throw (ScriptException) e;
+ }
+ else {
+ if (e instanceof ScriptException) throw (ScriptException) e;
throw new ScriptException(e);
}
}
@@ -274,7 +276,9 @@ public void compile(final File file, final Writer errorWriter) {
* @param output the {@code .jar} file to write to
* @param errorWriter the destination for error messages
*/
- public void makeJar(final File file, final boolean includeSources, final File output, final Writer errorWriter) {
+ public void makeJar(final File file, final boolean includeSources,
+ final File output, final Writer errorWriter)
+ {
try {
final Builder builder = new Builder(file, null, errorWriter);
try {
@@ -283,10 +287,12 @@ public void makeJar(final File file, final boolean includeSources, final File ou
if (output != null && !target.equals(output)) {
BuildEnvironment.copyFile(target, output);
}
- } finally {
+ }
+ finally {
builder.cleanup();
}
- } catch (Throwable t) {
+ }
+ catch (Throwable t) {
printOrThrow(t, errorWriter);
}
}
@@ -303,7 +309,8 @@ public void makeJar(final File file, final boolean includeSources, final File ou
* @param errorWriter the error writer, or null
*/
private void printOrThrow(Throwable t, Writer errorWriter) {
- RuntimeException e = t instanceof RuntimeException ? (RuntimeException) t
+ RuntimeException e =
+ t instanceof RuntimeException ? (RuntimeException) t
: new RuntimeException(t);
if (errorWriter == null) {
throw e;
@@ -319,6 +326,7 @@ private void printOrThrow(Throwable t, Writer errorWriter) {
* @author Johannes Schindelin
*/
private class Builder {
+
private final PrintStream err;
private final File temporaryDirectory;
private String mainClass;
@@ -327,8 +335,9 @@ private class Builder {
/**
* Constructs a wrapper around a possibly temporary project.
*
- * @param file the {@code .java} file to build (or null, if {@code reader} is set).
- * @param reader provides the Java source if {@code file} is {@code null}
+ * @param file the {@code .java} file to build (or null, if {@code reader}
+ * is set).
+ * @param reader provides the Java source if {@code file} is {@code null}
* @param errorWriter where to write the error output.
* @throws ScriptException
* @throws IOException
@@ -339,13 +348,15 @@ private class Builder {
* @throws TransformerFactoryConfigurationError
*/
private Builder(final File file, final Reader reader,
- final Writer errorWriter) throws ScriptException, IOException,
- ParserConfigurationException, SAXException,
- TransformerConfigurationException, TransformerException,
- TransformerFactoryConfigurationError {
+ final Writer errorWriter) throws ScriptException, IOException,
+ ParserConfigurationException, SAXException,
+ TransformerConfigurationException, TransformerException,
+ TransformerFactoryConfigurationError
+ {
if (errorWriter == null) {
err = null;
- } else {
+ }
+ else {
err = new PrintStream(new LineOutputStream() {
@Override
@@ -358,22 +369,22 @@ public void println(final String line) throws IOException {
boolean verbose = "true".equals(get("verbose"));
boolean debug = "true".equals(get("debug"));
- BuildEnvironment env = new BuildEnvironment(err, true, verbose,
- debug);
+ BuildEnvironment env = new BuildEnvironment(err, true, verbose, debug);
- if (file == null || !file.exists())
- try {
- project = writeTemporaryProject(env, reader);
- temporaryDirectory = project.getDirectory();
- mainClass = project.getMainClass();
- } catch (Exception e) {
- throw new ScriptException(e);
- }
+ if (file == null || !file.exists()) try {
+ project = writeTemporaryProject(env, reader);
+ temporaryDirectory = project.getDirectory();
+ mainClass = project.getMainClass();
+ }
+ catch (Exception e) {
+ throw new ScriptException(e);
+ }
else {
temporaryDirectory = null;
if (file.getName().equals("pom.xml")) {
project = env.parse(file, null);
- } else {
+ }
+ else {
mainClass = getFullClassName(file);
project = getMavenProject(env, file, mainClass);
}
@@ -384,12 +395,11 @@ public void println(final String line) throws IOException {
* Cleans up the project, if it was only temporary.
*/
private void cleanup() {
- if (err != null)
- err.close();
- if (err != null)
- err.close();
- if (temporaryDirectory != null
- && !FileUtils.deleteRecursively(temporaryDirectory)) {
+ if (err != null) err.close();
+ if (err != null) err.close();
+ if (temporaryDirectory != null &&
+ !FileUtils.deleteRecursively(temporaryDirectory))
+ {
temporaryDirectory.deleteOnExit();
}
}
@@ -414,13 +424,17 @@ private void cleanup() {
* @throws TransformerFactoryConfigurationError
*/
private MavenProject getMavenProject(final BuildEnvironment env,
- final File file, final String mainClass) throws IOException,
- ParserConfigurationException, SAXException, ScriptException,
- TransformerConfigurationException, TransformerException,
- TransformerFactoryConfigurationError {
+ final File file, final String mainClass) throws IOException,
+ ParserConfigurationException, SAXException, ScriptException,
+ TransformerConfigurationException, TransformerException,
+ TransformerFactoryConfigurationError
+ {
String path = file.getAbsolutePath();
- if (!path.replace(File.separatorChar, '.').endsWith("." + mainClass + ".java")) {
- throw new ScriptException("Class " + mainClass + " in invalid directory: " + path);
+ if (!path.replace(File.separatorChar, '.').endsWith(
+ "." + mainClass + ".java"))
+ {
+ throw new ScriptException("Class " + mainClass +
+ " in invalid directory: " + path);
}
path = path.substring(0, path.length() - mainClass.length() - 5);
if (path.replace(File.separatorChar, '/').endsWith("/src/main/java/")) {
@@ -446,19 +460,21 @@ private static String getFullClassName(final File file) throws IOException {
name = name.substring(0, name.length() - 5);
String packageName = "";
- final Pattern packagePattern = Pattern.compile("package ([a-zA-Z0-9_.]*).*");
- final Pattern classPattern = Pattern.compile(".*public class ([a-zA-Z0-9_]*).*");
+ final Pattern packagePattern =
+ Pattern.compile("package ([a-zA-Z0-9_.]*).*");
+ final Pattern classPattern =
+ Pattern.compile(".*public class ([a-zA-Z0-9_]*).*");
final BufferedReader reader = new BufferedReader(new FileReader(file));
for (;;) {
String line = reader.readLine().trim();
if (line == null) break;
- outerLoop:
+ outerLoop:
while (line.startsWith("/*")) {
int end = line.indexOf("*/", 2);
while (end < 0) {
- line = reader.readLine();
- if (line == null) break outerLoop;
- end = line.indexOf("*/");
+ line = reader.readLine();
+ if (line == null) break outerLoop;
+ end = line.indexOf("*/");
}
line = line.substring(end + 2).trim();
}
@@ -474,7 +490,8 @@ private static String getFullClassName(final File file) throws IOException {
}
}
reader.close();
- return packageName + name; // the 'package' statement must be the first in the file
+ return packageName + name; // the 'package' statement must be the first in
+ // the file
}
/**
@@ -510,16 +527,20 @@ private static MavenProject writeTemporaryProject(final BuildEnvironment env,
out.close();
final String mainClass = getFullClassName(file);
- final File result = new File(directory, "src/main/java/" + mainClass.replace('.', '/') + ".java");
+ final File result =
+ new File(directory, "src/main/java/" + mainClass.replace('.', '/') +
+ ".java");
if (!result.getParentFile().mkdirs()) {
throw new IOException("Could not make directory for " + result);
}
if (!file.renameTo(result)) {
- throw new IOException("Could not move " + file + " into the correct location");
+ throw new IOException("Could not move " + file +
+ " into the correct location");
}
// write POM
- final String artifactId = mainClass.substring(mainClass.lastIndexOf('.') + 1);
+ final String artifactId =
+ mainClass.substring(mainClass.lastIndexOf('.') + 1);
return fakePOM(env, directory, artifactId, mainClass, true);
}
@@ -535,13 +556,16 @@ private static MavenProject writeTemporaryProject(final BuildEnvironment env,
* @param name the project name
* @return the generated {@code artifactId}
*/
- private static String fakeArtifactId(final BuildEnvironment env, final String name) {
+ private static String fakeArtifactId(final BuildEnvironment env,
+ final String name)
+ {
int dot = name.indexOf('.');
- final String prefix = dot < 0 ? name : dot == 0 ? "dependency" : name.substring(0, dot);
+ final String prefix =
+ dot < 0 ? name : dot == 0 ? "dependency" : name.substring(0, dot);
if (!env.containsProject(DEFAULT_GROUP_ID, prefix)) {
return prefix;
}
- for (int i = 1; ; i++) {
+ for (int i = 1;; i++) {
final String artifactId = prefix + "-" + i;
if (!env.containsProject(DEFAULT_GROUP_ID, artifactId)) {
return artifactId;
@@ -573,17 +597,21 @@ private static String fakeArtifactId(final BuildEnvironment env, final String na
* @throws TransformerFactoryConfigurationError
*/
private static MavenProject fakePOM(final BuildEnvironment env,
- final File directory, final String artifactId, final String mainClass, boolean writePOM)
- throws IOException, ParserConfigurationException, SAXException,
- TransformerConfigurationException, TransformerException,
- TransformerFactoryConfigurationError {
- final Document pom = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ final File directory, final String artifactId, final String mainClass,
+ boolean writePOM) throws IOException, ParserConfigurationException,
+ SAXException, TransformerConfigurationException, TransformerException,
+ TransformerFactoryConfigurationError
+ {
+ final Document pom =
+ DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
final Element project = pom.createElement("project");
pom.appendChild(project);
project.setAttribute("xmlns", "http://maven.apache.org/POM/4.0.0");
- project.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
- project.setAttribute("xsi:schemaLocation", "http://maven.apache.org/POM/4.0.0 " +
- "http://maven.apache.org/xsd/maven-4.0.0.xsd");
+ project.setAttribute("xmlns:xsi",
+ "http://www.w3.org/2001/XMLSchema-instance");
+ project.setAttribute("xsi:schemaLocation",
+ "http://maven.apache.org/POM/4.0.0 "
+ + "http://maven.apache.org/xsd/maven-4.0.0.xsd");
append(pom, project, "groupId", DEFAULT_GROUP_ID);
append(pom, project, "artifactId", artifactId);
@@ -608,12 +636,16 @@ private static MavenProject fakePOM(final BuildEnvironment env,
append(pom, dep, "artifactId", dependency.getArtifactId());
append(pom, dep, "version", dependency.getVersion());
}
- final Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ final Transformer transformer =
+ TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(XALAN_INDENT_AMOUNT, "4");
- if (directory.getPath().replace(File.separatorChar, '/').endsWith("/src/main/java")) {
- final File projectRootDirectory = directory.getParentFile().getParentFile().getParentFile();
+ if (directory.getPath().replace(File.separatorChar, '/').endsWith(
+ "/src/main/java"))
+ {
+ final File projectRootDirectory =
+ directory.getParentFile().getParentFile().getParentFile();
final File pomFile = new File(projectRootDirectory, "pom.xml");
if (!pomFile.exists()) {
final FileWriter writer = new FileWriter(pomFile);
@@ -622,11 +654,13 @@ private static MavenProject fakePOM(final BuildEnvironment env,
}
}
if (writePOM) {
- transformer.transform(new DOMSource(pom), new StreamResult(new File(directory, "pom.xml")));
+ transformer.transform(new DOMSource(pom), new StreamResult(new File(
+ directory, "pom.xml")));
}
final ByteArrayOutputStream out = new ByteArrayOutputStream();
transformer.transform(new DOMSource(pom), new StreamResult(out));
- return env.parse(new ByteArrayInputStream(out.toByteArray()), directory, null, null);
+ return env.parse(new ByteArrayInputStream(out.toByteArray()), directory,
+ null, null);
}
/**
@@ -638,9 +672,12 @@ private static MavenProject fakePOM(final BuildEnvironment env,
* @param content the content of the tag to append
* @return the appended node
*/
- private static Element append(final Document document, final Element parent, final String tag, final String content) {
+ private static Element append(final Document document, final Element parent,
+ final String tag, final String content)
+ {
Element child = document.createElement(tag);
- if (content != null) child.appendChild(document.createCDATASection(content));
+ if (content != null) child
+ .appendChild(document.createCDATASection(content));
parent.appendChild(child);
return child;
}
@@ -660,15 +697,20 @@ private static Element append(final Document document, final Element parent, fin
* @param env the {@link BuildEnvironment} in which the faked POMs are stored
* @return the list of dependencies, as {@link Coordinate}s
*/
- private static List getAllDependencies(final BuildEnvironment env) {
+ private static List
+ getAllDependencies(final BuildEnvironment env)
+ {
final List result = new ArrayList();
- for (ClassLoader loader = Thread.currentThread().getContextClassLoader();
- loader != null; loader = loader.getParent()) {
+ for (ClassLoader loader = Thread.currentThread().getContextClassLoader(); loader != null; loader =
+ loader.getParent())
+ {
if (loader instanceof URLClassLoader) {
- for (final URL url : ((URLClassLoader)loader).getURLs()) {
+ for (final URL url : ((URLClassLoader) loader).getURLs()) {
if (url.getProtocol().equals("file")) {
final File file = new File(url.getPath());
- if (url.toString().matches(".*/target/surefire/surefirebooter[0-9]*\\.jar")) {
+ if (url.toString().matches(
+ ".*/target/surefire/surefirebooter[0-9]*\\.jar"))
+ {
getSurefireBooterURLs(file, url, env, result);
continue;
}
@@ -692,9 +734,12 @@ private static List getAllDependencies(final BuildEnvironment env) {
* @param file the dependency
* @return the {@link Coordinate} specifying the dependency
*/
- private static Coordinate fakeDependency(final BuildEnvironment env, final File file) {
+ private static Coordinate fakeDependency(final BuildEnvironment env,
+ final File file)
+ {
final String artifactId = fakeArtifactId(env, file.getName());
- Coordinate dependency = new Coordinate(DEFAULT_GROUP_ID, artifactId, "1.0.0");
+ Coordinate dependency =
+ new Coordinate(DEFAULT_GROUP_ID, artifactId, "1.0.0");
env.fakePOM(file, dependency);
return dependency;
}
@@ -735,7 +780,8 @@ private static void getSurefireBooterURLs(final File file, final URL baseURL,
if (classPath != null) {
for (final String element : classPath.split(" +"))
try {
- final File dependency = new File(new URL(baseURL, element).getPath());
+ final File dependency =
+ new File(new URL(baseURL, element).getPath());
result.add(fakeDependency(env, dependency));
}
catch (MalformedURLException e) {
@@ -755,7 +801,9 @@ private static void getSurefireBooterURLs(final File file, final URL baseURL,
* @param reader {@link Reader} whose output should be returned as String.
* @return contents of reader as String.
*/
- private static String getReaderContentsAsString(Reader reader) throws IOException {
+ private static String getReaderContentsAsString(Reader reader)
+ throws IOException
+ {
if (reader == null) {
return null;
}
From 040383e0c395a0c6edc603b5c5a033894ddfdbea Mon Sep 17 00:00:00 2001
From: Squareys
Date: Mon, 9 Mar 2015 12:17:34 +0100
Subject: [PATCH 12/83] Add compile(File) method
compile(File, Writer) now uses the context error writer if the specified writer
is null. compile(file) calls compile(File, null), therefore compiles a given
file and writes errors to the context error writer. This maintains the
consistency througout the compile(..) and eval(..) methods.
---
.../plugins/scripting/java/JavaEngine.java | 44 ++++++++++++++-----
1 file changed, 33 insertions(+), 11 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 016f9b0..0024787 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -199,14 +199,14 @@ public Class> compile(String script) throws ScriptException {
}
// make class loader
- String[] paths = project.getClassPath(false).split(
- File.pathSeparator);
+ String[] paths = project.getClassPath(false).split(File.pathSeparator);
URL[] urls = new URL[paths.length];
for (int i = 0; i < urls.length; i++)
- urls[i] = new URL("file:" + paths[i]
- + (paths[i].endsWith(".jar") ? "" : "/"));
- URLClassLoader classLoader = new URLClassLoader(urls,
- Thread.currentThread().getContextClassLoader());
+ urls[i] =
+ new URL("file:" + paths[i] + (paths[i].endsWith(".jar") ? "" : "/"));
+ URLClassLoader classLoader =
+ new URLClassLoader(urls, Thread.currentThread()
+ .getContextClassLoader());
// needed for annotation processing
Thread.currentThread().setContextClassLoader(classLoader);
@@ -250,20 +250,42 @@ public Class> compile(Reader reader) throws ScriptException {
}
/**
- * Compiles the specified {@code .java} file.
+ * Compiles the specified {@code .java} file. Errors are written to the
+ * context error writer.
*
* @param file the source code
- * @param errorWriter where to write the errors
+ * @see #compile(File, Writer)
+ * @see #compile(Reader)
+ * @see #compile(String)
+ */
+ public void compile(final File file) {
+ compile(file, null);
+ }
+
+ /**
+ * Compiles the specified {@code .java} file. Errors are written to the
+ * specified errorWriter or if it is null, to the context error writer.
+ *
+ * @param file the source code
+ * @param errorWriter where to write the errors or null to use context
+ * errorWriter
+ * @see #compile(File)
+ * @see #compile(Reader)
+ * @see #compile(String)
*/
public void compile(final File file, final Writer errorWriter) {
try {
- final Builder builder = new Builder(file, null, errorWriter);
+ final Writer writer =
+ (errorWriter == null) ? getContext().getErrorWriter() : errorWriter;
+ final Builder builder = new Builder(file, null, writer);
try {
builder.project.build();
- } finally {
+ }
+ finally {
builder.cleanup();
}
- } catch (Throwable t) {
+ }
+ catch (Throwable t) {
printOrThrow(t, errorWriter);
}
}
From c2a33d37cc3f453a222af5caa95111ea45411fba Mon Sep 17 00:00:00 2001
From: Squareys
Date: Mon, 9 Mar 2015 12:59:02 +0100
Subject: [PATCH 13/83] Refactor Builder constructor for readability
There are now two constructors which clearly differentiate between creating
a project for a File and creating a project for a Reader.
This makes the calling code easier to read.
To avoid code duplication, two small private methods were added to Builder.
---
.../plugins/scripting/java/JavaEngine.java | 125 +++++++++++++-----
1 file changed, 90 insertions(+), 35 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 0024787..9dff7d7 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -182,10 +182,21 @@ public Class> compile(String script) throws ScriptException {
final Writer writer = getContext().getErrorWriter();
try {
- // script may be null, but then we cannot create a StringReader for it,
- // therefore null is passed if script is null.
- final Reader reader = (script == null) ? null : new StringReader(script);
- final Builder builder = new Builder(file, reader, writer);
+
+ final Builder builder;
+
+ if (file != null && file.exists()) {
+ // if the filename set in engine scope bindings is valid,
+ // ignore the given script and use that file instead.
+ builder = new Builder(file, writer);
+ }
+ else {
+ // script may be null, but then we cannot create a StringReader for it,
+ // therefore null is passed if script is null.
+ final Reader reader =
+ (script == null) ? null : new StringReader(script);
+ builder = new Builder(reader, writer);
+ }
final MavenProject project = builder.project;
String mainClass = builder.mainClass;
@@ -277,7 +288,7 @@ public void compile(final File file, final Writer errorWriter) {
try {
final Writer writer =
(errorWriter == null) ? getContext().getErrorWriter() : errorWriter;
- final Builder builder = new Builder(file, null, writer);
+ final Builder builder = new Builder(file, writer);
try {
builder.project.build();
}
@@ -302,7 +313,7 @@ public void makeJar(final File file, final boolean includeSources,
final File output, final Writer errorWriter)
{
try {
- final Builder builder = new Builder(file, null, errorWriter);
+ final Builder builder = new Builder(file, errorWriter);
try {
builder.project.build(true, true, includeSources);
final File target = builder.project.getTarget();
@@ -346,6 +357,7 @@ private void printOrThrow(Throwable t, Writer errorWriter) {
* A wrapper around a (possibly only temporary) project.
*
* @author Johannes Schindelin
+ * @author Jonathan Hale
*/
private class Builder {
@@ -355,11 +367,11 @@ private class Builder {
private MavenProject project;
/**
- * Constructs a wrapper around a possibly temporary project.
+ * Constructs a wrapper around a possibly project for a source or maven
+ * project file.
*
* @param file the {@code .java} file to build (or null, if {@code reader}
* is set).
- * @param reader provides the Java source if {@code file} is {@code null}
* @param errorWriter where to write the error output.
* @throws ScriptException
* @throws IOException
@@ -369,31 +381,50 @@ private class Builder {
* @throws TransformerException
* @throws TransformerFactoryConfigurationError
*/
- private Builder(final File file, final Reader reader,
- final Writer errorWriter) throws ScriptException, IOException,
- ParserConfigurationException, SAXException,
- TransformerConfigurationException, TransformerException,
+ private Builder(final File file, final Writer errorWriter)
+ throws ScriptException, IOException, ParserConfigurationException,
+ SAXException, TransformerConfigurationException, TransformerException,
TransformerFactoryConfigurationError
{
- if (errorWriter == null) {
- err = null;
- }
- else {
- err = new PrintStream(new LineOutputStream() {
+ err = createErrorPrintStream(errorWriter);
- @Override
- public void println(final String line) throws IOException {
- errorWriter.append(line).append('\n');
- }
+ BuildEnvironment env = createBuildEnvironment();
- });
+ // will throw IOException if file does not exist.
+ temporaryDirectory = null;
+ if (file.getName().equals("pom.xml")) {
+ project = env.parse(file, null);
}
+ else {
+ mainClass = getFullClassName(file);
+ project = getMavenProject(env, file, mainClass);
+ }
+ }
- boolean verbose = "true".equals(get("verbose"));
- boolean debug = "true".equals(get("debug"));
- BuildEnvironment env = new BuildEnvironment(err, true, verbose, debug);
+ /**
+ * Constructs a wrapper around a possibly temporary project for source code
+ * generated by a Reader.
+ *
+ * @param reader provides the Java source if {@code file} is {@code null}
+ * @param errorWriter where to write the error output.
+ * @throws ScriptException
+ * @throws IOException
+ * @throws ParserConfigurationException
+ * @throws SAXException
+ * @throws TransformerConfigurationException
+ * @throws TransformerException
+ * @throws TransformerFactoryConfigurationError
+ */
+ private Builder(final Reader reader, final Writer errorWriter)
+ throws ScriptException, IOException, ParserConfigurationException,
+ SAXException, TransformerConfigurationException, TransformerException,
+ TransformerFactoryConfigurationError
+ {
+ err = createErrorPrintStream(errorWriter);
+
+ BuildEnvironment env = createBuildEnvironment();
- if (file == null || !file.exists()) try {
+ try {
project = writeTemporaryProject(env, reader);
temporaryDirectory = project.getDirectory();
mainClass = project.getMainClass();
@@ -401,16 +432,40 @@ public void println(final String line) throws IOException {
catch (Exception e) {
throw new ScriptException(e);
}
- else {
- temporaryDirectory = null;
- if (file.getName().equals("pom.xml")) {
- project = env.parse(file, null);
- }
- else {
- mainClass = getFullClassName(file);
- project = getMavenProject(env, file, mainClass);
- }
+ }
+
+ /**
+ * Create a {@link PrintStream} from an error {@link Writer}.
+ *
+ * @param errorWriter the {@link Writer} to write errors to.
+ * @return a {@link PrintStream} which writes to errorWriter.
+ */
+ private PrintStream createErrorPrintStream(final Writer errorWriter) {
+ if (errorWriter == null) {
+ return null;
}
+
+ // create a PrintStream which redirects output to errorWriter
+ return new PrintStream(new LineOutputStream() {
+
+ @Override
+ public void println(final String line) throws IOException {
+ errorWriter.append(line).append('\n');
+ }
+
+ });
+ }
+
+ /**
+ * Create a {@link BuildEnvironment} for current engine scope bindings
+ * context.
+ *
+ * @return the created {@link BuildEnvironment}.
+ */
+ private BuildEnvironment createBuildEnvironment() {
+ boolean verbose = "true".equals(get("verbose"));
+ boolean debug = "true".equals(get("debug"));
+ return new BuildEnvironment(err, true, verbose, debug);
}
/**
From 23394b3e00fc87e730233e69205a641961189ce2 Mon Sep 17 00:00:00 2001
From: Squareys
Date: Mon, 9 Mar 2015 13:02:40 +0100
Subject: [PATCH 14/83] Document behaviour of compile and eval methods
When a valid filename is specified by the ScriptEngine.FILENAME key in the
engine scope bindings, the given script will be ignored and the file
described by the filename will be compiled (and run) instead.
Signed-off-by: Squareys
---
.../plugins/scripting/java/JavaEngine.java | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 9dff7d7..c4fdc53 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -118,7 +118,9 @@ public class JavaEngine extends AbstractScriptEngine {
private JavaService javaService;
/**
- * Compiles and runs the specified {@code .java} class.
+ * Compiles and runs the specified {@code .java} class. If a filename is set
+ * in the engine scope bindings via the {@link ScriptEngine#FILENAME} key,
+ * this method compiles that file and runs the resulting main class instead.
*
* The currently active {@link JavaService} is responsible for running the
* class.
@@ -149,7 +151,9 @@ public Object eval(String script) throws ScriptException {
}
/**
- * Compiles and runs the specified {@code .java} class.
+ * Compiles and runs the specified {@code .java} class. If a filename is set
+ * in the engine scope bindings via the {@link ScriptEngine#FILENAME} key,
+ * this method compiles that file and runs the resulting main class instead.
*
* The currently active {@link JavaService} is responsible for running the
* class.
@@ -171,12 +175,16 @@ public Object eval(Reader reader) throws ScriptException {
}
/**
- * Compiles and runs the specified {@code .java} class.
+ * Compiles and runs the specified {@code .java} class. If a filename is set
+ * in the engine scope bindings via the {@link ScriptEngine#FILENAME} key,
+ * this method compiles that file and returns its resulting main class
+ * instead.
*
* @param script the source code for a Java class
* @return the compiled Java class as {@link Class}.
*/
public Class> compile(String script) throws ScriptException {
+ // get filename from engine scope bindings
final String path = (String) get(FILENAME);
File file = path == null ? null : new File(path);
@@ -244,7 +252,10 @@ public Class> compile(String script) throws ScriptException {
}
/**
- * Compiles and runs the specified {@code .java} class.
+ * Compiles and runs the specified {@code .java} class. If a filename is set
+ * in the engine scope bindings via the {@link ScriptEngine#FILENAME} key,
+ * this method compiles that file and returns its resulting main class
+ * instead.
*
* @param reader the reader producing the source code for a Java class
* @return the compiled Java class as {@link Class}.
From 048ff0114f84ebd14738cedbe331dba961805bb3 Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Mon, 16 Mar 2015 12:24:34 -0500
Subject: [PATCH 15/83] Bump parent to pom-scijava 6.0.0
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7d5860c..9a94c78 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,12 +5,12 @@
org.scijava
pom-scijava
- 3.6
+ 6.0.0
scripting-java
- 0.2.6-SNAPSHOT
+ 0.3.0-SNAPSHOT
SciJava Scripting: Java
JSR-223-compliant Java scripting language plugin.
From b8bf9535eb3122dff29fc5b1bccbbf821c0fa7ff Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Mon, 16 Mar 2015 13:44:53 -0500
Subject: [PATCH 16/83] Bump to next development cycle
Signed-off-by: Jenkins
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9a94c78..38030e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
scripting-java
- 0.3.0-SNAPSHOT
+ 0.3.1-SNAPSHOT
SciJava Scripting: Java
JSR-223-compliant Java scripting language plugin.
From 75731c99c66177b9f2f0443b91e4a644910ac214 Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Thu, 19 Mar 2015 12:05:49 -0500
Subject: [PATCH 17/83] JavaEngine: organize imports
---
.../java/org/scijava/plugins/scripting/java/JavaEngine.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 76842c2..102cc0c 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -49,9 +49,9 @@
import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;
+import java.util.jar.Attributes.Name;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
-import java.util.jar.Attributes.Name;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
From 1e9c9fd2906c54def1adeb59c2197954db698d69 Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Thu, 19 Mar 2015 12:05:59 -0500
Subject: [PATCH 18/83] JavaEngine: fix critical buffering bug
This fixes Fiji bug #1029:
http://fiji.sc/bugzilla/show_bug.cgi?id=1029
The CharBuffer has a position which does not get reset, and so length()
returns 0 even when there is data in subsequent read passes. We avoid
the issue by using a simple char[] instead of a new-fangled "object".
Without this change, Java scripts longer than 1024 characters will
produce exceptions like:
java.lang.IndexOutOfBoundsException: start 0, end 582, s.length() 442
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:453)
at java.lang.StringBuilder.append(StringBuilder.java:179)
at org.scijava.plugins.scripting.java.JavaEngine.getReaderContentsAsString(JavaEngine.java:904)
at org.scijava.plugins.scripting.java.JavaEngine.eval(JavaEngine.java:169)
---
.../java/org/scijava/plugins/scripting/java/JavaEngine.java | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
index 102cc0c..93f0cde 100644
--- a/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
+++ b/src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java
@@ -46,7 +46,6 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
-import java.nio.CharBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.jar.Attributes.Name;
@@ -896,7 +895,7 @@ private static String getReaderContentsAsString(Reader reader)
return null;
}
- CharBuffer buffer = CharBuffer.allocate(1024);
+ char[] buffer = new char[1024];
StringBuilder builder = new StringBuilder();
int read;
From 696388047ef656facfee25121d4b6e1646efb9df Mon Sep 17 00:00:00 2001
From: Curtis Rueden
Date: Mon, 23 Mar 2015 13:19:26 -0500
Subject: [PATCH 19/83] Change XML comment style to avoid mixed whitespace
The previous style required leading tabs followed by five spaces.
Consequently, no autoformatting tools supported it, meaning it had
to be done manually every time, and thus there were many
incorrectly formatted comments around.
Let's change to a comment style that uses only leading tabs, and
is hence autoformattable by standard tools.
---
pom.xml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 38030e9..b22dab2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -124,8 +124,10 @@ Institute of Molecular Cell Biology and Genetics.