You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by cc...@apache.org on 2011/11/12 11:44:27 UTC

[Lucene.Net] svn commit: r1201243 [4/8] - in /incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk: src/core/ src/core/Analysis/ src/core/Analysis/Standard/ src/core/Analysis/Tokenattributes/ src/core/Document/ src/core/Index/ src/core/QueryParser/ src/core/Search/...

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldsReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldsReader.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldsReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FieldsReader.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using TokenStream = Lucene.Net.Analysis.TokenStream;
 using Lucene.Net.Documents;
@@ -433,9 +434,9 @@ namespace Lucene.Net.Index
 		{
 			int size = fieldsStream.ReadVInt(), bytesize = binary || compressed?size:2 * size;
 			byte[] sizebytes = new byte[4];
-			sizebytes[0] = (byte) (SupportClass.Number.URShift(bytesize, 24));
-			sizebytes[1] = (byte) (SupportClass.Number.URShift(bytesize, 16));
-			sizebytes[2] = (byte) (SupportClass.Number.URShift(bytesize, 8));
+			sizebytes[0] = (byte) (Number.URShift(bytesize, 24));
+			sizebytes[1] = (byte) (Number.URShift(bytesize, 16));
+			sizebytes[2] = (byte) (Number.URShift(bytesize, 8));
 			sizebytes[3] = (byte) bytesize;
 			doc.Add(new Field(fi.name, sizebytes, Field.Store.YES));
 			return size;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxFieldMergeState.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxFieldMergeState.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxFieldMergeState.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxFieldMergeState.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -101,7 +102,7 @@ namespace Lucene.Net.Index
 				docID += code;
 			else
 			{
-				docID += SupportClass.Number.URShift(code, 1);
+				docID += Number.URShift(code, 1);
 				if ((code & 1) != 0)
 					termFreq = 1;
 				else

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxTermsWriterPerField.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxTermsWriterPerField.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxTermsWriterPerField.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/FreqProxTermsWriterPerField.cs Sat Nov 12 10:44:21 2011
@@ -89,9 +89,9 @@ namespace Lucene.Net.Index
 		
 		internal override void  Start(Fieldable f)
 		{
-			if (fieldState.attributeSource.HasAttribute(typeof(PayloadAttribute)))
+            if (fieldState.attributeSource.HasAttribute<PayloadAttribute>())
 			{
-				payloadAttribute = (PayloadAttribute) fieldState.attributeSource.GetAttribute(typeof(PayloadAttribute));
+                payloadAttribute = fieldState.attributeSource.GetAttribute<PayloadAttribute>();
 			}
 			else
 			{

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileDeleter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileDeleter.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileDeleter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileDeleter.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 using Directory = Lucene.Net.Store.Directory;
 
 namespace Lucene.Net.Index
@@ -70,7 +71,7 @@ namespace Lucene.Net.Index
 		//// Reference count for all files in the index.  
 		/// Counts how many existing commits reference a file.
 		/// Maps String to RefCount (class below) instances: ////
-		private IDictionary<string, RefCount> refCounts = new SupportClass.HashMap<string, RefCount>();
+		private IDictionary<string, RefCount> refCounts = new HashMap<string, RefCount>();
 		
 		//// Holds all commits (segments_N) currently in the index.
 		/// This will have just 1 commit if you are using the
@@ -112,7 +113,7 @@ namespace Lucene.Net.Index
 		
 		private void  Message(System.String message)
 		{
-            infoStream.WriteLine("IFD [" + new DateTime().ToString() + "; " + SupportClass.ThreadClass.Current().Name + "]: " + message);
+            infoStream.WriteLine("IFD [" + new DateTime().ToString() + "; " + ThreadClass.Current().Name + "]: " + message);
 		}
 		
 		/// <summary> Initialize the deleter: find all previous commits in

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileNames.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileNames.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileNames.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexFileNames.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -139,7 +140,7 @@ namespace Lucene.Net.Index
 			else
 			{
 #if !PRE_LUCENE_NET_2_0_0_COMPATIBLE
-				return base_Renamed + "_" + SupportClass.Number.ToString(gen) + extension;
+				return base_Renamed + "_" + Number.ToString(gen) + extension;
 #else
 				return base_Renamed + "_" + System.Convert.ToString(gen, 16) + extension;
 #endif

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/IndexWriter.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 using Analyzer = Lucene.Net.Analysis.Analyzer;
 using Document = Lucene.Net.Documents.Document;
 using IndexingChain = Lucene.Net.Index.DocumentsWriter.IndexingChain;
@@ -228,7 +229,7 @@ namespace Lucene.Net.Index
 		private long lastCommitChangeCount; // last changeCount that was committed
 		
 		private SegmentInfos rollbackSegmentInfos; // segmentInfos we will fallback to if the commit fails
-		private SupportClass.HashMap<SegmentInfo, int?> rollbackSegments;
+		private HashMap<SegmentInfo, int?> rollbackSegments;
 		
 		internal volatile SegmentInfos pendingCommit; // set when a commit is pending (after prepareCommit() & before commit())
 		internal volatile uint pendingCommitChangeCount;
@@ -269,7 +270,7 @@ namespace Lucene.Net.Index
 		// Used to only allow one addIndexes to proceed at once
 		// TODO: use ReadWriteLock once we are on 5.0
 		private int readCount; // count of how many threads are holding read lock
-		private SupportClass.ThreadClass writeThread; // non-null if any thread holds write lock
+		private ThreadClass writeThread; // non-null if any thread holds write lock
 		internal ReaderPool readerPool;
 		private int upgradeCount;
 
@@ -753,14 +754,14 @@ namespace Lucene.Net.Index
 		{
 			lock (this)
 			{
-				System.Diagnostics.Debug.Assert(writeThread != SupportClass.ThreadClass.Current());
+				System.Diagnostics.Debug.Assert(writeThread != ThreadClass.Current());
 				while (writeThread != null || readCount > 0)
 					DoWait();
 				
 				// We could have been closed while we were waiting:
 				EnsureOpen();
 				
-				writeThread = SupportClass.ThreadClass.Current();
+				writeThread = ThreadClass.Current();
 			}
 		}
 		
@@ -768,7 +769,7 @@ namespace Lucene.Net.Index
 		{
 			lock (this)
 			{
-				System.Diagnostics.Debug.Assert(SupportClass.ThreadClass.Current() == writeThread);
+				System.Diagnostics.Debug.Assert(ThreadClass.Current() == writeThread);
 				writeThread = null;
 				System.Threading.Monitor.PulseAll(this);
 			}
@@ -778,7 +779,7 @@ namespace Lucene.Net.Index
 		{
 			lock (this)
 			{
-				SupportClass.ThreadClass current = SupportClass.ThreadClass.Current();
+				ThreadClass current = ThreadClass.Current();
 				while (writeThread != null && writeThread != current)
 					DoWait();
 				
@@ -800,7 +801,7 @@ namespace Lucene.Net.Index
 					DoWait();
 				}
 				
-				writeThread = SupportClass.ThreadClass.Current();
+				writeThread = ThreadClass.Current();
 				readCount--;
 				upgradeCount--;
 			}
@@ -855,7 +856,7 @@ namespace Lucene.Net.Index
 		public virtual void  Message(System.String message)
 		{
 			if (infoStream != null)
-                infoStream.WriteLine("IW " + messageID + " [" + DateTime.Now.ToString() + "; " + SupportClass.ThreadClass.Current().Name + "]: " + message);
+                infoStream.WriteLine("IW " + messageID + " [" + DateTime.Now.ToString() + "; " + ThreadClass.Current().Name + "]: " + message);
 		}
 		
 		private void  SetMessageID(System.IO.StreamWriter infoStream)
@@ -1344,7 +1345,7 @@ namespace Lucene.Net.Index
 			{
 				rollbackSegmentInfos = (SegmentInfos) infos.Clone();
 				System.Diagnostics.Debug.Assert(!rollbackSegmentInfos.HasExternalSegments(directory));
-				rollbackSegments = new SupportClass.HashMap<SegmentInfo, int?>();
+				rollbackSegments = new HashMap<SegmentInfo, int?>();
 				int size = rollbackSegmentInfos.Count;
 				for (int i = 0; i < size; i++)
 					rollbackSegments[rollbackSegmentInfos.Info(i)] = i;
@@ -2546,7 +2547,7 @@ namespace Lucene.Net.Index
 				// name that was previously returned which can cause
 				// problems at least with ConcurrentMergeScheduler.
 				changeCount++;
-				return "_" + SupportClass.Number.ToString(segmentInfos.counter++);
+				return "_" + Number.ToString(segmentInfos.counter++);
 			}
 		}
 		
@@ -4530,7 +4531,7 @@ namespace Lucene.Net.Index
 				
 				merge.info.SetHasProx(merger.HasProx());
 				
-				((System.Collections.IList) ((System.Collections.ArrayList) segmentInfos).GetRange(start, start + merge.segments.Count - start)).Clear();
+				segmentInfos.RemoveRange(start, start + merge.segments.Count - start);
 				System.Diagnostics.Debug.Assert(!segmentInfos.Contains(merge.info));
 				segmentInfos.Insert(start, merge.info);
 

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/InvertedDocConsumer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/InvertedDocConsumer.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/InvertedDocConsumer.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/InvertedDocConsumer.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using System.Collections.Generic;
 
 namespace Lucene.Net.Index
 {
@@ -28,9 +29,11 @@ namespace Lucene.Net.Index
 		
 		/// <summary>Abort (called after hitting AbortException) </summary>
 		public abstract void  Abort();
-		
-		/// <summary>Flush a new segment </summary>
-		internal abstract void  Flush(System.Collections.IDictionary threadsAndFields, SegmentWriteState state);
+
+	    /// <summary>Flush a new segment </summary>
+	    internal abstract void Flush(
+	        IDictionary<InvertedDocConsumerPerThread, ICollection<InvertedDocConsumerPerField>> threadsAndFields,
+	        SegmentWriteState state);
 		
 		/// <summary>Close doc stores </summary>
 		internal abstract void  CloseDocStore(SegmentWriteState state);

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MergeDocIDRemapper.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MergeDocIDRemapper.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MergeDocIDRemapper.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MergeDocIDRemapper.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -97,7 +98,7 @@ namespace Lucene.Net.Index
 				
 				while (hi >= lo)
 				{
-					int mid = SupportClass.Number.URShift((lo + hi), 1);
+					int mid = Number.URShift((lo + hi), 1);
 					int midValue = starts[mid];
 					if (oldDocID < midValue)
 						hi = mid - 1;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MultiReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MultiReader.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MultiReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/MultiReader.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Linq;
+using Lucene.Net.Support;
 using Document = Lucene.Net.Documents.Document;
 using FieldSelector = Lucene.Net.Documents.FieldSelector;
 using MultiTermDocs = Lucene.Net.Index.DirectoryReader.MultiTermDocs;
@@ -35,7 +36,7 @@ namespace Lucene.Net.Index
         protected internal IndexReader[] subReaders;
         private int[] starts; // 1st docno for each segment
         private bool[] decrefOnClose; // remember which subreaders to decRef on close
-        private System.Collections.Generic.IDictionary<string, byte[]> normsCache = new SupportClass.HashMap<string,byte[]>();
+        private System.Collections.Generic.IDictionary<string, byte[]> normsCache = new HashMap<string,byte[]>();
         private int maxDoc = 0;
         private int numDocs = - 1;
         private bool hasDeletions = false;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/NormsWriter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/NormsWriter.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/NormsWriter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/NormsWriter.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 using IndexOutput = Lucene.Net.Store.IndexOutput;
 using Similarity = Lucene.Net.Search.Similarity;
 
@@ -60,7 +61,7 @@ namespace Lucene.Net.Index
         public override void Flush(IDictionary<InvertedDocEndConsumerPerThread,ICollection<InvertedDocEndConsumerPerField>> threadsAndFields, SegmentWriteState state)
 		{
 
-            IDictionary<FieldInfo, IList<NormsWriterPerField>> byField = new SupportClass.HashMap<FieldInfo, IList<NormsWriterPerField>>();
+            IDictionary<FieldInfo, IList<NormsWriterPerField>> byField = new HashMap<FieldInfo, IList<NormsWriterPerField>>();
 			
 			// Typically, each thread will have encountered the same
 			// field.  So first we collate by field, ie, all

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/ReusableStringReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/ReusableStringReader.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/ReusableStringReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/ReusableStringReader.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Index
 {
@@ -43,7 +44,7 @@ namespace Lucene.Net.Index
         {
             if (left > len)
             {
-                SupportClass.TextSupport.GetCharsFromString(s, upto, upto + len, c, off);
+                TextSupport.GetCharsFromString(s, upto, upto + len, c, off);
                 upto += len;
                 left -= len;
                 return len;
@@ -55,7 +56,7 @@ namespace Lucene.Net.Index
             }
             else
             {
-                SupportClass.TextSupport.GetCharsFromString(s, upto, upto + left, c, off);
+                TextSupport.GetCharsFromString(s, upto, upto + left, c, off);
                 int r = left;
                 left = 0;
                 upto = s.Length;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfo.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfo.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfo.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfo.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 using Directory = Lucene.Net.Store.Directory;
 using IndexInput = Lucene.Net.Store.IndexInput;
 using IndexOutput = Lucene.Net.Store.IndexOutput;
@@ -366,7 +367,7 @@ namespace Lucene.Net.Index
 			si.hasProx = hasProx;
 			si.preLockless = preLockless;
 			si.hasSingleNormFile = hasSingleNormFile;
-		    si.diagnostics = new SupportClass.HashMap<string, string>(this.diagnostics);
+		    si.diagnostics = new HashMap<string, string>(this.diagnostics);
             if (this.diagnostics != null)
             {
                 si.diagnostics = new System.Collections.Generic.Dictionary<string, string>();

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfos.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfos.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfos.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentInfos.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,8 @@
  */
 
 using System;
-
+using System.Collections.Generic;
+using Lucene.Net.Support;
 using ChecksumIndexInput = Lucene.Net.Store.ChecksumIndexInput;
 using ChecksumIndexOutput = Lucene.Net.Store.ChecksumIndexOutput;
 using Directory = Lucene.Net.Store.Directory;
@@ -34,7 +35,7 @@ namespace Lucene.Net.Index
 	/// (subject to change suddenly in the next release)<p/>
 	/// </summary>
 	[Serializable]
-	public sealed class SegmentInfos : System.Collections.ArrayList
+	public sealed class SegmentInfos : List<SegmentInfo>, ICloneable/*ConcurrentBag<SegmentInfo> is thread-safety a requirement of SegmentInfos?*/
 	{
 		private class AnonymousClassFindSegmentsFile:FindSegmentsFile
 		{
@@ -224,7 +225,7 @@ namespace Lucene.Net.Index
 			}
 			else if (fileName.StartsWith(IndexFileNames.SEGMENTS))
 			{
-				return SupportClass.Number.ToInt64(fileName.Substring(1 + IndexFileNames.SEGMENTS.Length));
+				return Number.ToInt64(fileName.Substring(1 + IndexFileNames.SEGMENTS.Length));
 			}
 			else
 			{
@@ -435,18 +436,18 @@ namespace Lucene.Net.Index
 		/// SegmentInfo.
 		/// </summary>
 		
-		public override System.Object Clone()
+		public System.Object Clone()
 		{
             SegmentInfos sis = new SegmentInfos();
             for (int i = 0; i < this.Count; i++)
             {
-                sis.Add(((SegmentInfo) this[i]).Clone());
+                sis.Add((SegmentInfo)this[i].Clone());
             }
             sis.counter = this.counter;
             sis.generation = this.generation;
             sis.lastGeneration = this.lastGeneration;
             // sis.pendingSegnOutput = this.pendingSegnOutput; // {{Aroush-2.9}} needed?
-            sis.userData = new SupportClass.HashMap<string, string>(userData);
+            sis.userData = new HashMap<string, string>(userData);
             sis.version = this.version;
             return sis;
 		}
@@ -566,7 +567,7 @@ namespace Lucene.Net.Index
 		{
 			if (infoStream != null)
 			{
-				infoStream.WriteLine("SIS [" + SupportClass.ThreadClass.Current().Name + "]: " + message);
+				infoStream.WriteLine("SIS [" + ThreadClass.Current().Name + "]: " + message);
 			}
 		}
 		
@@ -844,7 +845,7 @@ namespace Lucene.Net.Index
 		public SegmentInfos Range(int first, int last)
 		{
 			SegmentInfos infos = new SegmentInfos();
-			infos.AddRange((System.Collections.IList) ((System.Collections.ArrayList) this).GetRange(first, last - first));
+			infos.AddRange(this.GetRange(first, last - first));
 			return infos;
 		}
 		

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentReader.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentReader.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using Document = Lucene.Net.Documents.Document;
 using FieldSelector = Lucene.Net.Documents.FieldSelector;
@@ -767,7 +768,7 @@ namespace Lucene.Net.Index
 			}
 		}
 		
-		internal System.Collections.Generic.IDictionary<string, Norm> norms = new SupportClass.HashMap<string, Norm>();
+		internal System.Collections.Generic.IDictionary<string, Norm> norms = new HashMap<string, Norm>();
 		
 		/// <throws>  CorruptIndexException if the index is corrupt </throws>
 		/// <throws>  IOException if there is a low-level IO error </throws>
@@ -969,7 +970,7 @@ namespace Lucene.Net.Index
 						}
 					}
 					
-					clone.norms = new SupportClass.HashMap<string, Norm>();
+					clone.norms = new HashMap<string, Norm>();
 					
 					// Clone norms
 					for (int i = 0; i < fieldNormsChanged.Length; i++)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermDocs.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermDocs.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermDocs.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermDocs.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexInput = Lucene.Net.Store.IndexInput;
 using BitVector = Lucene.Net.Util.BitVector;
 
@@ -144,7 +144,7 @@ namespace Lucene.Net.Index
 				}
 				else
 				{
-					doc += SupportClass.Number.URShift(docCode, 1); // shift off low bit
+					doc += Number.URShift(docCode, 1); // shift off low bit
 					if ((docCode & 1) != 0)
 					// if low bit is set
 						freq = 1;
@@ -177,7 +177,7 @@ namespace Lucene.Net.Index
 				{
 					// manually inlined call to next() for speed
 					int docCode = freqStream.ReadVInt();
-					doc += SupportClass.Number.URShift(docCode, 1); // shift off low bit
+					doc += Number.URShift(docCode, 1); // shift off low bit
 					if ((docCode & 1) != 0)
 					// if low bit is set
 						freq = 1;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermPositions.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermPositions.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermPositions.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/SegmentTermPositions.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexInput = Lucene.Net.Store.IndexInput;
 
 namespace Lucene.Net.Index
@@ -87,7 +87,7 @@ namespace Lucene.Net.Index
 				{
 					payloadLength = proxStream.ReadVInt();
 				}
-				delta = SupportClass.Number.URShift(delta, 1);
+				delta = Number.URShift(delta, 1);
 				needToLoadPayload = true;
 			}
 			return delta;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermBuffer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermBuffer.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermBuffer.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermBuffer.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexInput = Lucene.Net.Store.IndexInput;
 using UnicodeUtil = Lucene.Net.Util.UnicodeUtil;
 
@@ -111,7 +111,7 @@ namespace Lucene.Net.Index
 			System.String termText = term.Text();
 			int termLen = termText.Length;
 			text.SetLength(termLen);
-			SupportClass.TextSupport.GetCharsFromString(termText, 0, termLen, text.result, 0);
+			TextSupport.GetCharsFromString(termText, 0, termLen, text.result, 0);
 			dirty = true;
 			field = term.Field();
 			this.term = term;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermInfosReader.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermInfosReader.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermInfosReader.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermInfosReader.cs Sat Nov 12 10:44:21 2011
@@ -16,6 +16,7 @@
  */
 
 using System;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using Lucene.Net.Util.Cache;
 using Directory = Lucene.Net.Store.Directory;
@@ -174,7 +175,7 @@ namespace Lucene.Net.Index
 			
 			while (hi >= lo)
 			{
-				int mid = SupportClass.Number.URShift((lo + hi), 1);
+				int mid = Number.URShift((lo + hi), 1);
 				int delta = term.CompareTo(indexTerms[mid]);
 				if (delta < 0)
 					hi = mid - 1;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermVectorsTermsWriterPerField.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermVectorsTermsWriterPerField.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermVectorsTermsWriterPerField.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermVectorsTermsWriterPerField.cs Sat Nov 12 10:44:21 2011
@@ -225,7 +225,7 @@ namespace Lucene.Net.Index
 		{
 			if (doVectorOffsets)
 			{
-				offsetAttribute = (OffsetAttribute) fieldState.attributeSource.AddAttribute(typeof(OffsetAttribute));
+				offsetAttribute = fieldState.attributeSource.AddAttribute<OffsetAttribute>();
 			}
 			else
 			{

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHash.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHash.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHash.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHash.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using System.Collections.Generic;
 using ArrayUtil = Lucene.Net.Util.ArrayUtil;
 
 namespace Lucene.Net.Index
@@ -30,8 +30,7 @@ namespace Lucene.Net.Index
 	///, write their own byte streams
 	/// under each term.
 	/// </summary>
-	
-	sealed class TermsHash:InvertedDocConsumer
+	sealed class TermsHash : InvertedDocConsumer
 	{
 		
 		internal TermsHashConsumer consumer;
@@ -39,7 +38,6 @@ namespace Lucene.Net.Index
 		internal int bytesPerPosting;
 		internal int postingsFreeChunk;
 		internal DocumentsWriter docWriter;
-						
 		private RawPostingList[] postingsFreeList = new RawPostingList[1];
 		private int postingsFreeCount;
 		private int postingsAllocCount;
@@ -87,7 +85,7 @@ namespace Lucene.Net.Index
 				nextTermsHash.Abort();
 		}
 		
-		internal void  ShrinkFreePostings(System.Collections.IDictionary threadsAndFields, SegmentWriteState state)
+		internal void  ShrinkFreePostings(IDictionary<InvertedDocConsumerPerThread, ICollection<InvertedDocConsumerPerField>> threadsAndFields, SegmentWriteState state)
 		{
 			
 			System.Diagnostics.Debug.Assert(postingsFreeCount == postingsAllocCount, "Thread.currentThread().getName()" + ": postingsFreeCount=" + postingsFreeCount + " postingsAllocCount=" + postingsAllocCount + " consumer=" + consumer);
@@ -121,47 +119,43 @@ namespace Lucene.Net.Index
 			}
 		}
 		
-		internal override void  Flush(System.Collections.IDictionary threadsAndFields, SegmentWriteState state)
+		internal override void  Flush(IDictionary<InvertedDocConsumerPerThread, ICollection<InvertedDocConsumerPerField>> threadsAndFields, SegmentWriteState state)
 		{
 			lock (this)
 			{
-				System.Collections.IDictionary childThreadsAndFields = new System.Collections.Hashtable();
-				System.Collections.IDictionary nextThreadsAndFields;
+                var childThreadsAndFields = new Dictionary<TermsHashConsumerPerThread, ICollection<TermsHashConsumerPerField>>();
+                Dictionary<InvertedDocConsumerPerThread, ICollection<InvertedDocConsumerPerField>> nextThreadsAndFields;
 				
 				if (nextTermsHash != null)
 				{
-					nextThreadsAndFields = new System.Collections.Hashtable();
+                    nextThreadsAndFields = new Dictionary<InvertedDocConsumerPerThread, ICollection<InvertedDocConsumerPerField>>();
 				}
 				else
 					nextThreadsAndFields = null;
 
-                System.Collections.IEnumerator it = new System.Collections.Hashtable(threadsAndFields).GetEnumerator();
-				while (it.MoveNext())
+                foreach (var entry in threadsAndFields)
 				{
-					
-					System.Collections.DictionaryEntry entry = (System.Collections.DictionaryEntry) it.Current;
-					
 					TermsHashPerThread perThread = (TermsHashPerThread) entry.Key;
 					
-					System.Collections.ICollection fields = (System.Collections.ICollection) entry.Value;
+					ICollection<InvertedDocConsumerPerField> fields = entry.Value;
 					
-					System.Collections.IEnumerator fieldsIt = fields.GetEnumerator();
-                    System.Collections.Hashtable childFields = new System.Collections.Hashtable();
-					System.Collections.Hashtable nextChildFields;
+					var fieldsIt = fields.GetEnumerator();
+                    ICollection<TermsHashConsumerPerField> childFields = new HashSet<TermsHashConsumerPerField>();
+					ICollection<InvertedDocConsumerPerField> nextChildFields;
 					
 					if (nextTermsHash != null)
 					{
-                        nextChildFields = new System.Collections.Hashtable();
+                        nextChildFields = new HashSet<InvertedDocConsumerPerField>();
 					}
 					else
 						nextChildFields = null;
 					
 					while (fieldsIt.MoveNext())
 					{
-						TermsHashPerField perField = (TermsHashPerField) ((System.Collections.DictionaryEntry) fieldsIt.Current).Key;
-						childFields[perField.consumer] = perField.consumer;
+						TermsHashPerField perField = (TermsHashPerField) fieldsIt.Current;
+						childFields.Add(perField.consumer);
 						if (nextTermsHash != null)
-							nextChildFields[perField.nextPerField] = perField.nextPerField;
+							nextChildFields.Add(perField.nextPerField);
 					}
 					
 					childThreadsAndFields[perThread.consumer] = childFields;

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHashPerField.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHashPerField.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHashPerField.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Index/TermsHashPerField.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using TermAttribute = Lucene.Net.Analysis.Tokenattributes.TermAttribute;
 using Fieldable = Lucene.Net.Documents.Fieldable;
 using UnicodeUtil = Lucene.Net.Util.UnicodeUtil;
@@ -173,7 +173,7 @@ namespace Lucene.Net.Index
 				return ;
 			}
 			
-			int mid = SupportClass.Number.URShift((lo + hi), 1);
+			int mid = Number.URShift((lo + hi), 1);
 			
 			if (ComparePostings(postings[lo], postings[mid]) > 0)
 			{
@@ -287,7 +287,7 @@ namespace Lucene.Net.Index
 		
 		internal override void  Start(Fieldable f)
 		{
-			termAtt = (TermAttribute) fieldState.attributeSource.AddAttribute(typeof(TermAttribute));
+			termAtt = fieldState.attributeSource.AddAttribute<TermAttribute>();
 			consumer.Start(f);
 			if (nextPerField != null)
 			{
@@ -573,7 +573,7 @@ namespace Lucene.Net.Index
 			while ((i & ~ 0x7F) != 0)
 			{
 				WriteByte(stream, (byte) ((i & 0x7f) | 0x80));
-				i = SupportClass.Number.URShift(i, 7);
+				i = Number.URShift(i, 7);
 			}
 			WriteByte(stream, (byte) i);
 		}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Lucene.Net.csproj Sat Nov 12 10:44:21 2011
@@ -126,7 +126,6 @@
     <Compile Include="Analysis\ASCIIFoldingFilter.cs" />
     <Compile Include="Analysis\BaseCharFilter.cs" />
     <Compile Include="Analysis\CachingTokenFilter.cs" />
-    <Compile Include="Analysis\CharacterCache.cs" />
     <Compile Include="Analysis\CharArraySet.cs" />
     <Compile Include="Analysis\CharFilter.cs" />
     <Compile Include="Analysis\CharReader.cs" />
@@ -170,7 +169,6 @@
     <Compile Include="Analysis\SimpleAnalyzer.cs">
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="Analysis\SinkTokenizer.cs" />
     <Compile Include="Analysis\Standard\StandardAnalyzer.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -188,7 +186,6 @@
       <SubType>Code</SubType>
     </Compile>
     <Compile Include="Analysis\TeeSinkTokenFilter.cs" />
-    <Compile Include="Analysis\TeeTokenFilter.cs" />
     <Compile Include="Analysis\Token.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -213,7 +210,6 @@
     <Compile Include="Analysis\TokenStream.cs">
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="Analysis\TokenWrapper.cs" />
     <Compile Include="Analysis\WhitespaceAnalyzer.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -889,9 +885,36 @@
     <Compile Include="Store\VerifyingLockFactory.cs">
       <SubType>Code</SubType>
     </Compile>
-    <Compile Include="SupportClass.cs">
-      <SubType>Code</SubType>
-    </Compile>
+    <Compile Include="Support\AppSettings.cs" />
+    <Compile Include="Support\AttributeImplItem.cs" />
+    <Compile Include="Support\BitSetSupport.cs" />
+    <Compile Include="Support\BuildType.cs" />
+    <Compile Include="Support\Character.cs" />
+    <Compile Include="Support\CloseableThreadLocalProfiler.cs" />
+    <Compile Include="Support\CollectionsHelper.cs" />
+    <Compile Include="Support\Compare.cs" />
+    <Compile Include="Support\CRC32.cs" />
+    <Compile Include="Support\Cryptography.cs" />
+    <Compile Include="Support\Deflater.cs" />
+    <Compile Include="Support\Double.cs" />
+    <Compile Include="Support\EquatableList.cs" />
+    <Compile Include="Support\FileSupport.cs" />
+    <Compile Include="Support\GeneralKeyedCollection.cs" />
+    <Compile Include="Support\HashMap.cs" />
+    <Compile Include="Support\Inflater.cs" />
+    <Compile Include="Support\IThreadRunnable.cs" />
+    <Compile Include="Support\Number.cs" />
+    <Compile Include="Support\OS.cs" />
+    <Compile Include="Support\SharpZipLib.cs" />
+    <Compile Include="Support\Single.cs" />
+    <Compile Include="Support\IChecksum.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Support\TextSupport.cs" />
+    <Compile Include="Support\ThreadClass.cs" />
+    <Compile Include="Support\WeakDictionary.cs" />
+    <Compile Include="Support\WeakHashTable.cs" />
+    <Compile Include="Support\WeakReference.cs" />
     <Compile Include="Util\ArrayUtil.cs" />
     <Compile Include="Util\Attribute.cs" />
     <Compile Include="Util\AttributeImpl.cs" />
@@ -907,6 +930,7 @@
     </Compile>
     <Compile Include="Util\DocIdBitSet.cs" />
     <Compile Include="Util\FieldCacheSanityChecker.cs" />
+    <Compile Include="Util\IdentityDictionary.cs" />
     <Compile Include="Util\IndexableBinaryStringTools.cs" />
     <Compile Include="Util\MapOfSets.cs" />
     <Compile Include="Util\MemoryModel.cs" />
@@ -950,8 +974,10 @@
     <None Include="QueryParser\QueryParser.jj" />
     <Content Include="Analysis\Package.html" />
     <Content Include="Analysis\Standard\Package.html" />
+    <Content Include="Analysis\Standard\READ_BEFORE_REGENERATING.txt" />
     <Content Include="ChangeNotes.txt" />
     <Content Include="Document\Package.html" />
+    <Content Include="FileDiffs.txt" />
     <Content Include="Index\Package.html" />
     <Content Include="Messages\Package.html" />
     <Content Include="Overview.html" />

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/ParseException.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/ParseException.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/ParseException.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/ParseException.cs Sat Nov 12 10:44:21 2011
@@ -19,6 +19,7 @@
 /* JavaCCOptions:KEEP_LINE_COL=null */
 
 using System;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.QueryParsers
 {
@@ -172,7 +173,7 @@ namespace Lucene.Net.QueryParsers
 		public System.String[] tokenImage;
 		
 		/// <summary> The end of line string for this machine.</summary>
-		protected internal System.String eol = SupportClass.AppSettings.Get("line.separator", "\n");
+		protected internal System.String eol = AppSettings.Get("line.separator", "\n");
 		
 		/// <summary> Used to convert raw characters to their escaped version
 		/// when these raw version cannot be used as part of an ASCII

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/QueryParser.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/QueryParser.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/QueryParser.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/QueryParser/QueryParser.cs Sat Nov 12 10:44:21 2011
@@ -20,6 +20,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using Analyzer = Lucene.Net.Analysis.Analyzer;
 using CachingTokenFilter = Lucene.Net.Analysis.CachingTokenFilter;
@@ -38,6 +39,7 @@ using MultiTermQuery = Lucene.Net.Search
 using PhraseQuery = Lucene.Net.Search.PhraseQuery;
 using PrefixQuery = Lucene.Net.Search.PrefixQuery;
 using Query = Lucene.Net.Search.Query;
+using Single = Lucene.Net.Support.Single;
 using TermQuery = Lucene.Net.Search.TermQuery;
 using TermRangeQuery = Lucene.Net.Search.TermRangeQuery;
 using WildcardQuery = Lucene.Net.Search.WildcardQuery;
@@ -582,13 +584,13 @@ namespace Lucene.Net.QueryParsers
 			}
 			if (success)
 			{
-				if (buffer.HasAttribute(typeof(TermAttribute)))
+                if (buffer.HasAttribute<TermAttribute>())
 				{
-					termAtt = buffer.GetAttribute(typeof(TermAttribute));
+                    termAtt = buffer.GetAttribute<TermAttribute>();
 				}
-				if (buffer.HasAttribute(typeof(PositionIncrementAttribute)))
+                if (buffer.HasAttribute<PositionIncrementAttribute>())
 				{
-					posIncrAtt = buffer.GetAttribute(typeof(PositionIncrementAttribute));
+					posIncrAtt = buffer.GetAttribute<PositionIncrementAttribute>();
 				}
 			}
 			
@@ -991,7 +993,7 @@ namespace Lucene.Net.QueryParsers
 		/// </returns>
 		/// <exception cref="ParseException">throw in overridden method to disallow
 		/// </exception>
-		protected internal virtual Query GetBooleanQuery(System.Collections.IList clauses)
+		protected internal virtual Query GetBooleanQuery(IList<BooleanClause> clauses)
 		{
 			return GetBooleanQuery(clauses, false);
 		}
@@ -1022,7 +1024,7 @@ namespace Lucene.Net.QueryParsers
 			BooleanQuery query = NewBooleanQuery(disableCoord);
 			foreach(BooleanClause clause in clauses)
 			{
-				query.Add(clauses);
+                query.Add(clause);
 			}
 			return query;
 		}
@@ -1164,7 +1166,7 @@ namespace Lucene.Net.QueryParsers
 				if (codePointMultiplier > 0)
 				{
 					codePoint += HexToInt(curChar) * codePointMultiplier;
-					codePointMultiplier = SupportClass.Number.URShift(codePointMultiplier, 4);
+					codePointMultiplier = Number.URShift(codePointMultiplier, 4);
 					if (codePointMultiplier == 0)
 					{
 						output[length++] = (char) codePoint;
@@ -1514,7 +1516,7 @@ label_1_brk: ;  // {{Aroush-2.9}} this l
 				float f = (float) 1.0;
 				try
 				{
-					f = (float) SupportClass.Single.Parse(boost.image);
+					f = (float) Single.Parse(boost.image);
 					q.SetBoost(f);
 				}
 				catch (System.Exception ignored)
@@ -1631,7 +1633,7 @@ label_1_brk: ;  // {{Aroush-2.9}} this l
 						float fms = fuzzyMinSim;
 						try
 						{
-							fms = (float) SupportClass.Single.Parse(fuzzySlop.image.Substring(1));
+							fms = (float) Single.Parse(fuzzySlop.image.Substring(1));
 						}
 						catch (System.Exception ignored)
 						{
@@ -1837,7 +1839,7 @@ label_1_brk: ;  // {{Aroush-2.9}} this l
 					{
 						try
 						{
-							s = (int) SupportClass.Single.Parse(fuzzySlop.image.Substring(1));
+							s = (int) Single.Parse(fuzzySlop.image.Substring(1));
 						}
 						catch (System.Exception ignored)
 						{
@@ -1857,7 +1859,7 @@ label_1_brk: ;  // {{Aroush-2.9}} this l
 				float f = (float) 1.0;
 				try
 				{
-					f = (float) SupportClass.Single.Parse(boost.image);
+					f = (float) Single.Parse(boost.image);
 				}
 				catch (System.Exception ignored)
 				{

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/BooleanQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/BooleanQuery.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/BooleanQuery.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/BooleanQuery.cs Sat Nov 12 10:44:21 2011
@@ -18,6 +18,7 @@
 using System;
 using System.Collections;
 using Lucene.Net.Index;
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using ToStringUtils = Lucene.Net.Util.ToStringUtils;
 using Occur = Lucene.Net.Search.BooleanClause.Occur;
@@ -99,7 +100,7 @@ namespace Lucene.Net.Search
 			BooleanQuery.maxClauseCount = maxClauseCount;
 		}
 		
-		private SupportClass.EquatableList<BooleanClause> clauses = new SupportClass.EquatableList<BooleanClause>();
+		private EquatableList<BooleanClause> clauses = new EquatableList<BooleanClause>();
 		private bool disableCoord;
 		
 		/// <summary>Constructs an empty boolean query. </summary>
@@ -519,7 +520,7 @@ namespace Lucene.Net.Search
 		public override System.Object Clone()
 		{
 			BooleanQuery clone = (BooleanQuery) base.Clone();
-			clone.clauses = (SupportClass.EquatableList<BooleanClause>) this.clauses.Clone();
+			clone.clauses = (EquatableList<BooleanClause>) this.clauses.Clone();
 			return clone;
 		}
 		

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/CachingWrapperFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/CachingWrapperFilter.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/CachingWrapperFilter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/CachingWrapperFilter.cs Sat Nov 12 10:44:21 2011
@@ -18,6 +18,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using OpenBitSetDISI = Lucene.Net.Util.OpenBitSetDISI;
 using Lucene.Net.Util;
@@ -83,7 +84,7 @@ namespace Lucene.Net.Search
 
                     if (cache == null)
                     {
-                        cache = new SupportClass.WeakHashMap<object, T>();
+                        cache = new WeakDictionary<object, T>();
                     }
 
                     if (deletesMode == DeletesMode.IGNORE)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/DisjunctionMaxQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/DisjunctionMaxQuery.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/DisjunctionMaxQuery.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/DisjunctionMaxQuery.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using Lucene.Net.Index;
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 
 namespace Lucene.Net.Search
@@ -40,7 +41,7 @@ namespace Lucene.Net.Search
 	{
 		
 		/* The subqueries */
-		private SupportClass.EquatableList<Query> disjuncts = new SupportClass.EquatableList<Query>();
+		private EquatableList<Query> disjuncts = new EquatableList<Query>();
 		
 		/* Multiple of the non-max disjunct scores added into our final score.  Non-zero values support tie-breaking. */
 		private float tieBreakerMultiplier = 0.0f;
@@ -263,7 +264,7 @@ namespace Lucene.Net.Search
 		public override System.Object Clone()
 		{
 			DisjunctionMaxQuery clone = (DisjunctionMaxQuery) base.Clone();
-            clone.disjuncts = (SupportClass.EquatableList<Query>) this.disjuncts.Clone();
+            clone.disjuncts = (EquatableList<Query>) this.disjuncts.Clone();
 			return clone;
 		}
 		

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCache.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCache.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCache.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCache.cs Sat Nov 12 10:44:21 2011
@@ -16,12 +16,14 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
+using Double = Lucene.Net.Support.Double;
 using NumericTokenStream = Lucene.Net.Analysis.NumericTokenStream;
 using NumericField = Lucene.Net.Documents.NumericField;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using NumericUtils = Lucene.Net.Util.NumericUtils;
 using RamUsageEstimator = Lucene.Net.Util.RamUsageEstimator;
+using Single = Lucene.Net.Support.Single;
 
 namespace Lucene.Net.Search
 {
@@ -56,7 +58,7 @@ namespace Lucene.Net.Search
 			
 			while (low <= high)
 			{
-				int mid = SupportClass.Number.URShift((low + high), 1);
+				int mid = Number.URShift((low + high), 1);
 				int cmp = String.CompareOrdinal(lookup[mid], key);
 				
 				if (cmp < 0)
@@ -250,7 +252,7 @@ namespace Lucene.Net.Search
 		{
             try
             {
-                return SupportClass.Single.Parse(value_Renamed);
+                return Single.Parse(value_Renamed);
             }
             catch (System.OverflowException)
             {
@@ -287,7 +289,7 @@ namespace Lucene.Net.Search
 	{
 		public virtual double ParseDouble(System.String value_Renamed)
 		{
-			return SupportClass.Double.Parse(value_Renamed);
+			return Double.Parse(value_Renamed);
 		}
 		protected internal virtual System.Object ReadResolve()
 		{

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheImpl.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheImpl.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheImpl.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheImpl.cs Sat Nov 12 10:44:21 2011
@@ -16,20 +16,21 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NumericField = Lucene.Net.Documents.NumericField;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using Term = Lucene.Net.Index.Term;
 using TermDocs = Lucene.Net.Index.TermDocs;
 using TermEnum = Lucene.Net.Index.TermEnum;
 using FieldCacheSanityChecker = Lucene.Net.Util.FieldCacheSanityChecker;
+using Single = Lucene.Net.Support.Single;
 using StringHelper = Lucene.Net.Util.StringHelper;
 
 namespace Lucene.Net.Search
 {
 	
 	/// <summary> Expert: The default cache implementation, storing all values in memory.
-	/// A WeakHashMap is used for storage.
+	/// A WeakDictionary is used for storage.
 	/// 
 	/// <p/>Created: May 19, 2004 4:40:36 PM
 	/// 
@@ -92,7 +93,7 @@ namespace Lucene.Net.Search
 				{
 					// we've now materialized a hard ref
 					System.Object readerKey = innerKeys.Current;
-					// innerKeys was backed by WeakHashMap, sanity check
+					// innerKeys was backed by WeakDictionary, sanity check
 					// that it wasn't GCed before we made hard ref
 					if (null != readerKey && cache.readerCache.Contains(readerKey))
 					{
@@ -210,7 +211,7 @@ namespace Lucene.Net.Search
 			
 			internal FieldCache wrapper;
 
-            internal System.Collections.IDictionary readerCache = new SupportClass.WeakHashTable();
+            internal System.Collections.IDictionary readerCache = new WeakHashTable();
 			
 			protected internal abstract System.Object CreateValue(IndexReader reader, Entry key);
 
@@ -982,7 +983,7 @@ namespace Lucene.Net.Search
 							{
 								try
 								{
-                                    SupportClass.Single.Parse(termtext);
+                                    Single.Parse(termtext);
 									ret = wrapper.GetFloats(reader, field);
 								}
 								catch (System.FormatException nfe3)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheRangeFilter.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheRangeFilter.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheRangeFilter.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldCacheRangeFilter.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using NumericField = Lucene.Net.Documents.NumericField;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using TermDocs = Lucene.Net.Index.TermDocs;
@@ -766,7 +766,7 @@ namespace Lucene.Net.Search
 		{
 			int h = field.GetHashCode();
 			h ^= ((lowerVal != null)?lowerVal.GetHashCode():550356204);
-			h = (h << 1) | (SupportClass.Number.URShift(h, 31)); // rotate to distinguish lower from upper
+			h = (h << 1) | (Number.URShift(h, 31)); // rotate to distinguish lower from upper
 			h ^= ((upperVal != null)?upperVal.GetHashCode():- 1674416163);
 			h ^= ((parser != null)?parser.GetHashCode():- 1572457324);
 			h ^= (includeLower?1549299360:- 365038026) ^ (includeUpper?1721088258:1948649653);

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldComparator.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldComparator.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldComparator.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FieldComparator.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using ByteParser = Lucene.Net.Search.ByteParser;
 using DoubleParser = Lucene.Net.Search.DoubleParser;
@@ -953,7 +953,7 @@ namespace Lucene.Net.Search
 			
 			while (low <= high)
 			{
-				int mid = SupportClass.Number.URShift((low + high), 1);
+				int mid = Number.URShift((low + high), 1);
 				System.String midVal = a[mid];
 				int cmp;
 				if (midVal != null)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FilterManager.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FilterManager.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FilterManager.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FilterManager.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Generic;
+using Lucene.Net.Support;
 
 namespace Lucene.Net.Search
 {
@@ -71,7 +72,7 @@ namespace Lucene.Net.Search
 			cleanSleepTime = DEFAULT_CACHE_SLEEP_TIME; // 10 minutes between cleanings
 			
 			filterCleaner = new FilterCleaner(this);
-			SupportClass.ThreadClass fcThread = new SupportClass.ThreadClass(new System.Threading.ThreadStart(filterCleaner.Run));
+			ThreadClass fcThread = new ThreadClass(new System.Threading.ThreadStart(filterCleaner.Run));
 			// setto be a Daemon so it doesn't have to be stopped
 			fcThread.IsBackground = true;
 			fcThread.Start();
@@ -222,7 +223,7 @@ namespace Lucene.Net.Search
 					}
 					catch (System.Threading.ThreadInterruptedException ie)
 					{
-						SupportClass.ThreadClass.Current().Interrupt();
+						ThreadClass.Current().Interrupt();
 						throw new System.SystemException(ie.Message, ie);
 					}
 				}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FuzzyQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FuzzyQuery.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FuzzyQuery.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/FuzzyQuery.cs Sat Nov 12 10:44:21 2011
@@ -16,8 +16,10 @@
  */
 
 using System;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using IndexReader = Lucene.Net.Index.IndexReader;
+using Single = Lucene.Net.Support.Single;
 using Term = Lucene.Net.Index.Term;
 using ToStringUtils = Lucene.Net.Util.ToStringUtils;
 
@@ -201,7 +203,7 @@ namespace Lucene.Net.Search
 			}
 			buffer.Append(term.Text());
 			buffer.Append('~');
-			buffer.Append(SupportClass.Single.ToString(minimumSimilarity));
+			buffer.Append(Single.ToString(minimumSimilarity));
 			buffer.Append(ToStringUtils.Boost(GetBoost()));
 			return buffer.ToString();
 		}

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiPhraseQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiPhraseQuery.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiPhraseQuery.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiPhraseQuery.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using MultipleTermPositions = Lucene.Net.Index.MultipleTermPositions;
 using Term = Lucene.Net.Index.Term;
@@ -390,7 +390,7 @@ namespace Lucene.Net.Search
 
             for (int i = 0; i < this.termArrays.Count; i++)
             {
-                if (!SupportClass.Compare.CompareTermArrays((Term[])this.termArrays[i], (Term[])other.termArrays[i]))
+                if (!Compare.CompareTermArrays((Term[])this.termArrays[i], (Term[])other.termArrays[i]))
                 {
                     return false;
                 }

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/MultiSearcher.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,9 @@
  */
 
 using System;
-
+using System.Collections.Generic;
+using System.Linq;
+using Lucene.Net.Util;
 using Document = Lucene.Net.Documents.Document;
 using FieldSelector = Lucene.Net.Documents.FieldSelector;
 using CorruptIndexException = Lucene.Net.Index.CorruptIndexException;
@@ -29,8 +31,8 @@ namespace Lucene.Net.Search
 	
 	/// <summary>Implements search over a set of <c>Searchables</c>.
 	/// 
-	/// <p/>Applications usually need only call the inherited <see cref="Searcher.Search(Query)" />
-	/// or <see cref="Searcher.Search(Query,Filter)" /> methods.
+	/// <p/>Applications usually need only call the inherited <see cref="Searcher.Search(Query, int)" />
+	/// or <see cref="Searcher.Search(Query,Filter, int)" /> methods.
 	/// </summary>
 	public class MultiSearcher:Searcher
 	{
@@ -81,10 +83,10 @@ namespace Lucene.Net.Search
 		/// </summary>
 		private class CachedDfSource:Searcher
 		{
-			private System.Collections.IDictionary dfMap; // Map from Terms to corresponding doc freqs
-			private int maxDoc; // document count
+			private readonly Dictionary<Term,int> dfMap; // Map from Terms to corresponding doc freqs
+			private readonly int maxDoc; // document count
 			
-			public CachedDfSource(System.Collections.IDictionary dfMap, int maxDoc, Similarity similarity)
+			public CachedDfSource(Dictionary<Term,int> dfMap, int maxDoc, Similarity similarity)
 			{
 				this.dfMap = dfMap;
 				this.maxDoc = maxDoc;
@@ -96,9 +98,9 @@ namespace Lucene.Net.Search
 				int df;
 				try
 				{
-					df = ((System.Int32) dfMap[term]);
+					df = dfMap[term];
 				}
-				catch (System.NullReferenceException e)
+				catch (KeyNotFoundException e) // C# equiv. of java code.
 				{
 					throw new System.ArgumentException("df for term " + term.Text() + " not available");
 				}
@@ -178,7 +180,7 @@ namespace Lucene.Net.Search
 		private int maxDoc = 0;
 		
 		/// <summary>Creates a searcher which searches <i>searchers</i>. </summary>
-		public MultiSearcher(Searchable[] searchables)
+		public MultiSearcher(params Searchable[] searchables)
 		{
 			this.searchables = searchables;
 			
@@ -263,30 +265,21 @@ namespace Lucene.Net.Search
 		
 		public override TopDocs Search(Weight weight, Filter filter, int nDocs)
 		{
-			
 			HitQueue hq = new HitQueue(nDocs, false);
 			int totalHits = 0;
 			
 			for (int i = 0; i < searchables.Length; i++)
 			{
 				// search each searcher
-				TopDocs docs = searchables[i].Search(weight, filter, nDocs);
+                // use new object() for lock, we don't care about synchronization for these
+                TopDocs docs = MultiSearcherCallableNoSort(new object(), searchables[i], weight, filter, nDocs, hq, i, starts);
 				totalHits += docs.TotalHits; // update totalHits
-				ScoreDoc[] scoreDocs = docs.ScoreDocs;
-				for (int j = 0; j < scoreDocs.Length; j++)
-				{
-					// merge scoreDocs into hq
-					ScoreDoc scoreDoc = scoreDocs[j];
-					scoreDoc.doc += starts[i]; // convert doc
-					if (!hq.Insert(scoreDoc))
-						break; // no more scores > minScore
-				}
 			}
 			
 			ScoreDoc[] scoreDocs2 = new ScoreDoc[hq.Size()];
 			for (int i = hq.Size() - 1; i >= 0; i--)
 			// put docs in array
-				scoreDocs2[i] = (ScoreDoc) hq.Pop();
+				scoreDocs2[i] = hq.Pop();
 			
 			float maxScore = (totalHits == 0)?System.Single.NegativeInfinity:scoreDocs2[0].score;
 			
@@ -295,7 +288,7 @@ namespace Lucene.Net.Search
 		
 		public override TopFieldDocs Search(Weight weight, Filter filter, int n, Sort sort)
 		{
-			FieldDocSortedHitQueue hq = null;
+			var hq = new FieldDocSortedHitQueue(n);
 			int totalHits = 0;
 			
 			float maxScore = System.Single.NegativeInfinity;
@@ -303,47 +296,22 @@ namespace Lucene.Net.Search
 			for (int i = 0; i < searchables.Length; i++)
 			{
 				// search each searcher
-				TopFieldDocs docs = searchables[i].Search(weight, filter, n, sort);
-				// If one of the Sort fields is FIELD_DOC, need to fix its values, so that
-				// it will break ties by doc Id properly. Otherwise, it will compare to
-				// 'relative' doc Ids, that belong to two different searchers.
-				for (int j = 0; j < docs.fields.Length; j++)
-				{
-					if (docs.fields[j].GetType() == SortField.DOC)
-					{
-						// iterate over the score docs and change their fields value
-						for (int j2 = 0; j2 < docs.ScoreDocs.Length; j2++)
-						{
-							FieldDoc fd = (FieldDoc) docs.ScoreDocs[j2];
-							fd.fields[j] = (System.Int32) (((System.Int32) fd.fields[j]) + starts[i]);
-						}
-						break;
-					}
-				}
-				if (hq == null)
-					hq = new FieldDocSortedHitQueue(docs.fields, n);
-				totalHits += docs.TotalHits; // update totalHits
+                // use new object() for lock, we don't care about synchronization for these
+			    TopFieldDocs docs = MultiSearcherCallableWithSort(new object(), searchables[i], weight, filter, n, hq, sort,
+			                                          i, starts);
+			    totalHits += docs.TotalHits;
 				maxScore = System.Math.Max(maxScore, docs.GetMaxScore());
-				ScoreDoc[] scoreDocs = docs.ScoreDocs;
-				for (int j = 0; j < scoreDocs.Length; j++)
-				{
-					// merge scoreDocs into hq
-					ScoreDoc scoreDoc = scoreDocs[j];
-					scoreDoc.doc += starts[i]; // convert doc
-					if (!hq.Insert(scoreDoc))
-						break; // no more scores > minScore
-				}
 			}
 			
 			ScoreDoc[] scoreDocs2 = new ScoreDoc[hq.Size()];
 			for (int i = hq.Size() - 1; i >= 0; i--)
 			// put docs in array
-				scoreDocs2[i] = (ScoreDoc) hq.Pop();
+				scoreDocs2[i] = hq.Pop();
 			
 			return new TopFieldDocs(totalHits, scoreDocs2, hq.GetFields(), maxScore);
 		}
 		
-		// inherit javadoc
+		///<inheritdoc />
 		public override void  Search(Weight weight, Filter filter, Collector collector)
 		{
 			for (int i = 0; i < searchables.Length; i++)
@@ -394,15 +362,11 @@ namespace Lucene.Net.Search
 			Query rewrittenQuery = Rewrite(original);
 			
 			// step 2
-			System.Collections.Hashtable terms = new System.Collections.Hashtable();
+			ISet<Term> terms = new HashSet<Term>();
 			rewrittenQuery.ExtractTerms(terms);
 			
 			// step3
-			Term[] allTermsArray = new Term[terms.Count];
-            int index = 0;
-            System.Collections.IEnumerator e = terms.Keys.GetEnumerator();
-            while (e.MoveNext())
-                allTermsArray[index++] = e.Current as Term;
+		    Term[] allTermsArray = terms.ToArray();
             int[] aggregatedDfs = new int[terms.Count];
 			for (int i = 0; i < searchables.Length; i++)
 			{
@@ -413,10 +377,10 @@ namespace Lucene.Net.Search
 				}
 			}
 			
-			System.Collections.Hashtable dfMap = new System.Collections.Hashtable();
+			var dfMap = new Dictionary<Term, int>();
 			for (int i = 0; i < allTermsArray.Length; i++)
 			{
-				dfMap[allTermsArray[i]] = (System.Int32) aggregatedDfs[i];
+				dfMap[allTermsArray[i]] = aggregatedDfs[i];
 			}
 			
 			// step4
@@ -425,5 +389,66 @@ namespace Lucene.Net.Search
 			
 			return rewrittenQuery.Weight(cacheSim);
 		}
+
+	    internal Func<object, Searchable, Weight, Filter, int, HitQueue, int, int[], TopDocs> MultiSearcherCallableNoSort =
+	        (theLock, searchable, weight, filter, nDocs, hq, i, starts) =>
+	            {
+	                TopDocs docs = searchable.Search(weight, filter, nDocs);
+	                ScoreDoc[] scoreDocs = docs.scoreDocs;
+                    for(int j = 0; j < scoreDocs.Length; j++) // merge scoreDocs into hq
+                    {
+                        ScoreDoc scoreDoc = scoreDocs[j];
+                        scoreDoc.doc += starts[i]; //convert doc
+                        //it would be so nice if we had a thread-safe insert
+                        lock (theLock)
+                        {
+                            if (scoreDoc == hq.InsertWithOverflow(scoreDoc))
+                                break;
+                        }
+                    }
+	                return docs;
+	            };
+
+        internal Func<object, Searchable, Weight, Filter, int, FieldDocSortedHitQueue, Sort, int, int[], TopFieldDocs>
+	        MultiSearcherCallableWithSort = (theLock, searchable, weight, filter, nDocs, hq, sort, i, starts) =>
+	                                            {
+	                                                TopFieldDocs docs = searchable.Search(weight, filter, nDocs, sort);
+                                                    // if one of the Sort fields is FIELD_DOC, need to fix its values, so that
+                                                    // it will break ties by doc Id properly.  Otherwise, it will compare to
+                                                    // 'relative' doc Ids, that belong to two different searchables.
+                                                    for (int j = 0; j < docs.fields.Length; j++)
+                                                    {
+                                                        if (docs.fields[j].GetType() == SortField.DOC)
+                                                        {
+                                                            // iterate over the score docs and change their fields value
+                                                            for (int j2 = 0; j2 < docs.scoreDocs.Length; j2++)
+                                                            {
+                                                                FieldDoc fd = (FieldDoc) docs.scoreDocs[j2];
+                                                                fd.fields[j] = (int)fd.fields[j] + starts[i];
+                                                            }
+                                                            break;
+                                                        }
+                                                    }
+
+                                                    lock (theLock)
+                                                    {
+                                                        hq.SetFields(docs.fields);
+                                                    }
+
+	                                                ScoreDoc[] scoreDocs = docs.scoreDocs;
+                                                    for (int j = 0; j < scoreDocs.Length; j++) // merge scoreDocs into hq
+                                                    {
+                                                        FieldDoc fieldDoc = (FieldDoc) scoreDocs[i];
+                                                        fieldDoc.doc += starts[i]; //convert doc
+                                                        //it would be so nice if we had a thread-safe insert
+                                                        lock (theLock)
+                                                        {
+                                                            if (fieldDoc == hq.InsertWithOverflow(fieldDoc))
+                                                                break;
+
+                                                        }
+                                                    }
+	                                                return docs;
+	                                            };
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/ParallelMultiSearcher.cs Sat Nov 12 10:44:21 2011
@@ -16,19 +16,22 @@
  */
 
 using System;
+using System.Threading.Tasks;
+using System.Linq;
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using Term = Lucene.Net.Index.Term;
 
+//TODO: This is an experimental change to ParallelMultiSearcher, attempting to use the TPL
 namespace Lucene.Net.Search
 {
-	
 	/// <summary>Implements parallel search over a set of <c>Searchables</c>.
 	/// 
 	/// <p/>Applications usually need only call the inherited <see cref="Searcher.Search(Query, int)" />
 	/// or <see cref="Searcher.Search(Query,Filter,int)" /> methods.
 	/// </summary>
-	public class ParallelMultiSearcher:MultiSearcher
+	public class ParallelMultiSearcher : MultiSearcher/*, IDisposable*/ //No need to implement IDisposable like java, nothing to dispose with the TPL
 	{
 		private class AnonymousClassCollector1:Collector
 		{
@@ -74,69 +77,61 @@ namespace Lucene.Net.Search
 		private Searchable[] searchables;
 		private int[] starts;
 		
-		/// <summary>Creates a searchable which searches <i>searchables</i>. </summary>
-		public ParallelMultiSearcher(params Searchable[] searchables):base(searchables)
+		/// <summary>Creates a <see cref="Searchable"/> which searches <i>searchables</i>. </summary>
+        public ParallelMultiSearcher(params Searchable[] searchables)
+            : base(searchables)
 		{
-			this.searchables = searchables;
-			this.starts = GetStarts();
+		    this.searchables = searchables;
+		    this.starts = GetStarts();
 		}
-		
-		/// <summary> TODO: parallelize this one too</summary>
+
+	    /// <summary>
+	    /// Executes each <see cref="Searchable"/>'s docFreq() in its own thread and 
+	    /// waits for each search to complete and merge the results back together.
+	    /// </summary>
 		public override int DocFreq(Term term)
-		{
-			return base.DocFreq(term);
-		}
+	    {
+	        Task<int>[] tasks = new Task<int>[searchables.Length];
+            for (int i = 0; i < searchables.Length; i++)
+            {
+                Searchable searchable = searchables[i];
+                tasks[i] = Task.Factory.StartNew(() => searchable.DocFreq(term));
+            }
+
+	        return tasks.Sum(task => task.Result);
+	    }
 		
-		/// <summary> A search implementation which spans a new thread for each
-		/// Searchable, waits for each search to complete and merge
-		/// the results back together.
+		/// <summary> A search implementation which executes each
+		/// <see cref="Searchable"/> in its own thread and waits for each search to complete
+		/// and merge the results back together.
 		/// </summary>
 		public override TopDocs Search(Weight weight, Filter filter, int nDocs)
 		{
-			HitQueue hq = new HitQueue(nDocs, false);
-			int totalHits = 0;
-			MultiSearcherThread[] msta = new MultiSearcherThread[searchables.Length];
-			for (int i = 0; i < searchables.Length; i++)
-			{
-				// search each searchable
-				// Assume not too many searchables and cost of creating a thread is by far inferior to a search
-				msta[i] = new MultiSearcherThread(searchables[i], weight, filter, nDocs, hq, i, starts, "MultiSearcher thread #" + (i + 1));
-				msta[i].Start();
-			}
-			
-			for (int i = 0; i < searchables.Length; i++)
-			{
-				try
-				{
-					msta[i].Join();
-				}
-				catch (System.Threading.ThreadInterruptedException ie)
-				{
-					// In 3.0 we will change this to throw
-					// InterruptedException instead
-					SupportClass.ThreadClass.Current().Interrupt();
-					throw new System.SystemException(ie.Message, ie);
-				}
-				System.IO.IOException ioe = msta[i].GetIOException();
-				if (ioe == null)
-				{
-					totalHits += msta[i].Hits();
-				}
-				else
-				{
-					// if one search produced an IOException, rethrow it
-					throw ioe;
-				}
-			}
-			
-			ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
-			for (int i = hq.Size() - 1; i >= 0; i--)
-			// put docs in array
-				scoreDocs[i] = (ScoreDoc) hq.Pop();
-			
-			float maxScore = (totalHits == 0)?System.Single.NegativeInfinity:scoreDocs[0].score;
-			
-			return new TopDocs(totalHits, scoreDocs, maxScore);
+		    HitQueue hq = new HitQueue(nDocs, false);
+            object lockObj = new object();
+
+            Task<TopDocs>[] tasks = new Task<TopDocs>[searchables.Length];
+            //search each searchable
+            for (int i = 0; i < searchables.Length; i++)
+            {
+                tasks[i] =
+                    Task.Factory.StartNew(() => MultiSearcherCallableNoSort(lockObj, searchables[i], weight, filter,
+                                                                            nDocs, hq, i, starts));
+            }
+
+		    int totalHits = 0;
+		    float maxScore = float.NegativeInfinity;
+            foreach(TopDocs topDocs in tasks.Select(x => x.Result))
+            {
+                totalHits += topDocs.totalHits;
+                maxScore = Math.Max(maxScore, topDocs.GetMaxScore());
+            }
+
+            ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
+            for (int i = hq.Size() - 1; i >= 0; i--) // put docs in array
+                scoreDocs[i] = hq.Pop();
+
+		    return new TopDocs(totalHits, scoreDocs, maxScore);
 		}
 		
 		/// <summary> A search implementation allowing sorting which spans a new thread for each
@@ -145,52 +140,33 @@ namespace Lucene.Net.Search
 		/// </summary>
 		public override TopFieldDocs Search(Weight weight, Filter filter, int nDocs, Sort sort)
 		{
-			// don't specify the fields - we'll wait to do this until we get results
-			FieldDocSortedHitQueue hq = new FieldDocSortedHitQueue(nDocs);
-			int totalHits = 0;
-			MultiSearcherThread[] msta = new MultiSearcherThread[searchables.Length];
-			for (int i = 0; i < searchables.Length; i++)
-			{
-				// search each searchable
-				// Assume not too many searchables and cost of creating a thread is by far inferior to a search
-				msta[i] = new MultiSearcherThread(searchables[i], weight, filter, nDocs, hq, sort, i, starts, "MultiSearcher thread #" + (i + 1));
-				msta[i].Start();
-			}
-			
-			float maxScore = System.Single.NegativeInfinity;
-			
-			for (int i = 0; i < searchables.Length; i++)
-			{
-				try
-				{
-					msta[i].Join();
-				}
-				catch (System.Threading.ThreadInterruptedException ie)
-				{
-					// In 3.0 we will change this to throw
-					// InterruptedException instead
-					SupportClass.ThreadClass.Current().Interrupt();
-					throw new System.SystemException(ie.Message, ie);
-				}
-				System.IO.IOException ioe = msta[i].GetIOException();
-				if (ioe == null)
-				{
-					totalHits += msta[i].Hits();
-					maxScore = System.Math.Max(maxScore, msta[i].GetMaxScore());
-				}
-				else
-				{
-					// if one search produced an IOException, rethrow it
-					throw ioe;
-				}
-			}
-			
-			ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
-			for (int i = hq.Size() - 1; i >= 0; i--)
-			// put docs in array
-				scoreDocs[i] = hq.Pop();
-			
-			return new TopFieldDocs(totalHits, scoreDocs, hq.GetFields(), maxScore);
+            if (sort == null) throw new ArgumentNullException("sort");
+
+		    FieldDocSortedHitQueue hq = new FieldDocSortedHitQueue(nDocs);
+            object lockObj = new object();
+
+            Task<TopFieldDocs>[] tasks = new Task<TopFieldDocs>[searchables.Length];
+            for (int i = 0; i < searchables.Length; i++) // search each searchable
+            {
+                tasks[i] =
+                    Task.Factory.StartNew(
+                        () =>
+                        MultiSearcherCallableWithSort(lockObj, searchables[i], weight, filter, nDocs, hq, sort, i,
+                                                      starts));
+            }
+
+		    int totalHits = 0;
+		    float maxScore = float.NegativeInfinity;
+            foreach (TopFieldDocs topFieldDocs in tasks.Select(x => x.Result))
+            {
+                totalHits += topFieldDocs.totalHits;
+                maxScore = Math.Max(maxScore, topFieldDocs.GetMaxScore());
+            }
+            ScoreDoc[] scoreDocs = new ScoreDoc[hq.Size()];
+            for (int i = hq.Size() - 1; i >= 0; i--)
+                scoreDocs[i] = hq.Pop();
+
+		    return new TopFieldDocs(totalHits, scoreDocs, hq.GetFields(), maxScore);
 		}
 		
 		/// <summary>Lower-level search API.
@@ -198,10 +174,11 @@ namespace Lucene.Net.Search
 		/// <p/><see cref="Collector.Collect(int)" /> is called for every matching document.
 		/// 
 		/// <p/>Applications should only use this if they need <i>all</i> of the
-		/// matching documents.  The high-level search API (<see cref="Searcher.Search(Query)" />)
+		/// matching documents.  The high-level search API (<see cref="Searcher.Search(Query, int)" />)
 		/// is usually more efficient, as it skips
 		/// non-high-scoring hits.
-		/// 
+		/// <p/>This method cannot be parallelized, because <see cref="Collector"/>
+		/// supports no concurrent access.
 		/// </summary>
 		/// <param name="weight">to match documents
 		/// </param>
@@ -223,123 +200,5 @@ namespace Lucene.Net.Search
 				searchables[i].Search(weight, filter, hc);
 			}
 		}
-		
-        /// <summary>
-        /// <para>TODO: this one could be parallelized too</para>
-        /// <para><see cref="Lucene.Net.Search.Searchable.Rewrite(Lucene.Net.Search.Query)"/></para>
-        /// </summary>
-		public override Query Rewrite(Query original)
-		{
-			return base.Rewrite(original);
-		}
-	}
-	
-	/// <summary> A thread subclass for searching a single searchable </summary>
-	class MultiSearcherThread:SupportClass.ThreadClass
-	{
-		
-		private Searchable searchable;
-		private Weight weight;
-		private Filter filter;
-		private int nDocs;
-		private TopDocs docs;
-		private int i;
-        private HitQueue hq;
-		private int[] starts;
-		private System.Exception ioe;
-		private Sort sort;
-		
-		public MultiSearcherThread(Searchable searchable, Weight weight, Filter filter, int nDocs, HitQueue hq, int i, int[] starts, System.String name):base(name)
-		{
-			this.searchable = searchable;
-			this.weight = weight;
-			this.filter = filter;
-			this.nDocs = nDocs;
-			this.hq = hq;
-			this.i = i;
-			this.starts = starts;
-		}
-		
-		public MultiSearcherThread(Searchable searchable, Weight weight, Filter filter, int nDocs, FieldDocSortedHitQueue hq, Sort sort, int i, int[] starts, System.String name):base(name)
-		{
-			this.searchable = searchable;
-			this.weight = weight;
-			this.filter = filter;
-			this.nDocs = nDocs;
-			this.hq = hq;
-			this.i = i;
-			this.starts = starts;
-			this.sort = sort;
-		}
-		
-		override public void  Run()
-		{
-			try
-			{
-				docs = (sort == null)?searchable.Search(weight, filter, nDocs):searchable.Search(weight, filter, nDocs, sort);
-			}
-			// Store the IOException for later use by the caller of this thread
-			catch (System.Exception e)
-			{
-				this.ioe = e;
-			}
-			if (this.ioe == null)
-			{
-				// if we are sorting by fields, we need to tell the field sorted hit queue
-				// the actual type of fields, in case the original list contained AUTO.
-				// if the searchable returns null for fields, we'll have problems.
-				if (sort != null)
-				{
-					TopFieldDocs docsFields = (TopFieldDocs) docs;
-					// If one of the Sort fields is FIELD_DOC, need to fix its values, so that
-					// it will break ties by doc Id properly. Otherwise, it will compare to
-					// 'relative' doc Ids, that belong to two different searchables.
-					for (int j = 0; j < docsFields.fields.Length; j++)
-					{
-						if (docsFields.fields[j].GetType() == SortField.DOC)
-						{
-							// iterate over the score docs and change their fields value
-							for (int j2 = 0; j2 < docs.ScoreDocs.Length; j2++)
-							{
-								FieldDoc fd = (FieldDoc) docs.ScoreDocs[j2];
-								fd.fields[j] = (System.Int32) (((System.Int32) fd.fields[j]) + starts[i]);
-							}
-							break;
-						}
-					}
-					
-					((FieldDocSortedHitQueue) hq).SetFields(docsFields.fields);
-				}
-				ScoreDoc[] scoreDocs = docs.ScoreDocs;
-				for (int j = 0; j < scoreDocs.Length; j++)
-				{
-					// merge scoreDocs into hq
-					ScoreDoc scoreDoc = scoreDocs[j];
-					scoreDoc.doc += starts[i]; // convert doc 
-					//it would be so nice if we had a thread-safe insert 
-					lock (hq)
-					{
-						if (!hq.Insert(scoreDoc))
-							break;
-					} // no more scores > minScore
-				}
-			}
-		}
-		
-		public virtual int Hits()
-		{
-			return docs.TotalHits;
-		}
-		
-		public virtual float GetMaxScore()
-		{
-			return docs.GetMaxScore();
-		}
-		
-		public virtual System.IO.IOException GetIOException()
-		{
-            if (ioe == null) return null;
-            return new System.IO.IOException(ioe.Message);
-		}
 	}
 }
\ No newline at end of file

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/PhraseQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/PhraseQuery.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/PhraseQuery.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/PhraseQuery.cs Sat Nov 12 10:44:21 2011
@@ -16,7 +16,7 @@
  */
 
 using System;
-
+using Lucene.Net.Support;
 using IndexReader = Lucene.Net.Index.IndexReader;
 using Term = Lucene.Net.Index.Term;
 using TermPositions = Lucene.Net.Index.TermPositions;
@@ -35,8 +35,8 @@ namespace Lucene.Net.Search
 	public class PhraseQuery:Query
 	{
 		private System.String field;
-        private SupportClass.EquatableList<Term> terms = new SupportClass.EquatableList<Term>(4);
-        private SupportClass.EquatableList<int> positions = new SupportClass.EquatableList<int>(4);
+        private EquatableList<Term> terms = new EquatableList<Term>(4);
+        private EquatableList<int> positions = new EquatableList<int>(4);
 		private int maxPosition = 0;
 		private int slop = 0;
 		

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/QueryTermVector.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/QueryTermVector.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/QueryTermVector.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/QueryTermVector.cs Sat Nov 12 10:44:21 2011
@@ -61,7 +61,7 @@ namespace Lucene.Net.Search
 						bool hasMoreTokens = false;
 						
 						stream.Reset();
-						TermAttribute termAtt = (TermAttribute) stream.AddAttribute(typeof(TermAttribute));
+                        TermAttribute termAtt = stream.AddAttribute<TermAttribute>();
 						
 						hasMoreTokens = stream.IncrementToken();
 						while (hasMoreTokens)

Modified: incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/SloppyPhraseScorer.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/SloppyPhraseScorer.cs?rev=1201243&r1=1201242&r2=1201243&view=diff
==============================================================================
--- incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/SloppyPhraseScorer.cs (original)
+++ incubator/lucene.net/branches/Lucene.Net.3.0.3/trunk/src/core/Search/SloppyPhraseScorer.cs Sat Nov 12 10:44:21 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Linq;
+using Lucene.Net.Support;
 using TermPositions = Lucene.Net.Index.TermPositions;
 
 namespace Lucene.Net.Search
@@ -157,7 +158,7 @@ namespace Lucene.Net.Search
 			{
 				checkedRepeats = true;
 				// check for repeats
-				SupportClass.HashMap<PhrasePositions, object> m = null;
+				HashMap<PhrasePositions, object> m = null;
 				for (PhrasePositions pp = first; pp != null; pp = pp.next)
 				{
 					int tpPos = pp.position + pp.offset;
@@ -168,7 +169,7 @@ namespace Lucene.Net.Search
 						{
 							if (m == null)
 							{
-								m = new SupportClass.HashMap<PhrasePositions, object>();
+								m = new HashMap<PhrasePositions, object>();
 							}
 							pp.repeats = true;
 							pp2.repeats = true;