mirror of https://github.com/apache/lucene.git
LUCENE-3919: Die, context class loader, die. Also don't initialize (run static ctors) unrelated classes!
@UweSays: "If you get the context classloader from a thread, in most cases you are doing something wrong because you don't understand how Java classloading works." git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1310893 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7154c5466d
commit
bdaa79206d
|
@ -55,7 +55,8 @@ public class TestRandomChains extends BaseTokenStreamTestCase {
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void beforeClass() throws Exception {
|
public static void beforeClass() throws Exception {
|
||||||
List<Class<?>> analysisClasses = getClassesForPackage("org.apache.lucene.analysis");
|
List<Class<?>> analysisClasses = new ArrayList<Class<?>>();
|
||||||
|
getClassesForPackage("org.apache.lucene.analysis", analysisClasses);
|
||||||
tokenizers = new ArrayList<Class<? extends Tokenizer>>();
|
tokenizers = new ArrayList<Class<? extends Tokenizer>>();
|
||||||
tokenfilters = new ArrayList<Class<? extends TokenFilter>>();
|
tokenfilters = new ArrayList<Class<? extends TokenFilter>>();
|
||||||
charfilters = new ArrayList<Class<? extends CharStream>>();
|
charfilters = new ArrayList<Class<? extends CharStream>>();
|
||||||
|
@ -274,17 +275,16 @@ public class TestRandomChains extends BaseTokenStreamTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Class<?>> getClassesForPackage(String pckgname) throws Exception {
|
private static void getClassesForPackage(String pckgname, List<Class<?>> classes) throws Exception {
|
||||||
ArrayList<File> directories = new ArrayList<File>();
|
final ArrayList<File> directories = new ArrayList<File>();
|
||||||
ClassLoader cld = Thread.currentThread().getContextClassLoader();
|
final ClassLoader cld = TestRandomChains.class.getClassLoader();
|
||||||
String path = pckgname.replace('.', '/');
|
final String path = pckgname.replace('.', '/');
|
||||||
Enumeration<URL> resources = cld.getResources(path);
|
final Enumeration<URL> resources = cld.getResources(path);
|
||||||
while (resources.hasMoreElements()) {
|
while (resources.hasMoreElements()) {
|
||||||
final File f = new File(resources.nextElement().toURI());
|
final File f = new File(resources.nextElement().toURI());
|
||||||
directories.add(f);
|
directories.add(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
|
|
||||||
for (File directory : directories) {
|
for (File directory : directories) {
|
||||||
if (directory.exists()) {
|
if (directory.exists()) {
|
||||||
String[] files = directory.list();
|
String[] files = directory.list();
|
||||||
|
@ -292,19 +292,20 @@ public class TestRandomChains extends BaseTokenStreamTestCase {
|
||||||
if (new File(directory, file).isDirectory()) {
|
if (new File(directory, file).isDirectory()) {
|
||||||
// recurse
|
// recurse
|
||||||
String subPackage = pckgname + "." + file;
|
String subPackage = pckgname + "." + file;
|
||||||
classes.addAll(getClassesForPackage(subPackage));
|
getClassesForPackage(subPackage, classes);
|
||||||
}
|
}
|
||||||
if (file.endsWith(".class")) {
|
if (file.endsWith(".class")) {
|
||||||
String clazzName = file.substring(0, file.length() - 6);
|
String clazzName = file.substring(0, file.length() - 6);
|
||||||
// exclude Test classes that happen to be in these packages.
|
// exclude Test classes that happen to be in these packages.
|
||||||
// class.ForName'ing some of them can cause trouble.
|
// class.ForName'ing some of them can cause trouble.
|
||||||
if (!clazzName.endsWith("Test") && !clazzName.startsWith("Test")) {
|
if (!clazzName.endsWith("Test") && !clazzName.startsWith("Test")) {
|
||||||
classes.add(Class.forName(pckgname + '.' + clazzName));
|
// Don't run static initializers, as we won't use most of them.
|
||||||
|
// Java will do that automatically once accessed/instantiated.
|
||||||
|
classes.add(Class.forName(pckgname + '.' + clazzName, false, cld));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return classes;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue