Skip to content

Commit dc25ed1

Browse files
committed
Merge branch 'fix-tmp-proliferation'
See: http://fiji.sc/bugzilla/show_bug.cgi?id=906 Unfortunately, it seems likely that these patches do not actually fix the bug. But I still think they are a step in the right direction.
2 parents e6aa298 + 52b6d50 commit dc25ed1

File tree

1 file changed

+48
-48
lines changed

1 file changed

+48
-48
lines changed

src/main/java/org/scijava/plugins/scripting/java/JavaEngine.java

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -188,50 +188,43 @@ public Class<?> compile(String script) throws ScriptException {
188188
File file = path == null ? null : new File(path);
189189

190190
final Writer writer = getContext().getErrorWriter();
191+
final Builder builder = new Builder();
191192
try {
192-
193-
final Builder builder;
194-
195193
if (file != null && file.exists()) {
196194
// if the filename set in engine scope bindings is valid,
197195
// ignore the given script and use that file instead.
198-
builder = new Builder(file, writer);
196+
builder.initialize(file, writer);
199197
}
200198
else {
201199
// script may be null, but then we cannot create a StringReader for it,
202200
// therefore null is passed if script is null.
203201
final Reader reader =
204202
(script == null) ? null : new StringReader(script);
205-
builder = new Builder(reader, writer);
203+
builder.initialize(reader, writer);
206204
}
207205
final MavenProject project = builder.project;
208206
String mainClass = builder.mainClass;
209207

210-
try {
211-
project.build(true);
208+
project.build(true);
209+
if (mainClass == null) {
210+
mainClass = project.getMainClass();
212211
if (mainClass == null) {
213-
mainClass = project.getMainClass();
214-
if (mainClass == null) {
215-
throw new ScriptException("No main class found for file " + file);
216-
}
212+
throw new ScriptException("No main class found for file " + file);
217213
}
214+
}
218215

219-
// make class loader
220-
String[] paths = project.getClassPath(false).split(File.pathSeparator);
221-
URL[] urls = new URL[paths.length];
222-
for (int i = 0; i < urls.length; i++)
223-
urls[i] =
224-
new URL("file:" + paths[i] + (paths[i].endsWith(".jar") ? "" : "/"));
216+
// make class loader
217+
String[] paths = project.getClassPath(false).split(File.pathSeparator);
218+
URL[] urls = new URL[paths.length];
219+
for (int i = 0; i < urls.length; i++)
220+
urls[i] =
221+
new URL("file:" + paths[i] + (paths[i].endsWith(".jar") ? "" : "/"));
225222

226-
final URLClassLoader classLoader = new URLClassLoader(urls, Thread.currentThread()
227-
.getContextClassLoader());
223+
final URLClassLoader classLoader = new URLClassLoader(urls, Thread.currentThread()
224+
.getContextClassLoader());
228225

229-
// load main class
230-
return classLoader.loadClass(mainClass);
231-
}
232-
finally {
233-
builder.cleanup();
234-
}
226+
// load main class
227+
return classLoader.loadClass(mainClass);
235228
}
236229
catch (Exception e) {
237230
if (writer != null) {
@@ -244,6 +237,9 @@ public Class<?> compile(String script) throws ScriptException {
244237
throw new ScriptException(e);
245238
}
246239
}
240+
finally {
241+
builder.cleanup();
242+
}
247243
return null;
248244
}
249245

@@ -292,20 +288,19 @@ public void compile(final File file) {
292288
* @see #compile(String)
293289
*/
294290
public void compile(final File file, final Writer errorWriter) {
291+
final Writer writer =
292+
(errorWriter == null) ? getContext().getErrorWriter() : errorWriter;
293+
final Builder builder = new Builder();
295294
try {
296-
final Writer writer =
297-
(errorWriter == null) ? getContext().getErrorWriter() : errorWriter;
298-
final Builder builder = new Builder(file, writer);
299-
try {
300-
builder.project.build();
301-
}
302-
finally {
303-
builder.cleanup();
304-
}
295+
builder.initialize(file, writer);
296+
builder.project.build();
305297
}
306298
catch (Throwable t) {
307299
printOrThrow(t, errorWriter);
308300
}
301+
finally {
302+
builder.cleanup();
303+
}
309304
}
310305

311306
/**
@@ -319,22 +314,21 @@ public void compile(final File file, final Writer errorWriter) {
319314
public void makeJar(final File file, final boolean includeSources,
320315
final File output, final Writer errorWriter)
321316
{
317+
final Builder builder = new Builder();
322318
try {
323-
final Builder builder = new Builder(file, errorWriter);
324-
try {
325-
builder.project.build(true, true, includeSources);
326-
final File target = builder.project.getTarget();
327-
if (output != null && !target.equals(output)) {
328-
BuildEnvironment.copyFile(target, output);
329-
}
330-
}
331-
finally {
332-
builder.cleanup();
319+
builder.initialize(file, errorWriter);
320+
builder.project.build(true, true, includeSources);
321+
final File target = builder.project.getTarget();
322+
if (output != null && !target.equals(output)) {
323+
BuildEnvironment.copyFile(target, output);
333324
}
334325
}
335326
catch (Throwable t) {
336327
printOrThrow(t, errorWriter);
337328
}
329+
finally {
330+
builder.cleanup();
331+
}
338332
}
339333

340334
/**
@@ -368,14 +362,17 @@ private void printOrThrow(Throwable t, Writer errorWriter) {
368362
*/
369363
private class Builder {
370364

371-
private final PrintStream err;
372-
private final File temporaryDirectory;
365+
private PrintStream err;
366+
private File temporaryDirectory;
373367
private String mainClass;
374368
private MavenProject project;
375369

376370
/**
377371
* Constructs a wrapper around a possibly project for a source or maven
378372
* project file.
373+
* <p>
374+
* This method is intended to be called only once.
375+
* </p>
379376
*
380377
* @param file the {@code .java} file to build (or null, if {@code reader}
381378
* is set).
@@ -388,7 +385,7 @@ private class Builder {
388385
* @throws TransformerException
389386
* @throws TransformerFactoryConfigurationError
390387
*/
391-
private Builder(final File file, final Writer errorWriter)
388+
private void initialize(final File file, final Writer errorWriter)
392389
throws ScriptException, IOException, ParserConfigurationException,
393390
SAXException, TransformerConfigurationException, TransformerException,
394391
TransformerFactoryConfigurationError
@@ -411,6 +408,9 @@ private Builder(final File file, final Writer errorWriter)
411408
/**
412409
* Constructs a wrapper around a possibly temporary project for source code
413410
* generated by a Reader.
411+
* <p>
412+
* This method is intended to be called only once.
413+
* </p>
414414
*
415415
* @param reader provides the Java source if {@code file} is {@code null}
416416
* @param errorWriter where to write the error output.
@@ -422,7 +422,7 @@ private Builder(final File file, final Writer errorWriter)
422422
* @throws TransformerException
423423
* @throws TransformerFactoryConfigurationError
424424
*/
425-
private Builder(final Reader reader, final Writer errorWriter)
425+
private void initialize(final Reader reader, final Writer errorWriter)
426426
throws ScriptException, IOException, ParserConfigurationException,
427427
SAXException, TransformerConfigurationException, TransformerException,
428428
TransformerFactoryConfigurationError

0 commit comments

Comments
 (0)