You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/30 02:13:51 UTC
[dubbo] branch master updated: optimise compile error message in
jdk compiler.(#8942) (#8943)
This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 7be2ab1 optimise compile error message in jdk compiler.(#8942) (#8943)
7be2ab1 is described below
commit 7be2ab138099aabe4f3a6d81b2be67e66e704b38
Author: violin <84...@qq.com>
AuthorDate: Thu Sep 30 10:13:41 2021 +0800
optimise compile error message in jdk compiler.(#8942) (#8943)
* optimise compile error message in jdk compiler.(#8942)
* update with comment.
* fix maven compile error.
* code format and field name.
---
.../dubbo/common/compiler/support/JdkCompiler.java | 13 ++++++++++-
.../common/compiler/support/JavaCodeTest.java | 25 ++++++++++++++++------
.../common/compiler/support/JdkCompilerTest.java | 17 +++++++++++++++
3 files changed, 48 insertions(+), 7 deletions(-)
diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java
index e5d5b22..41fd9db 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/compiler/support/JdkCompiler.java
@@ -17,6 +17,7 @@
package org.apache.dubbo.common.compiler.support;
+import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
import javax.tools.FileObject;
import javax.tools.ForwardingJavaFileManager;
@@ -28,6 +29,7 @@ import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.StandardLocation;
import javax.tools.ToolProvider;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -122,11 +124,20 @@ public class JdkCompiler extends AbstractCompiler {
Boolean result = compiler.getTask(null, javaFileManager, diagnosticCollector, options,
null, Collections.singletonList(javaFileObject)).call();
if (result == null || !result) {
- throw new IllegalStateException("Compilation failed. class: " + name + ", diagnostics: " + diagnosticCollector);
+ throw new IllegalStateException("Compilation failed. class: " + name + ", diagnostics: " + getCompileErrorMessage(diagnosticCollector));
}
return classLoader.loadClass(name);
}
+ private String getCompileErrorMessage(DiagnosticCollector<JavaFileObject> diagnostics) {
+ StringBuilder sb = new StringBuilder();
+ for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
+ sb.append("\n").append(diagnostic.toString());
+ }
+
+ return sb.toString();
+ }
+
private static final class JavaFileObjectImpl extends SimpleJavaFileObject {
private final CharSequence source;
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java
index 3023044..3d20085 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JavaCodeTest.java
@@ -20,13 +20,13 @@ import java.util.concurrent.atomic.AtomicInteger;
public class JavaCodeTest {
- public static final AtomicInteger SUBFIX = new AtomicInteger(8);
+ public static final AtomicInteger SUFFIX = new AtomicInteger(8);
String getSimpleCode() {
StringBuilder code = new StringBuilder();
code.append("package org.apache.dubbo.common.compiler.support;");
- code.append("public class HelloServiceImpl" + SUBFIX.getAndIncrement() + " implements HelloService {");
+ code.append("public class HelloServiceImpl" + SUFFIX.getAndIncrement() + " implements HelloService {");
code.append(" public String sayHello() { ");
code.append(" return \"Hello world!\"; ");
code.append(" }");
@@ -36,7 +36,7 @@ public class JavaCodeTest {
String getSimpleCodeWithoutPackage(){
StringBuilder code = new StringBuilder();
- code.append("public class HelloServiceImpl" + SUBFIX.getAndIncrement() + "implements org.apache.dubbo.common.compiler.support.HelloService.HelloService {");
+ code.append("public class HelloServiceImpl" + SUFFIX.getAndIncrement() + "implements org.apache.dubbo.common.compiler.support.HelloService.HelloService {");
code.append(" public String sayHello() { ");
code.append(" return \"Hello world!\"; ");
code.append(" }");
@@ -48,7 +48,7 @@ public class JavaCodeTest {
StringBuilder code = new StringBuilder();
code.append("package org.apache.dubbo.common.compiler.support;");
- code.append("public class HelloServiceImpl" + SUBFIX.getAndIncrement() + " implements HelloService {");
+ code.append("public class HelloServiceImpl" + SUFFIX.getAndIncrement() + " implements HelloService {");
code.append(" public String sayHello() { ");
code.append(" return \"Hello world!\"; ");
// code.append(" }");
@@ -76,7 +76,7 @@ public class JavaCodeTest {
code.append("import java.lang.*;\n");
code.append("import org.apache.dubbo.common.compiler.support;\n");
- code.append("public class HelloServiceImpl2" + SUBFIX.getAndIncrement() + " implements HelloService {");
+ code.append("public class HelloServiceImpl2" + SUFFIX.getAndIncrement() + " implements HelloService {");
code.append(" public String sayHello() { ");
code.append(" return \"Hello world!\"; ");
code.append(" }");
@@ -91,11 +91,24 @@ public class JavaCodeTest {
code.append("import java.lang.*;\n");
code.append("import org.apache.dubbo.common.compiler.support;\n");
- code.append("public class HelloServiceImpl" + SUBFIX.getAndIncrement() + " extends org.apache.dubbo.common.compiler.support.HelloServiceImpl0 {\n");
+ code.append("public class HelloServiceImpl" + SUFFIX.getAndIncrement() + " extends org.apache.dubbo.common.compiler.support.HelloServiceImpl0 {\n");
code.append(" public String sayHello() { ");
code.append(" return \"Hello world3!\"; ");
code.append(" }");
code.append("}");
return code.toString();
}
+
+ String getSimpleCodeWithError() {
+ StringBuilder code = new StringBuilder();
+ code.append("package org.apache.dubbo.common.compiler.support;");
+
+ code.append("public class HelloServiceImpl" + SUFFIX.getAndIncrement() + " implements HelloService {");
+ code.append(" public String sayHello( { ");
+ code.append(" return \"Hello world!\"; ");
+ code.append(" }");
+ code.append("}");
+ return code.toString();
+ }
+
}
diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java
index e0bc3a9..7cd207f 100644
--- a/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java
+++ b/dubbo-common/src/test/java/org/apache/dubbo/common/compiler/support/JdkCompilerTest.java
@@ -16,6 +16,10 @@
*/
package org.apache.dubbo.common.compiler.support;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.hamcrest.core.StringContains;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -84,4 +88,17 @@ public class JdkCompilerTest extends JavaCodeTest {
Assertions.assertEquals("Hello world!", sayHello.invoke(instance));
});
}
+
+ @Test
+ public void testGetCompileClassWithError() {
+ Exception exception = null;
+ try {
+ JdkCompiler compiler = new JdkCompiler();
+ compiler.compile(getSimpleCodeWithError(), JdkCompiler.class.getClassLoader());
+ } catch (Exception e) {
+ exception = e;
+ }
+ assertNotNull(exception);
+ assertThat("can not acquire detail error message from exception.", exception.getMessage(), StringContains.containsString("public String sayHello( {"));
+ }
}