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) -> {