Index: modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java =================================================================== --- modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (revision 1310867) +++ modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (working copy) @@ -24,7 +24,7 @@ import java.lang.reflect.Modifier; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.Comparator; import java.util.Enumeration; import java.util.List; @@ -48,21 +48,23 @@ import org.junit.BeforeClass; /** tests random analysis chains */ -@SuppressWarnings({"unchecked", "rawtypes"}) // broken generics public class TestRandomChains extends BaseTokenStreamTestCase { - static Class[] tokenizers; - static Class[] tokenfilters; - static Class[] charfilters; + static List> tokenizers; + static List> tokenfilters; + static List> charfilters; @BeforeClass public static void beforeClass() throws Exception { - List analysisClasses = getClassesForPackage("org.apache.lucene.analysis"); - List tokenizersList = new ArrayList(); - List tokenfiltersList = new ArrayList(); - List charfiltersList = new ArrayList(); - for (Class c : analysisClasses) { + List> analysisClasses = getClassesForPackage("org.apache.lucene.analysis"); + tokenizers = new ArrayList>(); + tokenfilters = new ArrayList>(); + charfilters = new ArrayList>(); + for (Class c : analysisClasses) { // don't waste time with abstract classes or deprecated known-buggy ones - if (Modifier.isAbstract(c.getModifiers()) || c.getAnnotation(Deprecated.class) != null + final int modifiers = c.getModifiers(); + if (Modifier.isAbstract(modifiers) || !Modifier.isPublic(modifiers) + || c.getAnnotation(Deprecated.class) != null + || c.isSynthetic() || c.isAnonymousClass() || c.isMemberClass() || c.isInterface() // TODO: fix basetokenstreamtestcase not to trip because this one has no CharTermAtt || c.equals(EmptyTokenizer.class) // doesn't actual reset itself! @@ -78,38 +80,26 @@ continue; } if (Tokenizer.class.isAssignableFrom(c)) { - tokenizersList.add(c); + tokenizers.add(c.asSubclass(Tokenizer.class)); } else if (TokenFilter.class.isAssignableFrom(c)) { - tokenfiltersList.add(c); + tokenfilters.add(c.asSubclass(TokenFilter.class)); } else if (CharStream.class.isAssignableFrom(c)) { - charfiltersList.add(c); + charfilters.add(c.asSubclass(CharStream.class)); } } - tokenizers = tokenizersList.toArray(new Class[0]); - Arrays.sort(tokenizers, new Comparator() { + final Comparator> classComp = new Comparator>() { @Override - public int compare(Class arg0, Class arg1) { + public int compare(Class arg0, Class arg1) { return arg0.getName().compareTo(arg1.getName()); } - }); - tokenfilters = tokenfiltersList.toArray(new Class[0]); - Arrays.sort(tokenfilters, new Comparator() { - @Override - public int compare(Class arg0, Class arg1) { - return arg0.getName().compareTo(arg1.getName()); - } - }); - charfilters = charfiltersList.toArray(new Class[0]); - Arrays.sort(charfilters, new Comparator() { - @Override - public int compare(Class arg0, Class arg1) { - return arg0.getName().compareTo(arg1.getName()); - } - }); + }; + Collections.sort(tokenizers, classComp); + Collections.sort(tokenfilters, classComp); + Collections.sort(charfilters, classComp); if (VERBOSE) { - System.out.println("tokenizers = " + Arrays.toString(tokenizers)); - System.out.println("tokenfilters = " + Arrays.toString(tokenfilters)); - System.out.println("charfilters = " + Arrays.toString(charfilters)); + System.out.println("tokenizers = " + tokenizers); + System.out.println("tokenfilters = " + tokenfilters); + System.out.println("charfilters = " + charfilters); } } @@ -170,15 +160,15 @@ try { // TODO: check Reader+Version,Version+Reader too // also look for other variants and handle them special - int idx = random.nextInt(tokenizers.length); + int idx = random.nextInt(tokenizers.size()); try { - Constructor c = tokenizers[idx].getConstructor(Version.class, Reader.class); - spec.tokenizer = (Tokenizer) c.newInstance(TEST_VERSION_CURRENT, reader); + Constructor c = tokenizers.get(idx).getConstructor(Version.class, Reader.class); + spec.tokenizer = c.newInstance(TEST_VERSION_CURRENT, reader); } catch (NoSuchMethodException e) { - Constructor c = tokenizers[idx].getConstructor(Reader.class); - spec.tokenizer = (Tokenizer) c.newInstance(reader); + Constructor c = tokenizers.get(idx).getConstructor(Reader.class); + spec.tokenizer = c.newInstance(reader); } - spec.toString = tokenizers[idx].toString(); + spec.toString = tokenizers.get(idx).toString(); success = true; } catch (Exception e) { // ignore @@ -197,19 +187,19 @@ while (!success) { try { // TODO: also look for other variants and handle them special - int idx = random.nextInt(charfilters.length); + int idx = random.nextInt(charfilters.size()); try { - Constructor c = charfilters[idx].getConstructor(Reader.class); - spec.reader = (Reader) c.newInstance(spec.reader); + Constructor c = charfilters.get(idx).getConstructor(Reader.class); + spec.reader = c.newInstance(spec.reader); } catch (NoSuchMethodException e) { - Constructor c = charfilters[idx].getConstructor(CharStream.class); - spec.reader = (Reader) c.newInstance(CharReader.get(spec.reader)); + Constructor c = charfilters.get(idx).getConstructor(CharStream.class); + spec.reader = c.newInstance(CharReader.get(spec.reader)); } if (descr.length() > 0) { descr.append(","); } - descr.append(charfilters[idx].toString()); + descr.append(charfilters.get(idx).toString()); success = true; } catch (Exception e) { // ignore @@ -230,18 +220,18 @@ while (!success) { try { // TODO: also look for other variants and handle them special - int idx = random.nextInt(tokenfilters.length); + int idx = random.nextInt(tokenfilters.size()); try { - Constructor c = tokenfilters[idx].getConstructor(Version.class, TokenStream.class); - spec.stream = (TokenFilter) c.newInstance(TEST_VERSION_CURRENT, spec.stream); + Constructor c = tokenfilters.get(idx).getConstructor(Version.class, TokenStream.class); + spec.stream = c.newInstance(TEST_VERSION_CURRENT, spec.stream); } catch (NoSuchMethodException e) { - Constructor c = tokenfilters[idx].getConstructor(TokenStream.class); - spec.stream = (TokenFilter) c.newInstance(spec.stream); + Constructor c = tokenfilters.get(idx).getConstructor(TokenStream.class); + spec.stream = c.newInstance(spec.stream); } if (descr.length() > 0) { descr.append(","); } - descr.append(tokenfilters[idx].toString()); + descr.append(tokenfilters.get(idx).toString()); success = true; } catch (Exception e) { // ignore @@ -284,7 +274,7 @@ } } - private static List getClassesForPackage(String pckgname) throws Exception { + private static List> getClassesForPackage(String pckgname) throws Exception { ArrayList directories = new ArrayList(); ClassLoader cld = Thread.currentThread().getContextClassLoader(); String path = pckgname.replace('.', '/'); @@ -294,7 +284,7 @@ directories.add(f); } - ArrayList classes = new ArrayList(); + ArrayList> classes = new ArrayList>(); for (File directory : directories) { if (directory.exists()) { String[] files = directory.list();