You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/04/08 00:00:29 UTC

svn commit: r1310883 - /lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java

Author: uschindler
Date: Sat Apr  7 22:00:28 2012
New Revision: 1310883

URL: http://svn.apache.org/viewvc?rev=1310883&view=rev
Log:
LUCENE-3919: Fix generics and additional checks

Modified:
    lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java

Modified: lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java?rev=1310883&r1=1310882&r2=1310883&view=diff
==============================================================================
--- lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java (original)
+++ lucene/dev/trunk/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestRandomChains.java Sat Apr  7 22:00:28 2012
@@ -24,7 +24,7 @@ import java.lang.reflect.Constructor;
 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.AfterClass;
 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<Class<? extends Tokenizer>> tokenizers;
+  static List<Class<? extends TokenFilter>> tokenfilters;
+  static List<Class<? extends CharStream>> charfilters;
   
   @BeforeClass
   public static void beforeClass() throws Exception {
-    List<Class> analysisClasses = getClassesForPackage("org.apache.lucene.analysis");
-    List<Class> tokenizersList = new ArrayList<Class>();
-    List<Class> tokenfiltersList = new ArrayList<Class>();
-    List<Class> charfiltersList = new ArrayList<Class>();
-    for (Class c : analysisClasses) {
+    List<Class<?>> analysisClasses = getClassesForPackage("org.apache.lucene.analysis");
+    tokenizers = new ArrayList<Class<? extends Tokenizer>>();
+    tokenfilters = new ArrayList<Class<? extends TokenFilter>>();
+    charfilters = new ArrayList<Class<? extends CharStream>>();
+    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 @@ public class TestRandomChains extends Ba
         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<Class>() {
+    final Comparator<Class<?>> classComp = new Comparator<Class<?>>() {
       @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<Class>() {
-      @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<Class>() {
-      @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 @@ public class TestRandomChains extends Ba
         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<? extends Tokenizer> 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<? extends Tokenizer> 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 @@ public class TestRandomChains extends Ba
         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<? extends CharStream> 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<? extends CharStream> 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 @@ public class TestRandomChains extends Ba
         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<? extends TokenFilter> 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<? extends TokenFilter> 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 @@ public class TestRandomChains extends Ba
     }
   }
   
-  private static List<Class> getClassesForPackage(String pckgname) throws Exception {
+  private static List<Class<?>> getClassesForPackage(String pckgname) throws Exception {
     ArrayList<File> directories = new ArrayList<File>();
     ClassLoader cld = Thread.currentThread().getContextClassLoader();
     String path = pckgname.replace('.', '/');
@@ -294,7 +284,7 @@ public class TestRandomChains extends Ba
       directories.add(f);
     }
       
-    ArrayList<Class> classes = new ArrayList<Class>();
+    ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
     for (File directory : directories) {
       if (directory.exists()) {
         String[] files = directory.list();