mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use UrlClassLoader for speedier teamcity test initialization
This commit is contained in:
+14
-9
@@ -28,14 +28,7 @@ import java.util.LinkedHashSet;
|
||||
/**
|
||||
* @author max
|
||||
*/
|
||||
public class ExternalClasspathClassLoader extends URLClassLoader {
|
||||
static {
|
||||
registerAsParallelCapable();
|
||||
}
|
||||
|
||||
private ExternalClasspathClassLoader(URL[] urls) {
|
||||
super(urls, Thread.currentThread().getContextClassLoader());
|
||||
}
|
||||
public class ExternalClasspathClassLoader {
|
||||
|
||||
private static String[] parseUrls(String classpathFilePath) {
|
||||
Collection<String> roots = new LinkedHashSet<>();
|
||||
@@ -79,7 +72,9 @@ public class ExternalClasspathClassLoader extends URLClassLoader {
|
||||
try {
|
||||
URL[] urls = parseUrls();
|
||||
if (urls != null) {
|
||||
Thread.currentThread().setContextClassLoader(new ExternalClasspathClassLoader(urls));
|
||||
URLClassLoader auxLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
|
||||
Thread.currentThread().setContextClassLoader(auxLoader);
|
||||
Thread.currentThread().setContextClassLoader(loadOptimizedLoader(urls, auxLoader));
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
@@ -87,6 +82,16 @@ public class ExternalClasspathClassLoader extends URLClassLoader {
|
||||
}
|
||||
}
|
||||
|
||||
private static ClassLoader loadOptimizedLoader(Object urls, URLClassLoader auxLoader) throws Exception {
|
||||
Object builder = auxLoader.loadClass("com.intellij.util.lang.UrlClassLoader").getMethod("build").invoke(null);
|
||||
builder.getClass().getMethod("urls", URL[].class).invoke(builder, urls);
|
||||
builder.getClass().getMethod("useCache").invoke(builder);
|
||||
builder.getClass().getMethod("allowLock").invoke(builder);
|
||||
builder.getClass().getMethod("allowBootstrapResources").invoke(builder);
|
||||
builder.getClass().getMethod("parent", ClassLoader.class).invoke(builder, auxLoader.getParent());
|
||||
return (ClassLoader)builder.getClass().getMethod("get").invoke(builder);
|
||||
}
|
||||
|
||||
private static URL[] parseUrls() {
|
||||
try {
|
||||
String[] roots = getRoots();
|
||||
|
||||
Reference in New Issue
Block a user