Skip to content

Commit 294d7e0

Browse files
kamilkrzywanskivelokkrzywanski
authored
fix #853 - repair classloader for spring (#870)
* fix #853 - repair classloader for spring * Fix code format * fix #853 - repair classloader for spring - test * fix #853 - repair classloader for spring - fix code format --------- Co-authored-by: Marvin <[email protected]> Co-authored-by: Marvin Froeder <[email protected]> Co-authored-by: kkrzywanski <[email protected]>
1 parent 91ed513 commit 294d7e0

File tree

3 files changed

+47
-1
lines changed

3 files changed

+47
-1
lines changed

querydsl-tooling/querydsl-codegen-utils/src/main/java/com/querydsl/codegen/utils/JDKEvaluatorFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Collections;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.util.Optional;
2526
import javax.tools.JavaCompiler;
2627
import javax.tools.SimpleJavaFileObject;
2728
import javax.tools.StandardLocation;
@@ -50,7 +51,10 @@ public JDKEvaluatorFactory(ClassLoader parent, JavaCompiler compiler) {
5051
this.fileManager =
5152
new MemFileManager(parent, compiler.getStandardFileManager(null, null, null));
5253
this.compiler = compiler;
53-
this.classpath = SimpleCompiler.getClassPath(parent);
54+
this.classpath =
55+
Optional.of(SimpleCompiler.getClassPath(parent))
56+
.filter(s -> !s.isEmpty())
57+
.orElseGet(() -> SimpleCompiler.getClassPath(compiler.getClass().getClassLoader()));
5458
this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT);
5559
this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none");
5660
}

querydsl-tooling/querydsl-codegen-utils/src/test/java/com/querydsl/codegen/utils/JDKEvaluatorFactoryTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static org.assertj.core.api.Assertions.assertThat;
99

10+
import com.querydsl.codegen.utils.support.ClassLoaderWrapper;
1011
import java.io.IOException;
1112
import java.util.Arrays;
1213
import java.util.Collections;
@@ -153,4 +154,27 @@ private Object evaluate(
153154
constants);
154155
return evaluator.evaluate(args.toArray());
155156
}
157+
158+
@Test
159+
public void CustomClassLoader() {
160+
var source = "a.getName()";
161+
var projectionType = String.class;
162+
var names = Collections.singletonList("a");
163+
var types = Collections.<Class<?>>singletonList(TestEntity.class);
164+
var args = Arrays.asList(new TestEntity("Hello World"));
165+
166+
var classLoader = new ClassLoaderWrapper(getClass().getClassLoader());
167+
var factory = new JDKEvaluatorFactory(classLoader);
168+
169+
assertThat(
170+
factory
171+
.createEvaluator(
172+
"return " + source + ";",
173+
projectionType,
174+
names.toArray(String[]::new),
175+
types.toArray(Class[]::new),
176+
Collections.<String, Object>emptyMap())
177+
.evaluate(args.toArray()))
178+
.isEqualTo("Hello World");
179+
}
156180
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.querydsl.codegen.utils.support;
2+
3+
import java.io.IOException;
4+
import java.net.URL;
5+
import java.net.URLClassLoader;
6+
import java.util.Collections;
7+
import java.util.Enumeration;
8+
9+
public class ClassLoaderWrapper extends URLClassLoader {
10+
public ClassLoaderWrapper(ClassLoader parent) {
11+
super(new URL[0], parent);
12+
}
13+
14+
@Override
15+
public Enumeration<URL> findResources(String name) throws IOException {
16+
return Collections.emptyEnumeration();
17+
}
18+
}

0 commit comments

Comments
 (0)