You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2020/07/29 17:11:12 UTC

[lucenenet] 07/14: PERFORMANCE: Use J2N's ICollection.ToArray() extension method that uses ICollection.CopyTo(), which takes precedence over the LINQ IEnumerable.ToArray() extension method. Benchmarks show about a 1/3 increase in performance. (see #261)

This is an automated email from the ASF dual-hosted git repository.

nightowl888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucenenet.git

commit 5f9bcb999f6e2ce80a11d186a99400933722db7e
Author: Shad Storhaug <sh...@shadstorhaug.com>
AuthorDate: Fri Jul 24 06:17:07 2020 +0700

    PERFORMANCE: Use J2N's ICollection<T>.ToArray() extension method that uses ICollection<T>.CopyTo(), which takes precedence over the LINQ IEnumerable<T>.ToArray() extension method. Benchmarks show about a 1/3 increase in performance. (see #261)
---
 .../Analysis/Pt/RSLPStemmerBase.cs                 |  4 +-
 .../Analysis/Query/QueryAutoStopWordAnalyzer.cs    |  4 +-
 .../Analysis/Synonym/SlowSynonymMap.cs             |  4 +-
 .../OpenNLPChunkerFilter.cs                        |  5 +--
 .../OpenNLPLemmatizerFilter.cs                     |  5 +--
 .../OpenNLPPOSFilter.cs                            |  3 +-
 .../ByTask/Feeds/EnwikiQueryMaker.cs               |  4 +-
 .../ByTask/Feeds/SimpleSloppyPhraseQueryMaker.cs   |  3 +-
 src/Lucene.Net.Benchmark/Quality/QualityQuery.cs   |  4 +-
 src/Lucene.Net.Benchmark/Quality/QualityStats.cs   |  4 +-
 .../Quality/Trec/QueryDriver.cs                    |  6 +--
 .../Quality/Trec/Trec1MQReader.cs                  |  6 +--
 .../Quality/Trec/TrecTopicsReader.cs               |  6 +--
 src/Lucene.Net.Facet/DrillSideways.cs              |  4 +-
 src/Lucene.Net.Facet/FacetsConfig.cs               |  8 ++--
 .../Highlight/QueryTermExtractor.cs                |  4 +-
 .../PostingsHighlight/PostingsHighlighter.cs       |  2 +-
 src/Lucene.Net.Memory/MemoryIndex.Info.cs          | 38 ++++++++--------
 .../MemoryIndex.MemoryIndexReader.cs               | 40 ++++++++---------
 src/Lucene.Net.Memory/MemoryIndex.TermComparer.cs  | 38 ++++++++--------
 .../Index/MultiPassIndexSplitter.cs                |  4 +-
 .../Index/Sorter/SortingMergePolicy.cs             |  4 +-
 src/Lucene.Net.Queries/CommonTermsQuery.cs         |  4 +-
 src/Lucene.Net.Queries/Mlt/MoreLikeThis.cs         |  4 +-
 .../Suggest/Analyzing/AnalyzingSuggester.cs        |  4 +-
 .../Analysis/BaseTokenStreamTestCase.cs            |  2 +-
 .../Index/AlcoholicMergePolicy.cs                  |  3 +-
 .../Index/BaseStoredFieldsFormatTestCase.cs        |  1 -
 .../Search/ShardSearchingTestBase.cs               |  2 +-
 .../Miscellaneous/TestStemmerOverrideFilter.cs     |  2 +-
 .../Analysis/Miscellaneous/TestTrimFilter.cs       |  3 +-
 .../Analysis/Synonym/TestSlowSynonymFilter.cs      |  3 +-
 src/Lucene.Net.Tests.Facet/TestDrillSideways.cs    |  9 ++--
 src/Lucene.Net.Tests.Join/TestBlockJoin.cs         | 11 +++--
 .../Index/Sorter/SorterTestBase.cs                 |  3 +-
 src/Lucene.Net.Tests.Misc/Util/Fst/TestFSTsMisc.cs | 43 +++++++++---------
 .../Index/TestBackwardsCompatibility.cs            |  1 +
 src/Lucene.Net.Tests/Index/TestDocTermOrds.cs      |  3 +-
 src/Lucene.Net.Tests/Index/TestMaxTermFrequency.cs |  3 +-
 src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs  |  1 +
 .../Search/TestMultiPhraseQuery.cs                 |  5 ++-
 .../Search/TestPhrasePrefixQuery.cs                |  6 +--
 .../Util/Automaton/TestCompiledAutomaton.cs        |  3 +-
 .../Util/TestRecyclingByteBlockAllocator.cs        |  1 +
 .../Util/TestRecyclingIntBlockAllocator.cs         |  1 +
 src/Lucene.Net/Codecs/DocValuesConsumer.cs         |  2 +-
 src/Lucene.Net/Index/FieldInfos.cs                 |  2 +-
 src/Lucene.Net/Index/FrozenBufferedUpdates.cs      |  5 ++-
 src/Lucene.Net/Index/MultiFields.cs                |  2 +-
 src/Lucene.Net/Index/MultiTerms.cs                 |  2 +-
 src/Lucene.Net/Index/SegmentDocValues.cs           |  2 +-
 src/Lucene.Net/Index/SegmentMerger.cs              |  2 +-
 src/Lucene.Net/Index/StandardDirectoryReader.cs    |  2 +-
 src/Lucene.Net/Search/BooleanQuery.cs              |  2 +-
 src/Lucene.Net/Search/BooleanScorer2.cs            |  2 +-
 src/Lucene.Net/Search/DisjunctionMaxQuery.cs       |  4 +-
 src/Lucene.Net/Search/FieldCacheImpl.cs            |  6 +--
 src/Lucene.Net/Search/FuzzyTermsEnum.cs            |  2 +-
 src/Lucene.Net/Search/MinShouldMatchSumScorer.cs   |  2 +-
 src/Lucene.Net/Search/PhraseQuery.cs               |  2 +-
 src/Lucene.Net/Search/SloppyPhraseScorer.cs        |  2 +-
 src/Lucene.Net/Search/Spans/SpanNearQuery.cs       |  2 +-
 src/Lucene.Net/Search/Spans/SpanOrQuery.cs         |  2 +-
 src/Lucene.Net/Search/TopTermsRewrite.cs           |  5 ++-
 src/Lucene.Net/Store/CompoundFileDirectory.cs      |  2 +-
 src/Lucene.Net/Store/CompoundFileWriter.cs         |  2 +-
 src/Lucene.Net/Store/FileSwitchDirectory.cs        |  2 +-
 src/Lucene.Net/Store/NRTCachingDirectory.cs        |  4 +-
 src/Lucene.Net/Store/RAMDirectory.cs               |  2 +-
 src/Lucene.Net/Support/CollectionExtensions.cs     | 51 ++++++++++++++++++++++
 src/Lucene.Net/Support/Index/TaskMergeScheduler.cs |  3 +-
 src/Lucene.Net/Support/SetExtensions.cs            | 10 -----
 src/Lucene.Net/Support/Util/ExceptionExtensions.cs |  3 +-
 src/Lucene.Net/Support/WeakDictionary.cs           |  4 +-
 src/Lucene.Net/Util/Attribute.cs                   |  6 ---
 src/Lucene.Net/Util/Automaton/Automaton.cs         |  2 +-
 src/Lucene.Net/Util/Automaton/SpecialOperations.cs |  1 +
 src/Lucene.Net/Util/ByteBlockPool.cs               |  2 +-
 src/Lucene.Net/Util/QueryBuilder.cs                |  2 +-
 src/Lucene.Net/Util/SPIClassIterator.cs            |  1 -
 80 files changed, 244 insertions(+), 221 deletions(-)

diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Pt/RSLPStemmerBase.cs b/src/Lucene.Net.Analysis.Common/Analysis/Pt/RSLPStemmerBase.cs
index 0f4eb50..e47e0c1 100644
--- a/src/Lucene.Net.Analysis.Common/Analysis/Pt/RSLPStemmerBase.cs
+++ b/src/Lucene.Net.Analysis.Common/Analysis/Pt/RSLPStemmerBase.cs
@@ -1,11 +1,11 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using Lucene.Net.Analysis.Util;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Text;
 using System.Text.RegularExpressions;
 
diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Query/QueryAutoStopWordAnalyzer.cs b/src/Lucene.Net.Analysis.Common/Analysis/Query/QueryAutoStopWordAnalyzer.cs
index 243fa3b..98573e0 100644
--- a/src/Lucene.Net.Analysis.Common/Analysis/Query/QueryAutoStopWordAnalyzer.cs
+++ b/src/Lucene.Net.Analysis.Common/Analysis/Query/QueryAutoStopWordAnalyzer.cs
@@ -1,11 +1,11 @@
-using Lucene.Net.Analysis.Core;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis.Core;
 using Lucene.Net.Analysis.Util;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Analysis.Query
diff --git a/src/Lucene.Net.Analysis.Common/Analysis/Synonym/SlowSynonymMap.cs b/src/Lucene.Net.Analysis.Common/Analysis/Synonym/SlowSynonymMap.cs
index 35e49fb..bd896d3 100644
--- a/src/Lucene.Net.Analysis.Common/Analysis/Synonym/SlowSynonymMap.cs
+++ b/src/Lucene.Net.Analysis.Common/Analysis/Synonym/SlowSynonymMap.cs
@@ -1,10 +1,10 @@
-using Lucene.Net.Analysis.Util;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis.Util;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
 using System.Text;
 
 namespace Lucene.Net.Analysis.Synonym
diff --git a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPChunkerFilter.cs b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPChunkerFilter.cs
index 141b8a0..0dacec4 100644
--- a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPChunkerFilter.cs
+++ b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPChunkerFilter.cs
@@ -3,7 +3,6 @@ using Lucene.Net.Analysis.OpenNlp.Tools;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Util;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace Lucene.Net.Analysis.OpenNlp
 {
@@ -75,8 +74,8 @@ namespace Lucene.Net.Analysis.OpenNlp
 
         private void NextSentence()
         {
-            IList<string> termList = new List<string>();
-            IList<string> posTagList = new List<string>();
+            var termList = new List<string>();
+            var posTagList = new List<string>();
             sentenceTokenAttrs.Clear();
             bool endOfSentence = false;
             while (!endOfSentence && (moreTokensAvailable = m_input.IncrementToken()))
diff --git a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPLemmatizerFilter.cs b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPLemmatizerFilter.cs
index 096516b..e981e25 100644
--- a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPLemmatizerFilter.cs
+++ b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPLemmatizerFilter.cs
@@ -3,7 +3,6 @@ using Lucene.Net.Analysis.OpenNlp.Tools;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Util;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace Lucene.Net.Analysis.OpenNlp
 {
@@ -92,8 +91,8 @@ namespace Lucene.Net.Analysis.OpenNlp
 
         private void NextSentence()
         {
-            IList<string> tokenList = new List<string>();
-            IList<string> typeList = new List<string>();
+            var tokenList = new List<string>();
+            var typeList = new List<string>();
             sentenceTokenAttrs.Clear();
             bool endOfSentence = false;
             while (!endOfSentence && (moreTokensAvailable = m_input.IncrementToken()))
diff --git a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPPOSFilter.cs b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPPOSFilter.cs
index 0539efe..42f8230 100644
--- a/src/Lucene.Net.Analysis.OpenNLP/OpenNLPPOSFilter.cs
+++ b/src/Lucene.Net.Analysis.OpenNLP/OpenNLPPOSFilter.cs
@@ -3,7 +3,6 @@ using Lucene.Net.Analysis.OpenNlp.Tools;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Util;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace Lucene.Net.Analysis.OpenNlp
 {
@@ -74,7 +73,7 @@ namespace Lucene.Net.Analysis.OpenNlp
 
         private string[] NextSentence()
         {
-            IList<string> termList = new List<string>();
+            var termList = new List<string>();
             sentenceTokenAttrs.Clear();
             bool endOfSentence = false;
             while (!endOfSentence && (moreTokensAvailable = m_input.IncrementToken()))
diff --git a/src/Lucene.Net.Benchmark/ByTask/Feeds/EnwikiQueryMaker.cs b/src/Lucene.Net.Benchmark/ByTask/Feeds/EnwikiQueryMaker.cs
index 1527ce7..69179db 100644
--- a/src/Lucene.Net.Benchmark/ByTask/Feeds/EnwikiQueryMaker.cs
+++ b/src/Lucene.Net.Benchmark/ByTask/Feeds/EnwikiQueryMaker.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Analysis;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.Standard;
 using Lucene.Net.Benchmarks.ByTask.Tasks;
 using Lucene.Net.Index;
@@ -8,7 +9,6 @@ using Lucene.Net.Search.Spans;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using Console = Lucene.Net.Util.SystemConsole;
 
 namespace Lucene.Net.Benchmarks.ByTask.Feeds
diff --git a/src/Lucene.Net.Benchmark/ByTask/Feeds/SimpleSloppyPhraseQueryMaker.cs b/src/Lucene.Net.Benchmark/ByTask/Feeds/SimpleSloppyPhraseQueryMaker.cs
index dea0d89..571fef0 100644
--- a/src/Lucene.Net.Benchmark/ByTask/Feeds/SimpleSloppyPhraseQueryMaker.cs
+++ b/src/Lucene.Net.Benchmark/ByTask/Feeds/SimpleSloppyPhraseQueryMaker.cs
@@ -2,7 +2,6 @@
 using Lucene.Net.Index;
 using Lucene.Net.Search;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace Lucene.Net.Benchmarks.ByTask.Feeds
 {
@@ -42,7 +41,7 @@ namespace Lucene.Net.Benchmarks.ByTask.Feeds
             words = w.ToArray();
 
             // create queries (that would find stuff) with varying slops
-            IList<Query> queries = new List<Query>();
+            List<Query> queries = new List<Query>();
             for (int slop = 0; slop < 8; slop++)
             {
                 for (int qlen = 2; qlen < 6; qlen++)
diff --git a/src/Lucene.Net.Benchmark/Quality/QualityQuery.cs b/src/Lucene.Net.Benchmark/Quality/QualityQuery.cs
index ebb1b3d..4e4af17 100644
--- a/src/Lucene.Net.Benchmark/Quality/QualityQuery.cs
+++ b/src/Lucene.Net.Benchmark/Quality/QualityQuery.cs
@@ -1,8 +1,8 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
-using System.Linq;
 
 namespace Lucene.Net.Benchmarks.Quality
 {
diff --git a/src/Lucene.Net.Benchmark/Quality/QualityStats.cs b/src/Lucene.Net.Benchmark/Quality/QualityStats.cs
index df00676..2ed4e12 100644
--- a/src/Lucene.Net.Benchmark/Quality/QualityStats.cs
+++ b/src/Lucene.Net.Benchmark/Quality/QualityStats.cs
@@ -1,9 +1,9 @@
-using System;
+using J2N.Collections.Generic.Extensions;
+using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Benchmarks.Quality
 {
diff --git a/src/Lucene.Net.Benchmark/Quality/Trec/QueryDriver.cs b/src/Lucene.Net.Benchmark/Quality/Trec/QueryDriver.cs
index 5c5d024..bc44f5a 100644
--- a/src/Lucene.Net.Benchmark/Quality/Trec/QueryDriver.cs
+++ b/src/Lucene.Net.Benchmark/Quality/Trec/QueryDriver.cs
@@ -1,14 +1,14 @@
-using Lucene.Net.Benchmarks.Quality.Utils;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Benchmarks.Quality.Utils;
 using Lucene.Net.Index;
 using Lucene.Net.Search;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using System.Text;
-using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Benchmarks.Quality.Trec
 {
diff --git a/src/Lucene.Net.Benchmark/Quality/Trec/Trec1MQReader.cs b/src/Lucene.Net.Benchmark/Quality/Trec/Trec1MQReader.cs
index 85dceda..d9be721 100644
--- a/src/Lucene.Net.Benchmark/Quality/Trec/Trec1MQReader.cs
+++ b/src/Lucene.Net.Benchmark/Quality/Trec/Trec1MQReader.cs
@@ -1,7 +1,7 @@
-using System;
+using J2N.Collections.Generic.Extensions;
+using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Benchmarks.Quality.Trec
 {
@@ -83,7 +83,7 @@ namespace Lucene.Net.Benchmarks.Quality.Trec
             {
                 reader.Dispose();
             }
-            // sort result array (by ID) 
+            // sort result array (by ID)
             QualityQuery[] qq = res.ToArray();
             Array.Sort(qq);
             return qq;
diff --git a/src/Lucene.Net.Benchmark/Quality/Trec/TrecTopicsReader.cs b/src/Lucene.Net.Benchmark/Quality/Trec/TrecTopicsReader.cs
index 5063313..eabc3ab 100644
--- a/src/Lucene.Net.Benchmark/Quality/Trec/TrecTopicsReader.cs
+++ b/src/Lucene.Net.Benchmark/Quality/Trec/TrecTopicsReader.cs
@@ -1,8 +1,8 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using System.Text;
 
 namespace Lucene.Net.Benchmarks.Quality.Trec
@@ -114,7 +114,7 @@ namespace Lucene.Net.Benchmarks.Quality.Trec
             {
                 reader.Dispose();
             }
-            // sort result array (by ID) 
+            // sort result array (by ID)
             QualityQuery[] qq = res.ToArray();
             Array.Sort(qq);
             return qq;
diff --git a/src/Lucene.Net.Facet/DrillSideways.cs b/src/Lucene.Net.Facet/DrillSideways.cs
index 31fbaaa..f75c909 100644
--- a/src/Lucene.Net.Facet/DrillSideways.cs
+++ b/src/Lucene.Net.Facet/DrillSideways.cs
@@ -1,10 +1,10 @@
-using Lucene.Net.Facet.SortedSet;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Facet.SortedSet;
 using Lucene.Net.Facet.Taxonomy;
 using Lucene.Net.Search;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Facet
 {
diff --git a/src/Lucene.Net.Facet/FacetsConfig.cs b/src/Lucene.Net.Facet/FacetsConfig.cs
index 300614a..ec0b835 100644
--- a/src/Lucene.Net.Facet/FacetsConfig.cs
+++ b/src/Lucene.Net.Facet/FacetsConfig.cs
@@ -1,9 +1,9 @@
-using Lucene.Net.Support;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Support;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using System.Text;
 using System.Threading;
 using JCG = J2N.Collections.Generic;
@@ -34,15 +34,15 @@ namespace Lucene.Net.Facet
     using Document = Lucene.Net.Documents.Document;
     using FacetLabel = Lucene.Net.Facet.Taxonomy.FacetLabel;
     using Field = Lucene.Net.Documents.Field;
-    using SingleAssociationFacetField = Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField;
     using IIndexableField = Lucene.Net.Index.IIndexableField;
     using IIndexableFieldType = Lucene.Net.Index.IIndexableFieldType;
     using Int32AssociationFacetField = Lucene.Net.Facet.Taxonomy.Int32AssociationFacetField;
     using Int32sRef = Lucene.Net.Util.Int32sRef;
+    using ITaxonomyWriter = Lucene.Net.Facet.Taxonomy.ITaxonomyWriter;
+    using SingleAssociationFacetField = Lucene.Net.Facet.Taxonomy.SingleAssociationFacetField;
     using SortedSetDocValuesFacetField = Lucene.Net.Facet.SortedSet.SortedSetDocValuesFacetField;
     using SortedSetDocValuesField = Lucene.Net.Documents.SortedSetDocValuesField;
     using StringField = Lucene.Net.Documents.StringField;
-    using ITaxonomyWriter = Lucene.Net.Facet.Taxonomy.ITaxonomyWriter;
 
     /// <summary>
     /// Records per-dimension configuration.  By default a
diff --git a/src/Lucene.Net.Highlighter/Highlight/QueryTermExtractor.cs b/src/Lucene.Net.Highlighter/Highlight/QueryTermExtractor.cs
index 5716f63..2f5c41d 100644
--- a/src/Lucene.Net.Highlighter/Highlight/QueryTermExtractor.cs
+++ b/src/Lucene.Net.Highlighter/Highlight/QueryTermExtractor.cs
@@ -1,9 +1,9 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using Lucene.Net.Index;
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search.Highlight
diff --git a/src/Lucene.Net.Highlighter/PostingsHighlight/PostingsHighlighter.cs b/src/Lucene.Net.Highlighter/PostingsHighlight/PostingsHighlighter.cs
index 5911100..b894dbe 100644
--- a/src/Lucene.Net.Highlighter/PostingsHighlight/PostingsHighlighter.cs
+++ b/src/Lucene.Net.Highlighter/PostingsHighlight/PostingsHighlighter.cs
@@ -1,4 +1,5 @@
 #if FEATURE_BREAKITERATOR
+using J2N.Collections.Generic.Extensions;
 using J2N.Text;
 using ICU4N.Text;
 using Lucene.Net.Analysis;
@@ -11,7 +12,6 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net.Memory/MemoryIndex.Info.cs b/src/Lucene.Net.Memory/MemoryIndex.Info.cs
index 2d2d8ff..3ca4ff7 100644
--- a/src/Lucene.Net.Memory/MemoryIndex.Info.cs
+++ b/src/Lucene.Net.Memory/MemoryIndex.Info.cs
@@ -1,29 +1,25 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
 using Lucene.Net.Util;
 using System;
 
 namespace Lucene.Net.Index.Memory
 {
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
     public partial class MemoryIndex
     {
         /// <summary>
diff --git a/src/Lucene.Net.Memory/MemoryIndex.MemoryIndexReader.cs b/src/Lucene.Net.Memory/MemoryIndex.MemoryIndexReader.cs
index 74b8090..2bf296e 100644
--- a/src/Lucene.Net.Memory/MemoryIndex.MemoryIndexReader.cs
+++ b/src/Lucene.Net.Memory/MemoryIndex.MemoryIndexReader.cs
@@ -1,24 +1,4 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Search;
 using Lucene.Net.Search.Similarities;
 using Lucene.Net.Util;
@@ -26,10 +6,26 @@ using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Index.Memory
 {
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
     public partial class MemoryIndex
     {
         ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/Lucene.Net.Memory/MemoryIndex.TermComparer.cs b/src/Lucene.Net.Memory/MemoryIndex.TermComparer.cs
index 6d4ad12..dde97f5 100644
--- a/src/Lucene.Net.Memory/MemoryIndex.TermComparer.cs
+++ b/src/Lucene.Net.Memory/MemoryIndex.TermComparer.cs
@@ -1,29 +1,25 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
 using System;
 using System.Collections.Generic;
 
 namespace Lucene.Net.Index.Memory
 {
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
     public partial class MemoryIndex
     {
         private class TermComparer
diff --git a/src/Lucene.Net.Misc/Index/MultiPassIndexSplitter.cs b/src/Lucene.Net.Misc/Index/MultiPassIndexSplitter.cs
index a24ca47..66d40b3 100644
--- a/src/Lucene.Net.Misc/Index/MultiPassIndexSplitter.cs
+++ b/src/Lucene.Net.Misc/Index/MultiPassIndexSplitter.cs
@@ -1,11 +1,11 @@
-using Lucene.Net.Store;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Store;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using Console = Lucene.Net.Util.SystemConsole;
 
 namespace Lucene.Net.Index
diff --git a/src/Lucene.Net.Misc/Index/Sorter/SortingMergePolicy.cs b/src/Lucene.Net.Misc/Index/Sorter/SortingMergePolicy.cs
index 6fcb3eb..4692901 100644
--- a/src/Lucene.Net.Misc/Index/Sorter/SortingMergePolicy.cs
+++ b/src/Lucene.Net.Misc/Index/Sorter/SortingMergePolicy.cs
@@ -1,11 +1,11 @@
-using Lucene.Net.Search;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Search;
 using Lucene.Net.Store;
 using Lucene.Net.Util;
 using Lucene.Net.Util.Packed;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Index.Sorter
 {
diff --git a/src/Lucene.Net.Queries/CommonTermsQuery.cs b/src/Lucene.Net.Queries/CommonTermsQuery.cs
index 2651ba7..212345d 100644
--- a/src/Lucene.Net.Queries/CommonTermsQuery.cs
+++ b/src/Lucene.Net.Queries/CommonTermsQuery.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Index;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Index;
 using Lucene.Net.Search;
 using Lucene.Net.Util;
 using System;
@@ -6,7 +7,6 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net.Queries/Mlt/MoreLikeThis.cs b/src/Lucene.Net.Queries/Mlt/MoreLikeThis.cs
index 0011d82..1a8574c 100644
--- a/src/Lucene.Net.Queries/Mlt/MoreLikeThis.cs
+++ b/src/Lucene.Net.Queries/Mlt/MoreLikeThis.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Analysis;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Documents;
 using Lucene.Net.Index;
@@ -10,7 +11,6 @@ using System;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
 using System.IO;
-using System.Linq;
 using System.Text;
 
 namespace Lucene.Net.Queries.Mlt
diff --git a/src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingSuggester.cs b/src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingSuggester.cs
index ff1de2a..3ec11c5 100644
--- a/src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingSuggester.cs
+++ b/src/Lucene.Net.Suggest/Suggest/Analyzing/AnalyzingSuggester.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Analysis;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis;
 using Lucene.Net.Store;
 using Lucene.Net.Support;
 using Lucene.Net.Support.IO;
@@ -9,7 +10,6 @@ using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search.Suggest.Analyzing
diff --git a/src/Lucene.Net.TestFramework/Analysis/BaseTokenStreamTestCase.cs b/src/Lucene.Net.TestFramework/Analysis/BaseTokenStreamTestCase.cs
index 859e90c..dea1fa3 100644
--- a/src/Lucene.Net.TestFramework/Analysis/BaseTokenStreamTestCase.cs
+++ b/src/Lucene.Net.TestFramework/Analysis/BaseTokenStreamTestCase.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Threading;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Documents;
@@ -8,7 +9,6 @@ using System;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 using System.Text;
 using System.Threading;
 using Assert = Lucene.Net.TestFramework.Assert;
diff --git a/src/Lucene.Net.TestFramework/Index/AlcoholicMergePolicy.cs b/src/Lucene.Net.TestFramework/Index/AlcoholicMergePolicy.cs
index 7ae990b..610f473 100644
--- a/src/Lucene.Net.TestFramework/Index/AlcoholicMergePolicy.cs
+++ b/src/Lucene.Net.TestFramework/Index/AlcoholicMergePolicy.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Util;
 using System;
-using System.Linq;
 
 namespace Lucene.Net.Index
 {
@@ -56,7 +55,7 @@ namespace Lucene.Net.Index
             if (hourOfDay < 6 || hourOfDay > 20 || random.Next(23) == 5)
             // its 5 o'clock somewhere
             {
-                Drink[] values = Enum.GetValues(typeof(Drink)).Cast<Drink>().ToArray();
+                Drink[] values = (Drink[])Enum.GetValues(typeof(Drink));
                 // pick a random drink during the day
                 Drink drink = values[random.Next(values.Length - 1)];
                 return (long)drink * info.GetSizeInBytes();
diff --git a/src/Lucene.Net.TestFramework/Index/BaseStoredFieldsFormatTestCase.cs b/src/Lucene.Net.TestFramework/Index/BaseStoredFieldsFormatTestCase.cs
index 9e03dde..6e0dc32 100644
--- a/src/Lucene.Net.TestFramework/Index/BaseStoredFieldsFormatTestCase.cs
+++ b/src/Lucene.Net.TestFramework/Index/BaseStoredFieldsFormatTestCase.cs
@@ -17,7 +17,6 @@ using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
diff --git a/src/Lucene.Net.TestFramework/Search/ShardSearchingTestBase.cs b/src/Lucene.Net.TestFramework/Search/ShardSearchingTestBase.cs
index 453adae..6852ca0 100644
--- a/src/Lucene.Net.TestFramework/Search/ShardSearchingTestBase.cs
+++ b/src/Lucene.Net.TestFramework/Search/ShardSearchingTestBase.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Threading;
 using Lucene.Net.Analysis;
 using Lucene.Net.Index;
@@ -8,7 +9,6 @@ using Lucene.Net.Util;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
 using Debug = Lucene.Net.Diagnostics.Debug; // LUCENENET NOTE: We cannot use System.Diagnostics.Debug because those calls will be optimized out of the release!
diff --git a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestStemmerOverrideFilter.cs b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestStemmerOverrideFilter.cs
index 47450f1..dbf1573 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestStemmerOverrideFilter.cs
+++ b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestStemmerOverrideFilter.cs
@@ -1,8 +1,8 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using J2N.Text;
 using Lucene.Net.Analysis.Core;
 using Lucene.Net.Analysis.En;
-using Lucene.Net.Analysis.Miscellaneous;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System.Collections.Generic;
diff --git a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestTrimFilter.cs b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestTrimFilter.cs
index 1943883..92962dd 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestTrimFilter.cs
+++ b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestTrimFilter.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Analysis.Core;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis.Core;
 using Lucene.Net.Analysis.TokenAttributes;
 using Lucene.Net.Util;
 using NUnit.Framework;
diff --git a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSlowSynonymFilter.cs b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSlowSynonymFilter.cs
index 38167ea..54f01de 100644
--- a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSlowSynonymFilter.cs
+++ b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Synonym/TestSlowSynonymFilter.cs
@@ -1,4 +1,5 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using Lucene.Net.Analysis.TokenAttributes;
 using NUnit.Framework;
 using System;
diff --git a/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs b/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
index eb57574..b86b08d 100644
--- a/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
+++ b/src/Lucene.Net.Tests.Facet/TestDrillSideways.cs
@@ -1,4 +1,5 @@
-using J2N.Text;
+using J2N.Collections.Generic.Extensions;
+using J2N.Text;
 using Lucene.Net.Search;
 using Lucene.Net.Support;
 using NUnit.Framework;
@@ -1061,7 +1062,7 @@ namespace Lucene.Net.Facet
         {
             int numDims = dimValues.Length;
 
-            IList<Doc> hits = new List<Doc>();
+            List<Doc> hits = new List<Doc>();
             Counters drillDownCounts = new Counters(dimValues);
             Counters[] drillSidewaysCounts = new Counters[dimValues.Length];
             for (int dim = 0; dim < numDims; dim++)
@@ -1151,9 +1152,7 @@ namespace Lucene.Net.Facet
                 idToDocID[s.Doc(i).Get("id")] = i;
             }
 
-            var hitsSorted = hits.ToArray();
-            Array.Sort(hitsSorted);
-            hits = hitsSorted.ToList();
+            hits.Sort();
 
             TestFacetResult res = new TestFacetResult();
             res.Hits = hits;
diff --git a/src/Lucene.Net.Tests.Join/TestBlockJoin.cs b/src/Lucene.Net.Tests.Join/TestBlockJoin.cs
index dfe0a0f..ac4199d 100644
--- a/src/Lucene.Net.Tests.Join/TestBlockJoin.cs
+++ b/src/Lucene.Net.Tests.Join/TestBlockJoin.cs
@@ -1,13 +1,13 @@
-using Lucene.Net.Analysis;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Analysis;
 using Lucene.Net.Documents;
 using Lucene.Net.Documents.Extensions;
-using Lucene.Net.Search.Grouping;
 using Lucene.Net.Index;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Join;
 using Lucene.Net.Search;
+using Lucene.Net.Search.Grouping;
 using Lucene.Net.Store;
-using Lucene.Net.Support;
 using Lucene.Net.Util;
 using NUnit.Framework;
 using System;
@@ -15,7 +15,6 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using Console = Lucene.Net.Util.SystemConsole;
-using J2N.Collections.Generic.Extensions;
 
 namespace Lucene.Net.Tests.Join
 {
@@ -503,7 +502,7 @@ namespace Lucene.Net.Tests.Join
 
         private Sort GetRandomSort(string prefix, int numFields)
         {
-            IList<SortField> sortFields = new List<SortField>();
+            List<SortField> sortFields = new List<SortField>();
             // TODO: sometimes sort by score; problem is scores are
             // not comparable across the two indices
             // sortFields.Add(SortField.FIELD_SCORE);
@@ -805,7 +804,7 @@ namespace Lucene.Net.Tests.Join
                 }
 
                 // Merge both sorts:
-                IList<SortField> sortFields = new List<SortField>(parentSort.GetSort());
+                List<SortField> sortFields = new List<SortField>(parentSort.GetSort());
                 sortFields.AddRange(childSort.GetSort());
                 Sort parentAndChildSort = new Sort(sortFields.ToArray());
 
diff --git a/src/Lucene.Net.Tests.Misc/Index/Sorter/SorterTestBase.cs b/src/Lucene.Net.Tests.Misc/Index/Sorter/SorterTestBase.cs
index f09b96d..0d9eeeb 100644
--- a/src/Lucene.Net.Tests.Misc/Index/Sorter/SorterTestBase.cs
+++ b/src/Lucene.Net.Tests.Misc/Index/Sorter/SorterTestBase.cs
@@ -12,7 +12,6 @@ using NUnit.Framework;
 using System;
 using System.Collections.Generic;
 using System.Globalization;
-using System.Linq;
 using Console = Lucene.Net.Util.SystemConsole;
 
 namespace Lucene.Net.Index.Sorter
@@ -186,7 +185,7 @@ namespace Lucene.Net.Index.Sorter
 
             if (Verbose)
             {
-                Console.WriteLine("Shuffled IDs for indexing: " + Arrays.ToString(ids.ToArray()));
+                Console.WriteLine("Shuffled IDs for indexing: " + Collections.ToString(ids));
             }
 
             PositionsTokenStream positions = new PositionsTokenStream();
diff --git a/src/Lucene.Net.Tests.Misc/Util/Fst/TestFSTsMisc.cs b/src/Lucene.Net.Tests.Misc/Util/Fst/TestFSTsMisc.cs
index 59ebe9d..f1e74c9 100644
--- a/src/Lucene.Net.Tests.Misc/Util/Fst/TestFSTsMisc.cs
+++ b/src/Lucene.Net.Tests.Misc/Util/Fst/TestFSTsMisc.cs
@@ -1,34 +1,31 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Store;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Util.Fst
 {
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
     public class TestFSTsMisc : LuceneTestCase
     {
         private MockDirectoryWrapper dir;
@@ -67,7 +64,7 @@ namespace Lucene.Net.Util.Fst
                 {
                     int numWords = random.nextInt(maxNumWords + 1);
                     ISet<Int32sRef> termsSet = new JCG.HashSet<Int32sRef>();
-                    Int32sRef[] terms = new Int32sRef[numWords];
+                    //Int32sRef[] terms = new Int32sRef[numWords]; // LUCENENET: Not used
                     while (termsSet.size() < numWords)
                     {
                         string term = FSTTester<object>.GetRandomString(random);
diff --git a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
index e1ebc0e..a19c6b4 100644
--- a/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
+++ b/src/Lucene.Net.Tests/Index/TestBackwardsCompatibility.cs
@@ -1,4 +1,5 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Index.Extensions;
 using NUnit.Framework;
 using System;
diff --git a/src/Lucene.Net.Tests/Index/TestDocTermOrds.cs b/src/Lucene.Net.Tests/Index/TestDocTermOrds.cs
index 23775e8..1ba122e 100644
--- a/src/Lucene.Net.Tests/Index/TestDocTermOrds.cs
+++ b/src/Lucene.Net.Tests/Index/TestDocTermOrds.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
@@ -5,9 +6,9 @@ using NUnit.Framework;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using JCG = J2N.Collections.Generic;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
 {
diff --git a/src/Lucene.Net.Tests/Index/TestMaxTermFrequency.cs b/src/Lucene.Net.Tests/Index/TestMaxTermFrequency.cs
index ec0d023..d9bd693 100644
--- a/src/Lucene.Net.Tests/Index/TestMaxTermFrequency.cs
+++ b/src/Lucene.Net.Tests/Index/TestMaxTermFrequency.cs
@@ -5,7 +5,6 @@ using Lucene.Net.Support;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Index
@@ -109,7 +108,7 @@ namespace Lucene.Net.Index
             expected.Add(max);
 
             terms.Shuffle(Random);
-            return Arrays.ToString(terms.ToArray());
+            return Collections.ToString(terms);
         }
 
         /// <summary>
diff --git a/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs b/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
index a6d7ef3..c506b90 100644
--- a/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
+++ b/src/Lucene.Net.Tests/Index/TestPostingsOffsets.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
 using Lucene.Net.Search;
diff --git a/src/Lucene.Net.Tests/Search/TestMultiPhraseQuery.cs b/src/Lucene.Net.Tests/Search/TestMultiPhraseQuery.cs
index 504562e..086f81d 100644
--- a/src/Lucene.Net.Tests/Search/TestMultiPhraseQuery.cs
+++ b/src/Lucene.Net.Tests/Search/TestMultiPhraseQuery.cs
@@ -1,8 +1,9 @@
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Documents;
+using NUnit.Framework;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using Lucene.Net.Documents;
-using NUnit.Framework;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
 
diff --git a/src/Lucene.Net.Tests/Search/TestPhrasePrefixQuery.cs b/src/Lucene.Net.Tests/Search/TestPhrasePrefixQuery.cs
index 319f4db..22f7bcd 100644
--- a/src/Lucene.Net.Tests/Search/TestPhrasePrefixQuery.cs
+++ b/src/Lucene.Net.Tests/Search/TestPhrasePrefixQuery.cs
@@ -1,8 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Documents;
 using NUnit.Framework;
+using System;
+using System.Collections.Generic;
 using Assert = Lucene.Net.TestFramework.Assert;
 
 namespace Lucene.Net.Search
diff --git a/src/Lucene.Net.Tests/Util/Automaton/TestCompiledAutomaton.cs b/src/Lucene.Net.Tests/Util/Automaton/TestCompiledAutomaton.cs
index 0d77750..1f19a77 100644
--- a/src/Lucene.Net.Tests/Util/Automaton/TestCompiledAutomaton.cs
+++ b/src/Lucene.Net.Tests/Util/Automaton/TestCompiledAutomaton.cs
@@ -1,10 +1,11 @@
+using J2N.Collections.Generic.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using JCG = J2N.Collections.Generic;
 using Assert = Lucene.Net.TestFramework.Assert;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Util.Automaton
 {
diff --git a/src/Lucene.Net.Tests/Util/TestRecyclingByteBlockAllocator.cs b/src/Lucene.Net.Tests/Util/TestRecyclingByteBlockAllocator.cs
index ea4c360..9eba354 100644
--- a/src/Lucene.Net.Tests/Util/TestRecyclingByteBlockAllocator.cs
+++ b/src/Lucene.Net.Tests/Util/TestRecyclingByteBlockAllocator.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
diff --git a/src/Lucene.Net.Tests/Util/TestRecyclingIntBlockAllocator.cs b/src/Lucene.Net.Tests/Util/TestRecyclingIntBlockAllocator.cs
index f1c5b12..ab44866 100644
--- a/src/Lucene.Net.Tests/Util/TestRecyclingIntBlockAllocator.cs
+++ b/src/Lucene.Net.Tests/Util/TestRecyclingIntBlockAllocator.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using NUnit.Framework;
 using System;
 using System.Collections.Generic;
diff --git a/src/Lucene.Net/Codecs/DocValuesConsumer.cs b/src/Lucene.Net/Codecs/DocValuesConsumer.cs
index 0b90d3a..c16ef25 100644
--- a/src/Lucene.Net/Codecs/DocValuesConsumer.cs
+++ b/src/Lucene.Net/Codecs/DocValuesConsumer.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Codecs
 {
diff --git a/src/Lucene.Net/Index/FieldInfos.cs b/src/Lucene.Net/Index/FieldInfos.cs
index 59bdcbc..46caee4 100644
--- a/src/Lucene.Net/Index/FieldInfos.cs
+++ b/src/Lucene.Net/Index/FieldInfos.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
diff --git a/src/Lucene.Net/Index/FrozenBufferedUpdates.cs b/src/Lucene.Net/Index/FrozenBufferedUpdates.cs
index d768c11..1e1080f 100644
--- a/src/Lucene.Net/Index/FrozenBufferedUpdates.cs
+++ b/src/Lucene.Net/Index/FrozenBufferedUpdates.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Index
 {
@@ -68,7 +68,8 @@ namespace Lucene.Net.Index
         {
             this.isSegmentPrivate = isSegmentPrivate;
             Debug.Assert(!isSegmentPrivate || deletes.terms.Count == 0, "segment private package should only have del queries");
-            Term[] termsArray = deletes.terms.Keys.ToArray(/*new Term[deletes.Terms.Count]*/);
+            Term[] termsArray = deletes.terms.Keys.ToArray(/*new Term[deletes.terms.Count]*/);
+
             termCount = termsArray.Length;
             ArrayUtil.TimSort(termsArray);
             PrefixCodedTerms.Builder builder = new PrefixCodedTerms.Builder();
diff --git a/src/Lucene.Net/Index/MultiFields.cs b/src/Lucene.Net/Index/MultiFields.cs
index 91e78c3..dfda748 100644
--- a/src/Lucene.Net/Index/MultiFields.cs
+++ b/src/Lucene.Net/Index/MultiFields.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Util;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
diff --git a/src/Lucene.Net/Index/MultiTerms.cs b/src/Lucene.Net/Index/MultiTerms.cs
index 35ae959..6cbcd43 100644
--- a/src/Lucene.Net/Index/MultiTerms.cs
+++ b/src/Lucene.Net/Index/MultiTerms.cs
@@ -1,7 +1,7 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Index
 {
diff --git a/src/Lucene.Net/Index/SegmentDocValues.cs b/src/Lucene.Net/Index/SegmentDocValues.cs
index d5935b7..a9846f1 100644
--- a/src/Lucene.Net/Index/SegmentDocValues.cs
+++ b/src/Lucene.Net/Index/SegmentDocValues.cs
@@ -1,9 +1,9 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Globalization;
-using System.Linq;
 
 namespace Lucene.Net.Index
 {
diff --git a/src/Lucene.Net/Index/SegmentMerger.cs b/src/Lucene.Net/Index/SegmentMerger.cs
index d5c4d74..8a2128f 100644
--- a/src/Lucene.Net/Index/SegmentMerger.cs
+++ b/src/Lucene.Net/Index/SegmentMerger.cs
@@ -1,9 +1,9 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Support;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
diff --git a/src/Lucene.Net/Index/StandardDirectoryReader.cs b/src/Lucene.Net/Index/StandardDirectoryReader.cs
index 5bb29c5..dd8c99a 100644
--- a/src/Lucene.Net/Index/StandardDirectoryReader.cs
+++ b/src/Lucene.Net/Index/StandardDirectoryReader.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using System.Text;
 
 namespace Lucene.Net.Index
diff --git a/src/Lucene.Net/Search/BooleanQuery.cs b/src/Lucene.Net/Search/BooleanQuery.cs
index 6ea6a67..59f225b 100644
--- a/src/Lucene.Net/Search/BooleanQuery.cs
+++ b/src/Lucene.Net/Search/BooleanQuery.cs
@@ -1,8 +1,8 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Linq;
 #if FEATURE_SERIALIZABLE_EXCEPTIONS
 using System.Runtime.Serialization;
 #endif
diff --git a/src/Lucene.Net/Search/BooleanScorer2.cs b/src/Lucene.Net/Search/BooleanScorer2.cs
index ae4ace1..3daf92e 100644
--- a/src/Lucene.Net/Search/BooleanScorer2.cs
+++ b/src/Lucene.Net/Search/BooleanScorer2.cs
@@ -1,6 +1,6 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
-using System.Linq;
 
 namespace Lucene.Net.Search
 {
diff --git a/src/Lucene.Net/Search/DisjunctionMaxQuery.cs b/src/Lucene.Net/Search/DisjunctionMaxQuery.cs
index 04184a5..be1c56a 100644
--- a/src/Lucene.Net/Search/DisjunctionMaxQuery.cs
+++ b/src/Lucene.Net/Search/DisjunctionMaxQuery.cs
@@ -1,8 +1,8 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Util;
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
@@ -66,7 +66,7 @@ namespace Lucene.Net.Search
         /// <summary>
         /// Multiple of the non-max disjunct scores added into our final score.  Non-zero values support tie-breaking.
         /// </summary>
-        private float tieBreakerMultiplier = 0.0f;
+        private readonly float tieBreakerMultiplier = 0.0f;
 
         /// <summary>
         /// Creates a new empty <see cref="DisjunctionMaxQuery"/>.  Use <see cref="Add(Query)"/> to add the subqueries. </summary>
diff --git a/src/Lucene.Net/Search/FieldCacheImpl.cs b/src/Lucene.Net/Search/FieldCacheImpl.cs
index 61b4e2e..42c9be4 100644
--- a/src/Lucene.Net/Search/FieldCacheImpl.cs
+++ b/src/Lucene.Net/Search/FieldCacheImpl.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using Lucene.Net.Support.IO;
@@ -6,7 +7,6 @@ using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Search
@@ -146,7 +146,7 @@ namespace Lucene.Net.Search
 
         private class CoreClosedListenerAnonymousInnerClassHelper : SegmentReader.ICoreDisposedListener
         {
-            private FieldCacheImpl outerInstance;
+            private readonly FieldCacheImpl outerInstance;
 
             public CoreClosedListenerAnonymousInnerClassHelper(FieldCacheImpl outerInstance)
             {
@@ -164,7 +164,7 @@ namespace Lucene.Net.Search
 
         private class ReaderClosedListenerAnonymousInnerClassHelper : IndexReader.IReaderClosedListener
         {
-            private FieldCacheImpl outerInstance;
+            private readonly FieldCacheImpl outerInstance;
 
             public ReaderClosedListenerAnonymousInnerClassHelper(FieldCacheImpl outerInstance)
             {
diff --git a/src/Lucene.Net/Search/FuzzyTermsEnum.cs b/src/Lucene.Net/Search/FuzzyTermsEnum.cs
index 31fec71..41ab164 100644
--- a/src/Lucene.Net/Search/FuzzyTermsEnum.cs
+++ b/src/Lucene.Net/Search/FuzzyTermsEnum.cs
@@ -1,4 +1,5 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using Lucene.Net.Util;
@@ -6,7 +7,6 @@ using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search
diff --git a/src/Lucene.Net/Search/MinShouldMatchSumScorer.cs b/src/Lucene.Net/Search/MinShouldMatchSumScorer.cs
index e56daaf..3742c1c 100644
--- a/src/Lucene.Net/Search/MinShouldMatchSumScorer.cs
+++ b/src/Lucene.Net/Search/MinShouldMatchSumScorer.cs
@@ -1,8 +1,8 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Lucene.Net.Search
 {
diff --git a/src/Lucene.Net/Search/PhraseQuery.cs b/src/Lucene.Net/Search/PhraseQuery.cs
index 22d6549..0ebb334 100644
--- a/src/Lucene.Net/Search/PhraseQuery.cs
+++ b/src/Lucene.Net/Search/PhraseQuery.cs
@@ -1,10 +1,10 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Index;
 using Lucene.Net.Support;
 using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net/Search/SloppyPhraseScorer.cs b/src/Lucene.Net/Search/SloppyPhraseScorer.cs
index a7213bc..c78836d 100644
--- a/src/Lucene.Net/Search/SloppyPhraseScorer.cs
+++ b/src/Lucene.Net/Search/SloppyPhraseScorer.cs
@@ -1,7 +1,7 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search
diff --git a/src/Lucene.Net/Search/Spans/SpanNearQuery.cs b/src/Lucene.Net/Search/Spans/SpanNearQuery.cs
index d5e9422..a4bbe9a 100644
--- a/src/Lucene.Net/Search/Spans/SpanNearQuery.cs
+++ b/src/Lucene.Net/Search/Spans/SpanNearQuery.cs
@@ -1,6 +1,6 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net/Search/Spans/SpanOrQuery.cs b/src/Lucene.Net/Search/Spans/SpanOrQuery.cs
index 59f803f..74e228c 100644
--- a/src/Lucene.Net/Search/Spans/SpanOrQuery.cs
+++ b/src/Lucene.Net/Search/Spans/SpanOrQuery.cs
@@ -1,6 +1,6 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net/Search/TopTermsRewrite.cs b/src/Lucene.Net/Search/TopTermsRewrite.cs
index 2f07eb8..f4b9b5e 100644
--- a/src/Lucene.Net/Search/TopTermsRewrite.cs
+++ b/src/Lucene.Net/Search/TopTermsRewrite.cs
@@ -1,7 +1,7 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Search
@@ -77,7 +77,8 @@ namespace Lucene.Net.Search
             CollectTerms(reader, query, new TermCollectorAnonymousInnerClassHelper(this, maxSize, stQueue));
 
             var q = GetTopLevelQuery();
-            ScoreTerm[] scoreTerms = stQueue.ToArray(/*new ScoreTerm[stQueue.size()]*/);
+            ScoreTerm[] scoreTerms = stQueue.ToArray(/*new ScoreTerm[stQueue.Count]*/);
+
             ArrayUtil.TimSort(scoreTerms, scoreTermSortByTermComp);
 
             foreach (ScoreTerm st in scoreTerms)
diff --git a/src/Lucene.Net/Store/CompoundFileDirectory.cs b/src/Lucene.Net/Store/CompoundFileDirectory.cs
index b0230f5..d3d7e7c 100644
--- a/src/Lucene.Net/Store/CompoundFileDirectory.cs
+++ b/src/Lucene.Net/Store/CompoundFileDirectory.cs
@@ -1,10 +1,10 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Numerics;
 using Lucene.Net.Support;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Store
 {
diff --git a/src/Lucene.Net/Store/CompoundFileWriter.cs b/src/Lucene.Net/Store/CompoundFileWriter.cs
index 5a3900c..885426a 100644
--- a/src/Lucene.Net/Store/CompoundFileWriter.cs
+++ b/src/Lucene.Net/Store/CompoundFileWriter.cs
@@ -1,9 +1,9 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Threading.Atomic;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 using System.Runtime.CompilerServices;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net/Store/FileSwitchDirectory.cs b/src/Lucene.Net/Store/FileSwitchDirectory.cs
index 7eec170..49b734f 100644
--- a/src/Lucene.Net/Store/FileSwitchDirectory.cs
+++ b/src/Lucene.Net/Store/FileSwitchDirectory.cs
@@ -1,7 +1,7 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Store
diff --git a/src/Lucene.Net/Store/NRTCachingDirectory.cs b/src/Lucene.Net/Store/NRTCachingDirectory.cs
index acafa79..1eb8e16 100644
--- a/src/Lucene.Net/Store/NRTCachingDirectory.cs
+++ b/src/Lucene.Net/Store/NRTCachingDirectory.cs
@@ -1,9 +1,9 @@
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
-using JCG = J2N.Collections.Generic;
 using Console = Lucene.Net.Util.SystemConsole;
+using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Store
 {
diff --git a/src/Lucene.Net/Store/RAMDirectory.cs b/src/Lucene.Net/Store/RAMDirectory.cs
index 5b3c705..7cf0746 100644
--- a/src/Lucene.Net/Store/RAMDirectory.cs
+++ b/src/Lucene.Net/Store/RAMDirectory.cs
@@ -1,10 +1,10 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Threading.Atomic;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Store
 {
diff --git a/src/Lucene.Net/Support/CollectionExtensions.cs b/src/Lucene.Net/Support/CollectionExtensions.cs
new file mode 100644
index 0000000..6eb7ed0
--- /dev/null
+++ b/src/Lucene.Net/Support/CollectionExtensions.cs
@@ -0,0 +1,51 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+
+namespace Lucene.Net.Support
+{
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
+    /// <summary>
+    /// Extensions for <see cref="ICollection{T}"/>.
+    /// </summary>
+    internal static class CollectionExtensions
+    {
+        /// <summary>
+        /// Removes the given collection of elements from the source <see cref="ICollection{T}"/>.
+        /// </summary>
+        /// <typeparam name="T">The type of the elements of <paramref name="source"/>.</typeparam>
+        /// <param name="source">An <see cref="ICollection{T}"/> to remove elements from.</param>
+        /// <param name="removeList">An <see cref="IEnumerable{T}"/> containing the items to remove from <paramref name="source"/>.</param>
+        [DebuggerStepThrough]
+        [MethodImpl(MethodImplOptions.AggressiveInlining)]
+        public static void RemoveAll<T>(this ICollection<T> source, IEnumerable<T> removeList)
+        {
+            if (source == null)
+                throw new ArgumentNullException(nameof(source));
+
+            if (source.Count == 0) return;
+
+            foreach (var elt in removeList)
+            {
+                source.Remove(elt);
+            }
+        }
+    }
+}
diff --git a/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs b/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
index 29058de..64a5272 100644
--- a/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
+++ b/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
@@ -1,4 +1,5 @@
-using Lucene.Net.Support.Threading;
+using J2N.Collections.Generic.Extensions;
+using Lucene.Net.Support.Threading;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
diff --git a/src/Lucene.Net/Support/SetExtensions.cs b/src/Lucene.Net/Support/SetExtensions.cs
index 4ab38e9..53e91a7 100644
--- a/src/Lucene.Net/Support/SetExtensions.cs
+++ b/src/Lucene.Net/Support/SetExtensions.cs
@@ -1,7 +1,6 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
-using System.Diagnostics;
 
 namespace Lucene.Net.Support
 {
@@ -24,15 +23,6 @@ namespace Lucene.Net.Support
 
     internal static class SetExtensions
     {
-        [DebuggerStepThrough]
-        public static void RemoveAll<T>(this ICollection<T> theSet, IEnumerable<T> removeList)
-        {
-            foreach (var elt in removeList)
-            {
-                theSet.Remove(elt);
-            }
-        }
-
         /// <summary>
         /// Returns a concurrent wrapper for the current <see cref="ISet{T}"/>.
         /// </summary>
diff --git a/src/Lucene.Net/Support/Util/ExceptionExtensions.cs b/src/Lucene.Net/Support/Util/ExceptionExtensions.cs
index bd38e59..5983af1 100644
--- a/src/Lucene.Net/Support/Util/ExceptionExtensions.cs
+++ b/src/Lucene.Net/Support/Util/ExceptionExtensions.cs
@@ -1,4 +1,5 @@
-using System;
+using J2N.Collections.Generic.Extensions;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 
diff --git a/src/Lucene.Net/Support/WeakDictionary.cs b/src/Lucene.Net/Support/WeakDictionary.cs
index 3d6567f..c8be30c 100644
--- a/src/Lucene.Net/Support/WeakDictionary.cs
+++ b/src/Lucene.Net/Support/WeakDictionary.cs
@@ -38,11 +38,11 @@ namespace Lucene.Net.Support
         private int _gcCollections = 0;
 
         public WeakDictionary(int initialCapacity)
-            : this(initialCapacity, Enumerable.Empty<KeyValuePair<TKey, TValue>>())
+            : this(initialCapacity, Arrays.Empty<KeyValuePair<TKey, TValue>>())
         { }
 
         public WeakDictionary()
-            : this(32, Enumerable.Empty<KeyValuePair<TKey, TValue>>())
+            : this(32, Arrays.Empty<KeyValuePair<TKey, TValue>>())
         { }
 
         public WeakDictionary(IEnumerable<KeyValuePair<TKey, TValue>> otherDictionary)
diff --git a/src/Lucene.Net/Util/Attribute.cs b/src/Lucene.Net/Util/Attribute.cs
index c9eda89..782392f 100644
--- a/src/Lucene.Net/Util/Attribute.cs
+++ b/src/Lucene.Net/Util/Attribute.cs
@@ -1,9 +1,3 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-
 namespace Lucene.Net.Util
 {
     /*
diff --git a/src/Lucene.Net/Util/Automaton/Automaton.cs b/src/Lucene.Net/Util/Automaton/Automaton.cs
index 51ab8b3..36fe166 100644
--- a/src/Lucene.Net/Util/Automaton/Automaton.cs
+++ b/src/Lucene.Net/Util/Automaton/Automaton.cs
@@ -1,8 +1,8 @@
 using J2N;
+using J2N.Collections.Generic.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
-using System.Linq;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
diff --git a/src/Lucene.Net/Util/Automaton/SpecialOperations.cs b/src/Lucene.Net/Util/Automaton/SpecialOperations.cs
index c22ce6d..f9e0f3f 100644
--- a/src/Lucene.Net/Util/Automaton/SpecialOperations.cs
+++ b/src/Lucene.Net/Util/Automaton/SpecialOperations.cs
@@ -1,3 +1,4 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Text;
 using System.Collections.Generic;
 using System.Linq;
diff --git a/src/Lucene.Net/Util/ByteBlockPool.cs b/src/Lucene.Net/Util/ByteBlockPool.cs
index 50deda9..bfb7ed1 100644
--- a/src/Lucene.Net/Util/ByteBlockPool.cs
+++ b/src/Lucene.Net/Util/ByteBlockPool.cs
@@ -1,10 +1,10 @@
+using J2N.Collections.Generic.Extensions;
 using J2N.Numerics;
 using Lucene.Net.Support;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Diagnostics.CodeAnalysis;
-using System.Linq;
 
 namespace Lucene.Net.Util
 {
diff --git a/src/Lucene.Net/Util/QueryBuilder.cs b/src/Lucene.Net/Util/QueryBuilder.cs
index 336a543..25f0079 100644
--- a/src/Lucene.Net/Util/QueryBuilder.cs
+++ b/src/Lucene.Net/Util/QueryBuilder.cs
@@ -1,9 +1,9 @@
+using J2N.Collections.Generic.Extensions;
 using Lucene.Net.Analysis.TokenAttributes;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.IO;
-using System.Linq;
 
 namespace Lucene.Net.Util
 {
diff --git a/src/Lucene.Net/Util/SPIClassIterator.cs b/src/Lucene.Net/Util/SPIClassIterator.cs
index 24da34e..a2cbebd 100644
--- a/src/Lucene.Net/Util/SPIClassIterator.cs
+++ b/src/Lucene.Net/Util/SPIClassIterator.cs
@@ -1,7 +1,6 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Reflection;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Util