You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/10/28 11:05:09 UTC
[camel] 02/02: Java DSL - Fix classloading to use same loader in the same compilation unit.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 714d9d57b631b47c3d6f896bd83ffe4bb42b0e5a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 28 13:04:41 2022 +0200
Java DSL - Fix classloading to use same loader in the same compilation unit.
---
.../org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java | 2 +-
.../main/java/org/apache/camel/dsl/java/joor/MultiCompile.java | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java
index da1dd726116..ed6f8d8914c 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/ByteArrayClassLoader.java
@@ -22,11 +22,11 @@ import java.util.Map;
* {@link ClassLoader} that loads byte code from a byte array.
*/
final class ByteArrayClassLoader extends ClassLoader {
+
private final Map<String, byte[]> classes;
public ByteArrayClassLoader(Map<String, byte[]> classes) {
super(ByteArrayClassLoader.class.getClassLoader());
-
this.classes = classes;
}
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java
index 66beffe4f74..c275e7f157f 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/MultiCompile.java
@@ -36,7 +36,6 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.StringJoiner;
-import java.util.stream.Collectors;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
@@ -69,8 +68,8 @@ public final class MultiCompile {
/**
* Compiles multiple files as one unit
*
- * @param unit the files to compile in the same unit
- * @return the compilation result
+ * @param unit the files to compile in the same unit
+ * @return the compilation result
*/
public static CompilationUnit.Result compileUnit(CompilationUnit unit) {
CompilationUnit.Result result = CompilationUnit.result();
@@ -137,7 +136,8 @@ public final class MultiCompile {
} else {
// grab detailed error so we can see compilation errors
StringJoiner sj = new StringJoiner("\n");
- dc.getDiagnostics().stream().filter(d -> Diagnostic.Kind.ERROR.equals(d.getKind())).forEach(d -> sj.add(d.toString()));
+ dc.getDiagnostics().stream().filter(d -> Diagnostic.Kind.ERROR.equals(d.getKind()))
+ .forEach(d -> sj.add(d.toString()));
throw new ReflectException("Compilation error:\n" + sj + "\n" + out);
}
}
@@ -146,6 +146,7 @@ public final class MultiCompile {
// We need a private-access lookup from the class in that stack frame in order to get
// private-access to any local interfaces at that location.
int index = 2;
+ ByteArrayClassLoader c = new ByteArrayClassLoader(fileManager.classes());
for (CharSequenceJavaFileObject f : files) {
String className = f.getClassName();
@@ -177,7 +178,6 @@ public final class MultiCompile {
} else {
// Otherwise, use an arbitrary class loader. This approach doesn't allow for
// loading private-access interfaces in the compiled class's type hierarchy
- ByteArrayClassLoader c = new ByteArrayClassLoader(fileManager.classes());
final Map<String, byte[]> byteCodes = new HashMap<>();
Class<?> clazz = fileManager.loadAndReturnMainClass(className,
(name, bytes) -> {