diff --git a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceFileObject.java b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceFileObject.java index db0c0dd8c..d7dd33aae 100644 --- a/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceFileObject.java +++ b/hutool-core/src/main/java/cn/hutool/core/compiler/JavaSourceFileObject.java @@ -28,6 +28,11 @@ class JavaSourceFileObject extends SimpleJavaFileObject { */ private InputStream inputStream; + /** + * Source code. + */ + private String sourceCode; + /** * 构造,支持File等路径类型的源码 * @@ -82,9 +87,12 @@ class JavaSourceFileObject extends SimpleJavaFileObject { */ @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { - try(final InputStream in = openInputStream()){ - return IoUtil.readUtf8(in); + if (sourceCode == null) { + try(final InputStream in = openInputStream()){ + sourceCode = IoUtil.readUtf8(in); + } } + return sourceCode; } -} \ No newline at end of file +} diff --git a/hutool-core/src/test/java/cn/hutool/core/compiler/JavaSourceCompilerTest.java b/hutool-core/src/test/java/cn/hutool/core/compiler/JavaSourceCompilerTest.java index 607008231..b62d72a1c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/compiler/JavaSourceCompilerTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/compiler/JavaSourceCompilerTest.java @@ -40,4 +40,17 @@ public class JavaSourceCompilerTest { Assert.assertTrue(String.valueOf(obj).startsWith("c.C@")); } + @Test + public void testErrorCompile() { + Exception exception = null; + try { + CompilerUtil.getCompiler(null) + .addSource(FileUtil.file("test-compile/error/ErrorClazz.java")) + .compile(); + } catch (Exception ex) { + exception = ex; + } finally { + Assert.assertTrue(exception instanceof CompilerException); + } + } } diff --git a/hutool-core/src/test/resources/test-compile/error/ErrorClazz.java b/hutool-core/src/test/resources/test-compile/error/ErrorClazz.java new file mode 100644 index 000000000..b6d2bd999 --- /dev/null +++ b/hutool-core/src/test/resources/test-compile/error/ErrorClazz.java @@ -0,0 +1,8 @@ +package error; + +public class ErrorClazz { + + public static void 123main(String[] args) { + System.out.println("hello world"); + } +}