public static void BeforeClass() { IEnumerable <Type> analysisClasses = typeof(StandardAnalyzer).Assembly.GetTypes() .Where(c => !c.IsAbstract && c.IsPublic && !c.IsInterface && c.IsClass && (c.GetCustomAttribute <ObsoleteAttribute>() == null) && (c.IsSubclassOf(typeof(Tokenizer)) || c.IsSubclassOf(typeof(TokenFilter)) || c.IsSubclassOf(typeof(CharFilter)))).ToArray(); tokenizers = new List <ConstructorInfo>(); tokenfilters = new List <ConstructorInfo>(); charfilters = new List <ConstructorInfo>(); foreach (Type c in analysisClasses) { foreach (ConstructorInfo ctor in c.GetConstructors()) { if (ctor.GetCustomAttribute <ObsoleteAttribute>() != null || (brokenConstructors.ContainsKey(ctor) && brokenConstructors[ctor] == ALWAYS)) { continue; } if (c.IsSubclassOf(typeof(Tokenizer))) { assertTrue(ctor.ToString() + " has unsupported parameter types", allowedTokenizerArgs.containsAll(Arrays.AsList(ctor.GetParameters().Select(p => p.ParameterType).ToArray()))); tokenizers.Add(ctor); } else if (c.IsSubclassOf(typeof(TokenFilter))) { assertTrue(ctor.ToString() + " has unsupported parameter types", allowedTokenFilterArgs.containsAll(Arrays.AsList(ctor.GetParameters().Select(p => p.ParameterType).ToArray()))); tokenfilters.Add(ctor); } else if (c.IsSubclassOf(typeof(CharFilter))) { assertTrue(ctor.ToString() + " has unsupported parameter types", allowedCharFilterArgs.containsAll(Arrays.AsList(ctor.GetParameters().Select(p => p.ParameterType).ToArray()))); charfilters.Add(ctor); } else { fail("Cannot get here"); } } } IComparer <ConstructorInfo> ctorComp = new ComparatorAnonymousInnerClassHelper(); tokenizers.Sort(ctorComp); tokenfilters.Sort(ctorComp); charfilters.Sort(ctorComp); if (VERBOSE) { Console.WriteLine("tokenizers = " + tokenizers); Console.WriteLine("tokenfilters = " + tokenfilters); Console.WriteLine("charfilters = " + charfilters); } }
/// <summary> /// sort each repetition group by (query) offset. /// Done only once (at first doc) and allows to initialize faster for each doc. /// </summary> private void SortRptGroups(List <List <PhrasePositions> > rgs) { RptGroups = new PhrasePositions[rgs.Count][]; IComparer <PhrasePositions> cmprtr = new ComparatorAnonymousInnerClassHelper(this); for (int i = 0; i < RptGroups.Length; i++) { PhrasePositions[] rg = rgs[i].ToArray(); Array.Sort(rg, cmprtr); RptGroups[i] = rg; for (int j = 0; j < rg.Length; j++) { rg[j].RptInd = j; // we use this index for efficient re-queuing } } }