Commit 83d4d94e authored by Phillip Webb's avatar Phillip Webb

Cache ModifiedClassPathClassLoaders

Closes gh-18694
parent 8d08d654
......@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.regex.Pattern;
......@@ -50,6 +51,7 @@ import org.eclipse.aether.transport.http.HttpTransporterFactory;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.ConcurrentReferenceHashMap;
import org.springframework.util.StringUtils;
/**
......@@ -60,6 +62,8 @@ import org.springframework.util.StringUtils;
*/
final class ModifiedClassPathClassLoader extends URLClassLoader {
private static final Map<Class<?>, ModifiedClassPathClassLoader> cache = new ConcurrentReferenceHashMap<>();
private static final Pattern INTELLIJ_CLASSPATH_JAR_PATTERN = Pattern.compile(".*classpath(\\d+)?\\.jar");
private final ClassLoader junitLoader;
......@@ -78,6 +82,10 @@ final class ModifiedClassPathClassLoader extends URLClassLoader {
}
static ModifiedClassPathClassLoader get(Class<?> testClass) {
return cache.computeIfAbsent(testClass, ModifiedClassPathClassLoader::compute);
}
private static ModifiedClassPathClassLoader compute(Class<?> testClass) {
ClassLoader classLoader = testClass.getClassLoader();
return new ModifiedClassPathClassLoader(processUrls(extractUrls(classLoader), testClass),
classLoader.getParent(), classLoader);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment