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 49d3e931e270c64bb2361fc531a240be7ead4fbc
Author: Vincent Van Den Berghe <[email protected]>
AuthorDate: Tue Jun 13 07:50:31 2017 +0200

    LUCENE-5644: switch to simpler LIFO thread to ThreadState allocator during 
indexing. Technically, this is something from releases/lucene-solr/4.8.1, but 
profiling indicates it makes a huge difference in multithreaded scenarios
---
 .../Index/RandomDocumentsWriterPerThreadPool.cs    | 102 ---
 .../Lucene.Net.TestFramework.csproj                | 437 +++++++++++
 .../Util/LuceneTestCase.cs                         |  27 +-
 .../Index/TestFlushByRamOrCountsPolicy.cs          |   8 +-
 .../Index/TestIndexWriterConfig.cs                 |   2 +-
 src/Lucene.Net.Tests/Index/TestStressIndexing2.cs  |   2 +-
 src/Lucene.Net/Index/DocumentsWriter.cs            |  10 +-
 .../Index/DocumentsWriterFlushControl.cs           |   4 +-
 .../Index/DocumentsWriterPerThreadPool.cs          | 203 +++--
 src/Lucene.Net/Index/IndexWriterConfig.cs          |  43 +-
 src/Lucene.Net/Index/LiveIndexWriterConfig.cs      |   4 +-
 .../ThreadAffinityDocumentsWriterThreadPool.cs     |  95 ---
 src/Lucene.Net/Lucene.Net.csproj                   | 845 +++++++++++++++++++++
 13 files changed, 1453 insertions(+), 329 deletions(-)

diff --git 
a/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs 
b/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs
deleted file mode 100644
index fc82ddb..0000000
--- a/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs
+++ /dev/null
@@ -1,102 +0,0 @@
-using Lucene.Net.Diagnostics;
-using System;
-using System.Threading;
-
-namespace Lucene.Net.Index
-{
-    /*
-     * 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>
-    /// A <see cref="DocumentsWriterPerThreadPool"/> that selects thread 
states at random.
-    /// <para/>
-    /// @lucene.internal
-    /// @lucene.experimental
-    /// </summary>
-    internal class RandomDocumentsWriterPerThreadPool : 
DocumentsWriterPerThreadPool
-    {
-        private readonly ThreadState[] states;
-        private readonly Random random;
-        private readonly int maxRetry;
-
-        public RandomDocumentsWriterPerThreadPool(int maxNumPerThreads, Random 
random)
-            : base(maxNumPerThreads)
-        {
-            if (Debugging.AssertsEnabled) Debugging.Assert(MaxThreadStates >= 
1);
-            states = new ThreadState[maxNumPerThreads];
-            this.random = new Random(random.Next());
-            this.maxRetry = 1 + random.Next(10);
-        }
-
-        public override ThreadState GetAndLock(Thread requestingThread, 
DocumentsWriter documentsWriter)
-        {
-            ThreadState threadState = null;
-            if (NumThreadStatesActive == 0)
-            {
-                lock (this)
-                {
-                    if (NumThreadStatesActive == 0)
-                    {
-                        threadState = states[0] = NewThreadState();
-                        return threadState;
-                    }
-                }
-            }
-            if (Debugging.AssertsEnabled) 
Debugging.Assert(NumThreadStatesActive > 0);
-            for (int i = 0; i < maxRetry; i++)
-            {
-                int ord = random.Next(NumThreadStatesActive);
-                lock (this)
-                {
-                    threadState = states[ord];
-                    if (Debugging.AssertsEnabled) Debugging.Assert(threadState 
!= null);
-                }
-
-                if (threadState.TryLock())
-                {
-                    return threadState;
-                }
-                if (random.Next(20) == 0)
-                {
-                    break;
-                }
-            }
-            /*
-             * only try to create a new threadstate if we can not lock the 
randomly
-             * selected state. this is important since some tests rely on a 
single
-             * threadstate in the single threaded case. Eventually it would be 
nice if
-             * we would not have this limitation but for now we just make sure 
we only
-             * allocate one threadstate if indexing is single threaded
-             */
-
-            lock (this)
-            {
-                ThreadState newThreadState = NewThreadState();
-                if (newThreadState != null) // did we get a new state?
-                {
-                    threadState = states[NumThreadStatesActive - 1] = 
newThreadState;
-                    //if (Debugging.AssertsEnabled) 
Debugging.Assert(threadState.HeldByCurrentThread);
-                    return threadState;
-                }
-                // if no new state is available lock the random one
-            }
-            if (Debugging.AssertsEnabled) Debugging.Assert(threadState != 
null);
-            threadState.@Lock();
-            return threadState;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj 
b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
index ffe9890..4edd47b 100644
--- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
+++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj
@@ -23,6 +23,8 @@
 
   <Import Project="$(SolutionDir)build/NuGet.props" />
 
+<Project ToolsVersion="12.0" DefaultTargets="Build" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <Import 
Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props"
 
Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')"
 />
   <PropertyGroup>
     <TargetFrameworks>netstandard2.1;netstandard2.0;</TargetFrameworks>
     <TargetFrameworks 
Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks>
@@ -45,6 +47,431 @@
     <None Remove="Util\europarl.lines.txt.gz" />
     <EmbeddedResource Include="Util\europarl.lines.txt.gz" />
     <None Include="*.txt" />
+    <Compile Include="Analysis\BaseTokenStreamTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\CannedBinaryTokenStream.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\CannedTokenStream.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\CollationTestBase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\LookaheadTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockAnalyzer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockBytesAnalyzer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockBytesAttributeFactory.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockCharFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockFixedLengthPayloadFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockGraphTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockHoleInjectingTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockPayloadAnalyzer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockRandomLookaheadTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockReaderWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockTokenizer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockUTF16TermAttributeImpl.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\MockVariableLengthPayloadFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\TokenStreamToDot.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\ValidatingTokenFilter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Analysis\VocabularyAssert.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Attributes\HasTimeoutAttribute.cs" />
+    <Compile Include="Attributes\LongRunningTestAttribute.cs" />
+    <Compile Include="Attributes\LuceneNetSpecificAttribute.cs" />
+    <Compile Include="Codecs\Asserting\AssertingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Asserting\AssertingDocValuesFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Asserting\AssertingNormsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Asserting\AssertingPostingsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Asserting\AssertingStoredFieldsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Asserting\AssertingTermVectorsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Bloom\TestBloomFilteredLucene41Postings.cs" />
+    <Compile Include="Codecs\CheapBastard\CheapBastardCodec.cs" />
+    <Compile Include="Codecs\Compressing\CompressingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Compressing\Dummy\DummyCompressingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Compressing\FastCompressingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Compressing\FastDecompressionCompressingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Compressing\HighCompressionCompressingCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosReader.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWFieldsWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWNormsConsumer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWNormsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWPostingsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWSegmentInfoFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWSegmentInfoWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWSkipListWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWStoredFieldsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWStoredFieldsWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWTermVectorsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\PreFlexRWTermVectorsWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene3x\TermInfosWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40DocValuesWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40FieldInfosWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40PostingsWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40RWCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40RWDocValuesFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40RWNormsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40RWPostingsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene40\Lucene40SkipListWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene41Ords\Lucene41WithOrds.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41RWCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene42\Lucene42DocValuesConsumer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene42\Lucene42FieldInfosWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene42\Lucene42RWCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene42\Lucene42RWDocValuesFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\Lucene45\Lucene45RWCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\MissingOrdRemapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\MockIntBlock\MockFixedIntBlockPostingsFormat.cs" 
/>
+    <Compile 
Include="Codecs\MockIntBlock\MockVariableIntBlockPostingsFormat.cs" />
+    <Compile Include="Codecs\MockRandom\MockRandomPostingsFormat.cs" />
+    <Compile Include="Codecs\MockSep\MockSepPostingsFormat.cs" />
+    <Compile Include="Codecs\MockSep\MockSingleIntFactory.cs" />
+    <Compile Include="Codecs\MockSep\MockSingleIntIndexInput.cs" />
+    <Compile Include="Codecs\MockSep\MockSingleIntIndexOutput.cs" />
+    <Compile Include="Codecs\NestedPulsing\NestedPulsingPostingsFormat.cs" />
+    <Compile Include="Codecs\RAMOnly\RAMOnlyPostingsFormat.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Codecs\TestCodecFactory.cs" />
+    <Compile Include="Codecs\TestDocValuesFormatFactory.cs" />
+    <Compile Include="Codecs\TestPostingsFormatFactory.cs" />
+    <Compile Include="Index\AlcoholicMergePolicy.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\AllDeletedFilterReader.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\AssertingAtomicReader.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\AssertingDirectoryReader.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseCompressingDocValuesFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseDocValuesFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseIndexFileFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseMergePolicyTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BasePostingsFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseStoredFieldsFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\BaseTermVectorsFormatTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\DocHelper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\FieldFilterAtomicReader.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\MockIndexInput.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\MockRandomMergePolicy.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\RandomCodec.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\RandomIndexWriter.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Index\ThreadedIndexingAndSearchingTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="JavaCompatibility\AbstractBeforeAfterRule.cs" />
+    <Compile Include="Randomized\Attributes\SeedAttribute.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\Attributes\SeedDecoratorAttribute.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\Attributes\ThreadLeakScopeAttribute.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\Generators\RandomInts.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\InternalAssumptionViolatedException.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\ISeedDecorator.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\MurmurHash3.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\RandomizedContext.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\RandomizedRunner.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\Randomness.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\SeedUtils.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\SingleThreadedRandom.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Randomized\ThreadGroup.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingBulkOutOfOrderScorer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingBulkScorer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingCollector.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingIndexSearcher.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingQuery.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingScorer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\AssertingWeight.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\CheckHits.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\QueryUtils.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\RandomOrderCollector.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\RandomSimilarityProvider.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\SearchEquivalenceTestBase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Search\ShardSearchingTestBase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\BaseDirectoryWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\MockDirectoryWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\MockIndexInputWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\MockIndexOutputWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\MockLockFactoryWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\SlowClosingMockIndexInputWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\SlowOpeningMockIndexInputWrapper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Store\TestHelper.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Support\CultureInfoSupport.cs" />
+    <Compile Include="Support\RandomizedTest.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Support\ExceptionSerializationTestBase.cs" />
+    <Compile Include="Support\SystemProperties.cs" />
+    <Compile Include="Support\ApiScanTestBase.cs" />
+    <Compile Include="Util\Automaton\AutomatonTestUtil.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\BaseDocIdSetTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\English.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\FailOnNonBulkMergesInfoStream.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\Fst\FSTTester.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\LineFileDocs.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\LuceneTestCase.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\NullInfoStream.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\Paths.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\StackTraceHelper.cs" />
+    <Compile Include="Util\TestRuleSetupAndRestoreClassEnv.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\TestUtil.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\ThrottledIndexOutput.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Util\TimeUnits.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="JavaCompatibility\RandomHelpers.cs" />
+    <Compile Include="JavaCompatibility\LuceneTestCase.cs" />
+    <Compile Include="JavaCompatibility\LuceneTypesHelpers.cs" />
+    <Compile Include="JavaCompatibility\SystemTypesHelpers.cs" />
+    <Compile Include="Util\VirtualMethod.cs" />
+    <Compile Include="..\CommonAssemblyInfo.cs">
+      <Link>Properties\CommonAssemblyInfo.cs</Link>
+    </Compile>
   </ItemGroup>
 
   <ItemGroup>
@@ -130,3 +557,13 @@
   </ItemGroup>
 
 </Project>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
+  <!-- To modify your build process, add your task inside one of the targets 
below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs 
b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
index 6460cbd..b6cc7dc 100644
--- a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
+++ b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs
@@ -1606,32 +1606,7 @@ namespace Lucene.Net.Util
             {
                 int maxNumThreadStates = Rarely(random) ? 
TestUtil.NextInt32(random, 5, 20) : TestUtil.NextInt32(random, 1, 4); // 
reasonable value -  crazy value
 
-                if (Rarely(random))
-                {
-                    //// Retrieve the package-private setIndexerThreadPool
-                    //// method:
-                    ////MethodInfo setIndexerThreadPoolMethod = 
typeof(IndexWriterConfig).GetMethod("SetIndexerThreadPool", new Type[] { 
typeof(DocumentsWriterPerThreadPool) });
-                    //MethodInfo setIndexerThreadPoolMethod = 
typeof(IndexWriterConfig).GetMethod(
-                    //    "SetIndexerThreadPool", 
-                    //    BindingFlags.NonPublic | BindingFlags.Instance, 
-                    //    null, 
-                    //    new Type[] { typeof(DocumentsWriterPerThreadPool) }, 
-                    //    null);
-                    ////setIndexerThreadPoolMethod.setAccessible(true);
-                    //Type clazz = typeof(RandomDocumentsWriterPerThreadPool);
-                    //ConstructorInfo ctor = clazz.GetConstructor(new[] { 
typeof(int), typeof(Random) });
-                    ////ctor.Accessible = true;
-                    //// random thread pool
-                    //setIndexerThreadPoolMethod.Invoke(c, new[] { 
ctor.Invoke(new object[] { maxNumThreadStates, r }) });
-
-                    // LUCENENET specific: Since we are using 
InternalsVisibleTo, there is no need for Reflection
-                    c.SetIndexerThreadPool(new 
RandomDocumentsWriterPerThreadPool(maxNumThreadStates, random));
-                }
-                else
-                {
-                    // random thread pool
-                    c.SetMaxThreadStates(maxNumThreadStates);
-                }
+                               c.SetMaxThreadStates(maxNumThreadStates);
             }
 #if !FEATURE_INSTANCE_TESTDATA_INITIALIZATION
             c.SetMergePolicy(NewMergePolicy(random));
diff --git a/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs 
b/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs
index 58bd570..4f47926 100644
--- a/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs
+++ b/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs
@@ -91,7 +91,7 @@ namespace Lucene.Net.Index
 
             IndexWriterConfig iwc = NewIndexWriterConfig(TEST_VERSION_CURRENT, 
analyzer).SetFlushPolicy(flushPolicy);
             int numDWPT = 1 + AtLeast(2);
-            DocumentsWriterPerThreadPool threadPool = new 
ThreadAffinityDocumentsWriterThreadPool(numDWPT);
+            DocumentsWriterPerThreadPool threadPool = new 
DocumentsWriterPerThreadPool(numDWPT);
             iwc.SetIndexerThreadPool(threadPool);
             iwc.SetRAMBufferSizeMB(maxRamMB);
             iwc.SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH);
@@ -153,7 +153,7 @@ namespace Lucene.Net.Index
                 IndexWriterConfig iwc = 
NewIndexWriterConfig(TEST_VERSION_CURRENT, new 
MockAnalyzer(Random)).SetFlushPolicy(flushPolicy);
 
                 int numDWPT = 1 + AtLeast(2);
-                DocumentsWriterPerThreadPool threadPool = new 
ThreadAffinityDocumentsWriterThreadPool(numDWPT);
+                DocumentsWriterPerThreadPool threadPool = new 
DocumentsWriterPerThreadPool(numDWPT);
                 iwc.SetIndexerThreadPool(threadPool);
                 iwc.SetMaxBufferedDocs(2 + AtLeast(10));
                 iwc.SetRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH);
@@ -206,7 +206,7 @@ namespace Lucene.Net.Index
             iwc.SetFlushPolicy(flushPolicy);
 
             int numDWPT = 1 + Random.Next(8);
-            DocumentsWriterPerThreadPool threadPool = new 
ThreadAffinityDocumentsWriterThreadPool(numDWPT);
+            DocumentsWriterPerThreadPool threadPool = new 
DocumentsWriterPerThreadPool(numDWPT);
             iwc.SetIndexerThreadPool(threadPool);
 
             IndexWriter writer = new IndexWriter(dir, iwc);
@@ -277,7 +277,7 @@ namespace Lucene.Net.Index
                 FlushPolicy flushPolicy = new FlushByRamOrCountsPolicy();
                 iwc.SetFlushPolicy(flushPolicy);
 
-                DocumentsWriterPerThreadPool threadPool = new 
ThreadAffinityDocumentsWriterThreadPool(numThreads[i] == 1 ? 1 : 2);
+                DocumentsWriterPerThreadPool threadPool = new 
DocumentsWriterPerThreadPool(numThreads[i] == 1 ? 1 : 2);
                 iwc.SetIndexerThreadPool(threadPool);
                 // with such a small ram buffer we should be stalled quiet 
quickly
                 iwc.SetRAMBufferSizeMB(0.25);
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs
index 11b761c..41e7f50 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs
@@ -81,7 +81,7 @@ namespace Lucene.Net.Index
             Assert.IsNull(conf.MergedSegmentWarmer);
             
Assert.AreEqual(IndexWriterConfig.DEFAULT_READER_TERMS_INDEX_DIVISOR, 
conf.ReaderTermsIndexDivisor);
             Assert.AreEqual(typeof(TieredMergePolicy), 
conf.MergePolicy.GetType());
-            Assert.AreEqual(typeof(ThreadAffinityDocumentsWriterThreadPool), 
conf.IndexerThreadPool.GetType());
+            Assert.AreEqual(typeof(DocumentsWriterPerThreadPool), 
conf.IndexerThreadPool.GetType());
             Assert.AreEqual(typeof(FlushByRamOrCountsPolicy), 
conf.FlushPolicy.GetType());
             
Assert.AreEqual(IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB, 
conf.RAMPerThreadHardLimitMB);
             Assert.AreEqual(Codec.Default, conf.Codec);
diff --git a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs 
b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
index 3209749..1e1cbda 100644
--- a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
+++ b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs
@@ -224,7 +224,7 @@ namespace Lucene.Net.Index
         public virtual IDictionary<string, Document> IndexRandom(int nThreads, 
int iterations, int range, Directory dir, int maxThreadStates, bool 
doReaderPooling)
         {
             IDictionary<string, Document> docs = new Dictionary<string, 
Document>();
-            IndexWriter w = RandomIndexWriter.MockIndexWriter(dir, 
NewIndexWriterConfig(TEST_VERSION_CURRENT, new 
MockAnalyzer(Random)).SetOpenMode(OpenMode.CREATE).SetRAMBufferSizeMB(0.1).SetMaxBufferedDocs(maxBufferedDocs).SetIndexerThreadPool(new
 
ThreadAffinityDocumentsWriterThreadPool(maxThreadStates)).SetReaderPooling(doReaderPooling).SetMergePolicy(NewLogMergePolicy()),
 new YieldTestPoint(this));
+            IndexWriter w = RandomIndexWriter.MockIndexWriter(dir, 
NewIndexWriterConfig(TEST_VERSION_CURRENT, new 
MockAnalyzer(Random)).SetOpenMode(OpenMode.CREATE).SetRAMBufferSizeMB(0.1).SetMaxBufferedDocs(MaxBufferedDocs).SetIndexerThreadPool(new
 
DocumentsWriterPerThreadPool(maxThreadStates)).SetReaderPooling(doReaderPooling).SetMergePolicy(NewLogMergePolicy()),
 new YieldTestPoint(this));
             LogMergePolicy lmp = (LogMergePolicy)w.Config.MergePolicy;
             lmp.NoCFSRatio = 0.0;
             lmp.MergeFactor = mergeFactor;
diff --git a/src/Lucene.Net/Index/DocumentsWriter.cs 
b/src/Lucene.Net/Index/DocumentsWriter.cs
index abe7274..77a9750 100644
--- a/src/Lucene.Net/Index/DocumentsWriter.cs
+++ b/src/Lucene.Net/Index/DocumentsWriter.cs
@@ -526,8 +526,8 @@ namespace Lucene.Net.Index
             }
             finally
             {
-                perThread.Unlock();
-            }
+                                       perThreadPool.Release(perThread);
+                               }
 
             return PostUpdate(flushingDWPT, hasEvents);
         }
@@ -572,10 +572,10 @@ namespace Lucene.Net.Index
             }
             finally
             {
-                perThread.Unlock();
-            }
+                               perThreadPool.Release(perThread);
+                       }
 
-            return PostUpdate(flushingDWPT, hasEvents);
+                       return PostUpdate(flushingDWPT, hasEvents);
         }
 
         private bool DoFlush(DocumentsWriterPerThread flushingDWPT)
diff --git a/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs 
b/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs
index 346d834..c955aec 100644
--- a/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs
+++ b/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs
@@ -613,8 +613,8 @@ namespace Lucene.Net.Index
             {
                 if (!success) // make sure we unlock if this fails
                 {
-                    perThread.Unlock();
-                }
+                                               
perThreadPool.Release(perThread);
+                                       }
             }
         }
 
diff --git a/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs 
b/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs
index 1e356d8..5f89734 100644
--- a/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs
+++ b/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs
@@ -37,7 +37,8 @@ namespace Lucene.Net.Index
     /// is reusing the flushing <see cref="DocumentsWriterPerThread"/>s <see 
cref="ThreadState"/> with a
     /// new <see cref="DocumentsWriterPerThread"/> instance.
     /// </summary>
-    internal abstract class DocumentsWriterPerThreadPool
+
+    internal sealed class DocumentsWriterPerThreadPool
 #if FEATURE_CLONEABLE
         : System.ICloneable
 #endif
@@ -155,10 +156,13 @@ namespace Lucene.Net.Index
         private ThreadState[] threadStates;
         private volatile int numThreadStatesActive;
 
-        /// <summary>
-        /// Creates a new <see cref="DocumentsWriterPerThreadPool"/> with a 
given maximum of <see cref="ThreadState"/>s.
-        /// </summary>
-        internal DocumentsWriterPerThreadPool(int maxNumThreadStates)
+               private ThreadState[] freeList;
+               private volatile int freeCount;
+
+               /// <summary>
+               /// Creates a new <see cref="DocumentsWriterPerThreadPool"/> 
with a given maximum of <see cref="ThreadState"/>s.
+               /// </summary>
+               internal DocumentsWriterPerThreadPool(int maxNumThreadStates)
         {
             if (maxNumThreadStates < 1)
             {
@@ -170,26 +174,17 @@ namespace Lucene.Net.Index
             {
                 threadStates[i] = new ThreadState(null);
             }
-        }
+                       freeList = new ThreadState[maxNumThreadStates];
+               }
 
-        public virtual object Clone()
+        public DocumentsWriterPerThreadPool Clone()
         {
             // We should only be cloned before being used:
             if (numThreadStatesActive != 0)
             {
                 throw new InvalidOperationException("clone this object before 
it is used!");
             }
-
-            DocumentsWriterPerThreadPool clone;
-
-            clone = (DocumentsWriterPerThreadPool)base.MemberwiseClone();
-
-            clone.threadStates = new ThreadState[threadStates.Length];
-            for (int i = 0; i < threadStates.Length; i++)
-            {
-                clone.threadStates[i] = new ThreadState(null);
-            }
-            return clone;
+                       return new 
DocumentsWriterPerThreadPool(threadStates.Length);
         }
 
         /// <summary>
@@ -211,43 +206,39 @@ namespace Lucene.Net.Index
         /// </summary>
         /// <returns> a new <see cref="ThreadState"/> iff any new state is 
available otherwise
         ///         <c>null</c> </returns>
-        public virtual ThreadState NewThreadState()
+        public ThreadState NewThreadState()
         {
-            lock (this)
-            {
-                if (numThreadStatesActive < threadStates.Length)
-                {
-                    ThreadState threadState = 
threadStates[numThreadStatesActive];
-                    threadState.@Lock(); // lock so nobody else will get this 
ThreadState
-                    bool unlock = true;
-                    try
-                    {
-                        if (threadState.IsActive)
-                        {
-                            // unreleased thread states are deactivated during 
DW#close()
-                            numThreadStatesActive++; // increment will publish 
the ThreadState
+                               if (Debugging.AssertsEnabled) 
Debugging.Assert(numThreadStatesActive < threadStates.Length);
+
+                               ThreadState threadState = 
threadStates[numThreadStatesActive];
+                               threadState.Lock(); // lock so nobody else will 
get this ThreadState
+                               bool unlock = true;
+                               try
+                               {
+                                       if (threadState.IsActive)
+                                       {
+                                               // unreleased thread states are 
deactivated during DW#close()
+                                               numThreadStatesActive++; // 
increment will publish the ThreadState
+                                                                               
                                        //System.out.println("activeCount=" + 
numThreadStatesActive);
                             if (Debugging.AssertsEnabled) 
Debugging.Assert(threadState.dwpt == null);
-                            unlock = false;
-                            return threadState;
-                        }
-                        // unlock since the threadstate is not active anymore 
- we are closed!
+                                               unlock = false;
+                                               return threadState;
+                                       }
+                                       // we are closed: unlock since the 
threadstate is not active anymore
                         if (Debugging.AssertsEnabled) 
Debugging.Assert(AssertUnreleasedThreadStatesInactive());
-                        return null;
-                    }
-                    finally
-                    {
-                        if (unlock)
-                        {
-                            // in any case make sure we unlock if we fail
-                            threadState.Unlock();
-                        }
-                    }
-                }
-                return null;
-            }
-        }
-
-        private bool AssertUnreleasedThreadStatesInactive()
+                                       return null;
+                               }
+                               finally
+                               {
+                                       if (unlock)
+                                       {
+                                               // in any case make sure we 
unlock if we fail 
+                                               threadState.Unlock();
+                                       }
+                               }
+               }
+
+               private bool AssertUnreleasedThreadStatesInactive()
         {
             lock (this)
             {
@@ -270,7 +261,7 @@ namespace Lucene.Net.Index
         /// <summary>
         /// Deactivate all unreleased threadstates
         /// </summary>
-        internal virtual void DeactivateUnreleasedStates()
+        internal void DeactivateUnreleasedStates()
         {
             lock (this)
             {
@@ -290,7 +281,7 @@ namespace Lucene.Net.Index
             }
         }
 
-        internal virtual DocumentsWriterPerThread Reset(ThreadState 
threadState, bool closed)
+        internal DocumentsWriterPerThread Reset(ThreadState threadState, bool 
closed)
         {
             if (Debugging.AssertsEnabled) 
Debugging.Assert(threadState.IsHeldByCurrentThread);
             DocumentsWriterPerThread dwpt = threadState.dwpt;
@@ -305,24 +296,94 @@ namespace Lucene.Net.Index
             return dwpt;
         }
 
-        internal virtual void Recycle(DocumentsWriterPerThread dwpt)
+        internal void Recycle(DocumentsWriterPerThread dwpt)
         {
             // don't recycle DWPT by default
         }
 
-        // you cannot subclass this without being in o.a.l.index package 
anyway, so
-        // the class is already pkg-private... fix me: see LUCENE-4013
-        public abstract ThreadState GetAndLock(Thread requestingThread, 
DocumentsWriter documentsWriter); // LUCENENET NOTE: Made public rather than 
internal
-
-        /// <summary>
-        /// Returns the <i>i</i>th active <seealso cref="ThreadState"/> where 
<i>i</i> is the
-        /// given ord.
-        /// </summary>
-        /// <param name="ord">
-        ///          the ordinal of the <seealso cref="ThreadState"/> </param>
-        /// <returns> the <i>i</i>th active <seealso cref="ThreadState"/> 
where <i>i</i> is the
-        ///         given ord. </returns>
-        internal virtual ThreadState GetThreadState(int ord)
+               // you cannot subclass this without being in o.a.l.index 
package anyway, so
+               // the class is already pkg-private... fix me: see LUCENE-4013
+               public ThreadState GetAndLock(Thread requestingThread, 
DocumentsWriter documentsWriter)
+               {
+                       ThreadState threadState = null;
+                       lock (this)
+                       {
+                               for (;;)
+                               {
+                                       if (freeCount > 0)
+                                       {
+                                               // Important that we are LIFO 
here! This way if number of concurrent indexing threads was once high, but has 
now reduced, we only use a
+                                               // limited number of thread 
states:
+                                               threadState = 
freeList[freeCount - 1];
+                                               if (threadState.dwpt == null)
+                                               {
+                                                       // This thread-state is 
not initialized, e.g. it
+                                                       // was just flushed. 
See if we can instead find
+                                                       // another free thread 
state that already has docs
+                                                       // indexed. This way if 
incoming thread concurrency
+                                                       // has decreased, we 
don't leave docs
+                                                       // indefinitely 
buffered, tying up RAM.  This
+                                                       // will instead get 
those thread states flushed,
+                                                       // freeing up RAM for 
larger segment flushes:
+                                                       for (int i = 0; i < 
freeCount; i++)
+                                                       {
+                                                               if 
(freeList[i].dwpt != null)
+                                                               {
+                                                                       // Use 
this one instead, and swap it with
+                                                                       // the 
un-initialized one:
+                                                                       
ThreadState ts = freeList[i];
+                                                                       
freeList[i] = threadState;
+                                                                       
threadState = ts;
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+
+                                               freeCount--;
+                                               break;
+                                       }
+                                       else if (NumThreadStatesActive < 
threadStates.Length)
+                                       {
+                                               // ThreadState is already 
locked before return by this method:
+                                               return NewThreadState();
+                                       }
+                                       else
+                                       {
+                                               // Wait until a thread state 
frees up:
+                                               Monitor.Wait(this);
+                                       }
+                               }
+                       }
+
+                       // This could take time, e.g. if the threadState is 
[briefly] checked for flushing:
+                       threadState.Lock();
+
+                       return threadState;
+
+               }
+
+               public void Release(ThreadState state)
+               {
+                       state.Unlock();
+                       lock (this)
+                       {
+                               Debug.Assert(freeCount < freeList.Length);
+                               freeList[freeCount++] = state;
+                               // In case any thread is waiting, wake one of 
them up since we just released a thread state; notify() should be sufficient 
but we do
+                               // notifyAll defensively:
+                               Monitor.PulseAll(this);
+                       }
+               }
+
+               /// <summary>
+               /// Returns the <i>i</i>th active <seealso cref="ThreadState"/> 
where <i>i</i> is the
+               /// given ord.
+               /// </summary>
+               /// <param name="ord">
+               ///          the ordinal of the <seealso cref="ThreadState"/> 
</param>
+               /// <returns> the <i>i</i>th active <seealso 
cref="ThreadState"/> where <i>i</i> is the
+               ///         given ord. </returns>
+               internal ThreadState GetThreadState(int ord)
         {
             return threadStates[ord];
         }
@@ -332,7 +393,7 @@ namespace Lucene.Net.Index
         /// waiting to acquire its lock or <c>null</c> if no <see 
cref="ThreadState"/>
         /// is yet visible to the calling thread.
         /// </summary>
-        internal virtual ThreadState MinContendedThreadState()
+        internal ThreadState MinContendedThreadState()
         {
             ThreadState minThreadState = null;
             int limit = numThreadStatesActive;
@@ -352,7 +413,7 @@ namespace Lucene.Net.Index
         /// A deactivated <see cref="ThreadState"/> should not be used for 
indexing anymore.
         /// </summary>
         /// <returns> the number of currently deactivated <see 
cref="ThreadState"/> instances. </returns>
-        internal virtual int NumDeactivatedThreadStates()
+        internal int NumDeactivatedThreadStates()
         {
             int count = 0;
             for (int i = 0; i < threadStates.Length; i++)
@@ -380,7 +441,7 @@ namespace Lucene.Net.Index
         /// if the parent <see cref="DocumentsWriter"/> is closed or aborted.
         /// </summary>
         /// <param name="threadState"> the state to deactivate </param>
-        internal virtual void DeactivateThreadState(ThreadState threadState)
+        internal void DeactivateThreadState(ThreadState threadState)
         {
             if (Debugging.AssertsEnabled) 
Debugging.Assert(threadState.IsActive);
             threadState.Deactivate();
diff --git a/src/Lucene.Net/Index/IndexWriterConfig.cs 
b/src/Lucene.Net/Index/IndexWriterConfig.cs
index 79ffc7c..debc343 100644
--- a/src/Lucene.Net/Index/IndexWriterConfig.cs
+++ b/src/Lucene.Net/Index/IndexWriterConfig.cs
@@ -383,24 +383,24 @@ namespace Lucene.Net.Index
             }
         }
 
-        /// <summary>
-        /// Expert: Gets or sets the <see 
cref="DocumentsWriterPerThreadPool"/> instance used by the
-        /// <see cref="IndexWriter"/> to assign thread-states to incoming 
indexing threads. If no
-        /// <see cref="DocumentsWriterPerThreadPool"/> is set <see 
cref="IndexWriter"/> will use
-        /// <see cref="ThreadAffinityDocumentsWriterThreadPool"/> with max 
number of
-        /// thread-states set to <see cref="DEFAULT_MAX_THREAD_STATES"/> (see
-        /// <see cref="DEFAULT_MAX_THREAD_STATES"/>).
-        /// <para>
-        /// NOTE: The given <see cref="DocumentsWriterPerThreadPool"/> 
instance must not be used with
-        /// other <see cref="IndexWriter"/> instances once it has been 
initialized / associated with an
-        /// <see cref="IndexWriter"/>.
-        /// </para>
-        /// <para>
-        /// NOTE: this only takes effect when <see cref="IndexWriter"/> is 
first created.</para>
-        /// </summary>
-        // LUCENENET NOTE: We cannot override a getter and add a setter, 
-        // so must declare it new. See: http://stackoverflow.com/q/82437
-        new internal DocumentsWriterPerThreadPool IndexerThreadPool
+               /// <summary>
+               /// Expert: Gets or sets the <see 
cref="DocumentsWriterPerThreadPool"/> instance used by the
+               /// <see cref="IndexWriter"/> to assign thread-states to 
incoming indexing threads. If no
+               /// <see cref="DocumentsWriterPerThreadPool"/> is set <see 
cref="IndexWriter"/> will use
+               /// <see cref="DocumentsWriterPerThreadPool"/> with max number 
of
+               /// thread-states set to <see 
cref="DEFAULT_MAX_THREAD_STATES"/> (see
+               /// <see cref="DEFAULT_MAX_THREAD_STATES"/>).
+               /// <para>
+               /// NOTE: The given <see cref="DocumentsWriterPerThreadPool"/> 
instance must not be used with
+               /// other <see cref="IndexWriter"/> instances once it has been 
initialized / associated with an
+               /// <see cref="IndexWriter"/>.
+               /// </para>
+               /// <para>
+               /// NOTE: this only takes effect when <see cref="IndexWriter"/> 
is first created.</para>
+               /// </summary>
+               // LUCENENET NOTE: We cannot override a getter and add a 
setter, 
+               // so must declare it new. See: http://stackoverflow.com/q/82437
+               new internal DocumentsWriterPerThreadPool IndexerThreadPool
         {
             get => indexerThreadPool;
             set
@@ -429,14 +429,17 @@ namespace Lucene.Net.Index
             {
                 try
                 {
-                    return 
((ThreadAffinityDocumentsWriterThreadPool)indexerThreadPool).MaxThreadStates;
+                    return indexerThreadPool.MaxThreadStates;
                 }
                 catch (InvalidCastException cce)
                 {
                     throw new InvalidOperationException(cce.Message, cce);
                 }
             }
-            set => this.indexerThreadPool = new 
ThreadAffinityDocumentsWriterThreadPool(value);
+            set
+            {
+                this.indexerThreadPool = new 
DocumentsWriterPerThreadPool(value);
+            }
         }
 
         /// <summary>
diff --git a/src/Lucene.Net/Index/LiveIndexWriterConfig.cs 
b/src/Lucene.Net/Index/LiveIndexWriterConfig.cs
index f031115..b564d45 100644
--- a/src/Lucene.Net/Index/LiveIndexWriterConfig.cs
+++ b/src/Lucene.Net/Index/LiveIndexWriterConfig.cs
@@ -169,7 +169,7 @@ namespace Lucene.Net.Index
             mergePolicy = new TieredMergePolicy();
             flushPolicy = new FlushByRamOrCountsPolicy();
             readerPooling = IndexWriterConfig.DEFAULT_READER_POOLING;
-            indexerThreadPool = new 
ThreadAffinityDocumentsWriterThreadPool(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES);
+            indexerThreadPool = new 
DocumentsWriterPerThreadPool(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES);
             perThreadHardLimitMB = 
IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB;
         }
 
@@ -504,7 +504,7 @@ namespace Lucene.Net.Index
             {
                 try
                 {
-                    return 
((ThreadAffinityDocumentsWriterThreadPool)indexerThreadPool).MaxThreadStates;
+                    return indexerThreadPool.MaxThreadStates;
                 }
                 catch (InvalidCastException cce)
                 {
diff --git a/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs 
b/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs
deleted file mode 100644
index 58d4fb7..0000000
--- a/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs
+++ /dev/null
@@ -1,95 +0,0 @@
-using Lucene.Net.Diagnostics;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Threading;
-
-namespace Lucene.Net.Index
-{
-    /*
-     * 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 ThreadState = 
Lucene.Net.Index.DocumentsWriterPerThreadPool.ThreadState; //javadoc
-
-    /// <summary>
-    /// A <see cref="DocumentsWriterPerThreadPool"/> implementation that tries 
to assign an
-    /// indexing thread to the same <see cref="ThreadState"/> each time the 
thread tries to
-    /// obtain a <see cref="ThreadState"/>. Once a new <see 
cref="ThreadState"/> is created it is
-    /// associated with the creating thread. Subsequently, if the threads 
associated
-    /// <see cref="ThreadState"/> is not in use it will be associated with the 
requesting
-    /// thread. Otherwise, if the <see cref="ThreadState"/> is used by another 
thread
-    /// <see cref="ThreadAffinityDocumentsWriterThreadPool"/> tries to find 
the currently
-    /// minimal contended <seea cref="ThreadState"/>.
-    /// </summary>
-    internal class ThreadAffinityDocumentsWriterThreadPool : 
DocumentsWriterPerThreadPool
-    {
-        private IDictionary<Thread, ThreadState> threadBindings = new 
ConcurrentDictionary<Thread, ThreadState>();
-
-        /// <summary>
-        /// Creates a new <see 
cref="ThreadAffinityDocumentsWriterThreadPool"/> with a given maximum of <see 
cref="ThreadState"/>s.
-        /// </summary>
-        public ThreadAffinityDocumentsWriterThreadPool(int maxNumPerThreads)
-            : base(maxNumPerThreads)
-        {
-            if (Debugging.AssertsEnabled) Debugging.Assert(MaxThreadStates >= 
1);
-        }
-
-        public override ThreadState GetAndLock(Thread requestingThread, 
DocumentsWriter documentsWriter)
-        {
-            if (threadBindings.TryGetValue(requestingThread, out ThreadState 
threadState) && threadState.TryLock())
-            {
-                return threadState;
-            }
-            ThreadState minThreadState = null;
-
-            /* TODO -- another thread could lock the minThreadState we just 
got while
-             we should somehow prevent this. */
-            // Find the state that has minimum number of threads waiting
-            minThreadState = MinContendedThreadState();
-            if (minThreadState == null || minThreadState.HasQueuedThreads)
-            {
-                ThreadState newState = NewThreadState(); // state is already 
locked if non-null
-                if (newState != null)
-                {
-                    if (Debugging.AssertsEnabled) 
Debugging.Assert(newState.IsHeldByCurrentThread);
-                    threadBindings[requestingThread] = newState;
-                    return newState;
-                }
-                else if (minThreadState == null)
-                {
-                    /*
-                     * no new threadState available we just take the 
minContented one
-                     * this must return a valid thread state since we accessed 
the
-                     * synced context in newThreadState() above.
-                     */
-                    minThreadState = MinContendedThreadState();
-                }
-            }
-            if (Debugging.AssertsEnabled) Debugging.Assert(minThreadState != 
null, () => "ThreadState is null");
-
-            minThreadState.@Lock();
-            return minThreadState;
-        }
-
-        public override object Clone()
-        {
-            ThreadAffinityDocumentsWriterThreadPool clone = 
(ThreadAffinityDocumentsWriterThreadPool)base.Clone();
-            clone.threadBindings = new ConcurrentDictionary<Thread, 
ThreadState>();
-            return clone;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj
index e218980..6d27802 100644
--- a/src/Lucene.Net/Lucene.Net.csproj
+++ b/src/Lucene.Net/Lucene.Net.csproj
@@ -117,6 +117,851 @@
     <InternalsVisibleTo Include="Lucene.Net.Tests.Spatial" />
     <InternalsVisibleTo Include="Lucene.Net.Tests.Suggest" />
   <InternalsVisibleTo Include="Lucene.Net.Tests.TestFramework" />
+    <Compile Include="Analysis\Analyzer.cs" />
+    <Compile Include="Analysis\AnalyzerWrapper.cs" />
+    <Compile Include="Analysis\CachingTokenFilter.cs" />
+    <Compile Include="Analysis\CharFilter.cs" />
+    <Compile Include="Analysis\NumericTokenStream.cs" />
+    <Compile Include="Analysis\ReusableStringReader.cs" />
+    <Compile Include="Analysis\Token.cs" />
+    <Compile Include="Analysis\TokenAttributes\ICharTermAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\CharTermAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\FlagsAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\IFlagsAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\IKeywordAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\KeywordAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\IOffsetAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\OffsetAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\IPayloadAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\PayloadAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\IPositionIncrementAttribute.cs" 
/>
+    <Compile Include="Analysis\TokenAttributes\PositionIncrementAttribute.cs" 
/>
+    <Compile Include="Analysis\TokenAttributes\IPositionLengthAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\PositionLengthAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\ITermToBytesRefAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\ITypeAttribute.cs" />
+    <Compile Include="Analysis\TokenAttributes\TypeAttribute.cs" />
+    <Compile Include="Analysis\TokenFilter.cs" />
+    <Compile Include="Analysis\Tokenizer.cs" />
+    <Compile Include="Analysis\TokenStream.cs" />
+    <Compile Include="Analysis\TokenStreamToAutomaton.cs" />
+    <Compile Include="Codecs\BlockTermState.cs" />
+    <Compile Include="Codecs\BlockTreeTermsReader.cs" />
+    <Compile Include="Codecs\BlockTreeTermsWriter.cs" />
+    <Compile Include="Codecs\Codec.cs" />
+    <Compile Include="Codecs\CodecUtil.cs" />
+    <Compile Include="Codecs\Compressing\CompressingStoredFieldsFormat.cs" />
+    <Compile 
Include="Codecs\Compressing\CompressingStoredFieldsIndexReader.cs" />
+    <Compile 
Include="Codecs\Compressing\CompressingStoredFieldsIndexWriter.cs" />
+    <Compile Include="Codecs\Compressing\CompressingStoredFieldsReader.cs" />
+    <Compile Include="Codecs\Compressing\CompressingStoredFieldsWriter.cs" />
+    <Compile Include="Codecs\Compressing\CompressingTermVectorsFormat.cs" />
+    <Compile Include="Codecs\Compressing\CompressingTermVectorsReader.cs" />
+    <Compile Include="Codecs\Compressing\CompressingTermVectorsWriter.cs" />
+    <Compile Include="Codecs\Compressing\CompressionMode.cs" />
+    <Compile Include="Codecs\Compressing\Compressor.cs" />
+    <Compile Include="Codecs\Compressing\Decompressor.cs" />
+    <Compile Include="Codecs\Compressing\LZ4.cs" />
+    <Compile Include="Codecs\DocValuesConsumer.cs" />
+    <Compile Include="Codecs\DocValuesFormat.cs" />
+    <Compile Include="Codecs\DocValuesProducer.cs" />
+    <Compile Include="Codecs\FieldInfosFormat.cs" />
+    <Compile Include="Codecs\FieldInfosReader.cs" />
+    <Compile Include="Codecs\FieldInfosWriter.cs" />
+    <Compile Include="Codecs\FieldsConsumer.cs" />
+    <Compile Include="Codecs\FieldsProducer.cs" />
+    <Compile Include="Codecs\FilterCodec.cs" />
+    <Compile Include="Codecs\LiveDocsFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xCodec.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xFieldInfosFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xFieldInfosReader.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xFields.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xNormsFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xNormsProducer.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xPostingsFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xSegmentInfoFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xSegmentInfoReader.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xSkipListReader.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xStoredFieldsFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xStoredFieldsReader.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xTermVectorsFormat.cs" />
+    <Compile Include="Codecs\Lucene3x\Lucene3xTermVectorsReader.cs" />
+    <Compile Include="Codecs\Lucene3x\SegmentTermDocs.cs" />
+    <Compile Include="Codecs\Lucene3x\SegmentTermEnum.cs" />
+    <Compile Include="Codecs\Lucene3x\SegmentTermPositions.cs" />
+    <Compile Include="Codecs\Lucene3x\TermBuffer.cs" />
+    <Compile Include="Codecs\Lucene3x\TermInfo.cs" />
+    <Compile Include="Codecs\Lucene3x\TermInfosReader.cs" />
+    <Compile Include="Codecs\Lucene3x\TermInfosReaderIndex.cs" />
+    <Compile Include="Codecs\Lucene40\BitVector.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40Codec.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40DocValuesFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40DocValuesReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40FieldInfosFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40FieldInfosReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40LiveDocsFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40NormsFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40PostingsBaseFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40PostingsFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40PostingsReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoWriter.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40SkipListReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsWriter.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40TermVectorsFormat.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40TermVectorsReader.cs" />
+    <Compile Include="Codecs\Lucene40\Lucene40TermVectorsWriter.cs" />
+    <Compile Include="Codecs\Lucene41\ForUtil.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41Codec.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41PostingsBaseFormat.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41PostingsFormat.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41PostingsReader.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41PostingsWriter.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41SkipReader.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41SkipWriter.cs" />
+    <Compile Include="Codecs\Lucene41\Lucene41StoredFieldsFormat.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42Codec.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42DocValuesFormat.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42DocValuesProducer.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42FieldInfosFormat.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42FieldInfosReader.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42NormsConsumer.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42NormsFormat.cs" />
+    <Compile Include="Codecs\Lucene42\Lucene42TermVectorsFormat.cs" />
+    <Compile Include="Codecs\Lucene45\Lucene45Codec.cs" />
+    <Compile Include="Codecs\Lucene45\Lucene45DocValuesConsumer.cs" />
+    <Compile Include="Codecs\Lucene45\Lucene45DocValuesFormat.cs" />
+    <Compile Include="Codecs\Lucene45\Lucene45DocValuesProducer.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46Codec.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46FieldInfosFormat.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46FieldInfosReader.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46FieldInfosWriter.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoFormat.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoReader.cs" />
+    <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoWriter.cs" />
+    <Compile Include="Codecs\MappingMultiDocsAndPositionsEnum.cs" />
+    <Compile Include="Codecs\MappingMultiDocsEnum.cs" />
+    <Compile Include="Codecs\MultiLevelSkipListReader.cs" />
+    <Compile Include="Codecs\MultiLevelSkipListWriter.cs" />
+    <Compile Include="Codecs\NormsFormat.cs" />
+    <Compile Include="Codecs\PerField\PerFieldDocValuesFormat.cs" />
+    <Compile Include="Codecs\PerField\PerFieldPostingsFormat.cs" />
+    <Compile Include="Codecs\PostingsBaseFormat.cs" />
+    <Compile Include="Codecs\PostingsConsumer.cs" />
+    <Compile Include="Codecs\PostingsFormat.cs" />
+    <Compile Include="Codecs\PostingsReaderBase.cs" />
+    <Compile Include="Codecs\PostingsWriterBase.cs" />
+    <Compile Include="Codecs\SegmentInfoFormat.cs" />
+    <Compile Include="Codecs\SegmentInfoReader.cs" />
+    <Compile Include="Codecs\SegmentInfoWriter.cs" />
+    <Compile Include="Codecs\StoredFieldsFormat.cs" />
+    <Compile Include="Codecs\StoredFieldsReader.cs" />
+    <Compile Include="Codecs\StoredFieldsWriter.cs" />
+    <Compile Include="Codecs\TermsConsumer.cs" />
+    <Compile Include="Codecs\TermStats.cs" />
+    <Compile Include="Codecs\TermVectorsFormat.cs" />
+    <Compile Include="Codecs\TermVectorsReader.cs" />
+    <Compile Include="Codecs\TermVectorsWriter.cs" />
+    <Compile Include="Document\BinaryDocValuesField.cs" />
+    <Compile Include="Document\ByteDocValuesField.cs" />
+    <Compile Include="Document\CompressionTools.cs" />
+    <Compile Include="Document\DateTools.cs" />
+    <Compile Include="Document\DerefBytesDocValuesField.cs" />
+    <Compile Include="Document\Document.cs" />
+    <Compile Include="Document\DocumentStoredFieldVisitor.cs" />
+    <Compile Include="Document\DoubleDocValuesField.cs" />
+    <Compile Include="Document\DoubleField.cs" />
+    <Compile Include="Document\Field.cs" />
+    <Compile Include="Document\FieldType.cs" />
+    <Compile Include="Document\FloatDocValuesField.cs" />
+    <Compile Include="Document\FloatField.cs" />
+    <Compile Include="Document\IntDocValuesField.cs" />
+    <Compile Include="Document\IntField.cs" />
+    <Compile Include="Document\LongDocValuesField.cs" />
+    <Compile Include="Document\LongField.cs" />
+    <Compile Include="Document\NumericDocValuesField.cs" />
+    <Compile Include="Document\PackedLongDocValuesField.cs" />
+    <Compile Include="Document\ShortDocValuesField.cs" />
+    <Compile Include="Document\SortedBytesDocValuesField.cs" />
+    <Compile Include="Document\SortedDocValuesField.cs" />
+    <Compile Include="Document\SortedSetDocValuesField.cs" />
+    <Compile Include="Document\StoredField.cs" />
+    <Compile Include="Document\StraightBytesDocValuesField.cs" />
+    <Compile Include="Document\StringField.cs" />
+    <Compile Include="Document\TextField.cs" />
+    <Compile Include="Index\AtomicReader.cs" />
+    <Compile Include="Index\AtomicReaderContext.cs" />
+    <Compile Include="Index\AutomatonTermsEnum.cs" />
+    <Compile Include="Index\BaseCompositeReader.cs" />
+    <Compile Include="Index\BinaryDocValues.cs" />
+    <Compile Include="Index\BinaryDocValuesFieldUpdates.cs" />
+    <Compile Include="Index\BinaryDocValuesWriter.cs" />
+    <Compile Include="Index\BitsSlice.cs" />
+    <Compile Include="Index\BufferedUpdates.cs" />
+    <Compile Include="Index\BufferedUpdatesStream.cs" />
+    <Compile Include="Index\ByteSliceReader.cs" />
+    <Compile Include="Index\ByteSliceWriter.cs" />
+    <Compile Include="Index\CheckIndex.cs" />
+    <Compile Include="Index\CoalescedUpdates.cs" />
+    <Compile Include="Index\CompositeReader.cs" />
+    <Compile Include="Index\CompositeReaderContext.cs" />
+    <Compile Include="Index\ConcurrentMergeScheduler.cs" />
+    <Compile Include="Index\CorruptIndexException.cs" />
+    <Compile Include="Index\DirectoryReader.cs" />
+    <Compile Include="Index\DocConsumer.cs" />
+    <Compile Include="Index\DocFieldConsumer.cs" />
+    <Compile Include="Index\DocFieldConsumerPerField.cs" />
+    <Compile Include="Index\DocFieldProcessor.cs" />
+    <Compile Include="Index\DocFieldProcessorPerField.cs" />
+    <Compile Include="Index\DocInverter.cs" />
+    <Compile Include="Index\DocInverterPerField.cs" />
+    <Compile Include="Index\DocsAndPositionsEnum.cs" />
+    <Compile Include="Index\DocsEnum.cs" />
+    <Compile Include="Index\DocTermOrds.cs" />
+    <Compile Include="Index\DocumentsWriter.cs" />
+    <Compile Include="Index\DocumentsWriterDeleteQueue.cs" />
+    <Compile Include="Index\DocumentsWriterFlushControl.cs" />
+    <Compile Include="Index\DocumentsWriterFlushQueue.cs" />
+    <Compile Include="Index\DocumentsWriterPerThread.cs" />
+    <Compile Include="Index\DocumentsWriterPerThreadPool.cs" />
+    <Compile Include="Index\DocumentsWriterStallControl.cs" />
+    <Compile Include="Index\DocValues.cs" />
+    <Compile Include="Index\DocValuesFieldUpdates.cs" />
+    <Compile Include="Index\DocValuesProcessor.cs" />
+    <Compile Include="Index\DocValuesUpdate.cs" />
+    <Compile Include="Index\DocValuesWriter.cs" />
+    <Compile Include="Index\FieldInfo.cs" />
+    <Compile Include="Index\FieldInfos.cs" />
+    <Compile Include="Index\FieldInvertState.cs" />
+    <Compile Include="Index\Fields.cs" />
+    <Compile Include="Index\FilterAtomicReader.cs" />
+    <Compile Include="Index\FilterDirectoryReader.cs" />
+    <Compile Include="Index\FilteredTermsEnum.cs" />
+    <Compile Include="Index\FlushByRamOrCountsPolicy.cs" />
+    <Compile Include="Index\FlushPolicy.cs" />
+    <Compile Include="Index\FreqProxTermsWriter.cs" />
+    <Compile Include="Index\FreqProxTermsWriterPerField.cs" />
+    <Compile Include="Index\FrozenBufferedUpdates.cs" />
+    <Compile Include="Index\IConcurrentMergeScheduler.cs" />
+    <Compile Include="Index\IMergeScheduler.cs" />
+    <Compile Include="Index\IndexableField.cs" />
+    <Compile Include="Index\IndexableFieldType.cs" />
+    <Compile Include="Index\IndexCommit.cs" />
+    <Compile Include="Index\IndexDeletionPolicy.cs" />
+    <Compile Include="Index\IndexFileDeleter.cs" />
+    <Compile Include="Index\IndexFileNames.cs" />
+    <Compile Include="Index\IndexFormatTooNewException.cs" />
+    <Compile Include="Index\IndexFormatTooOldException.cs" />
+    <Compile Include="Index\IndexNotFoundException.cs" />
+    <Compile Include="Index\IndexReader.cs" />
+    <Compile Include="Index\IndexReaderContext.cs" />
+    <Compile Include="Index\IndexUpgrader.cs" />
+    <Compile Include="Index\IndexWriter.cs" />
+    <Compile Include="Index\IndexWriterConfig.cs" />
+    <Compile Include="Index\InvertedDocConsumer.cs" />
+    <Compile Include="Index\InvertedDocConsumerPerField.cs" />
+    <Compile Include="Index\InvertedDocEndConsumer.cs" />
+    <Compile Include="Index\InvertedDocEndConsumerPerField.cs" />
+    <Compile Include="Index\KeepOnlyLastCommitDeletionPolicy.cs" />
+    <Compile Include="Index\LiveIndexWriterConfig.cs" />
+    <Compile Include="Index\LogByteSizeMergePolicy.cs" />
+    <Compile Include="Index\LogDocMergePolicy.cs" />
+    <Compile Include="Index\LogMergePolicy.cs" />
+    <Compile Include="Index\MergePolicy.cs" />
+    <Compile Include="Index\MergeScheduler.cs" />
+    <Compile Include="Index\MergeState.cs" />
+    <Compile Include="Index\MergeTrigger.cs" />
+    <Compile Include="Index\MultiBits.cs" />
+    <Compile Include="Index\MultiDocsAndPositionsEnum.cs" />
+    <Compile Include="Index\MultiDocsEnum.cs" />
+    <Compile Include="Index\MultiDocValues.cs" />
+    <Compile Include="Index\MultiFields.cs" />
+    <Compile Include="Index\MultiReader.cs" />
+    <Compile Include="Index\MultiTerms.cs" />
+    <Compile Include="Index\MultiTermsEnum.cs" />
+    <Compile Include="Index\NoDeletionPolicy.cs" />
+    <Compile Include="Index\NoMergePolicy.cs" />
+    <Compile Include="Index\NoMergeScheduler.cs" />
+    <Compile Include="Index\NormsConsumer.cs" />
+    <Compile Include="Index\NormsConsumerPerField.cs" />
+    <Compile Include="Index\NumericDocValues.cs" />
+    <Compile Include="Index\NumericDocValuesFieldUpdates.cs" />
+    <Compile Include="Index\NumericDocValuesWriter.cs" />
+    <Compile Include="Index\OrdTermState.cs" />
+    <Compile Include="Index\ParallelAtomicReader.cs" />
+    <Compile Include="Index\ParallelCompositeReader.cs" />
+    <Compile Include="Index\ParallelPostingsArray.cs" />
+    <Compile Include="Index\PersistentSnapshotDeletionPolicy.cs" />
+    <Compile Include="Index\PrefixCodedTerms.cs" />
+    <Compile Include="Index\RandomAccessOrds.cs" />
+    <Compile Include="Index\ReaderManager.cs" />
+    <Compile Include="Index\ReadersAndUpdates.cs" />
+    <Compile Include="Index\ReaderSlice.cs" />
+    <Compile Include="Index\ReaderUtil.cs" />
+    <Compile Include="Index\SegmentCommitInfo.cs" />
+    <Compile Include="Index\SegmentCoreReaders.cs" />
+    <Compile Include="Index\SegmentDocValues.cs" />
+    <Compile Include="Index\SegmentInfo.cs" />
+    <Compile Include="Index\SegmentInfos.cs" />
+    <Compile Include="Index\SegmentMerger.cs" />
+    <Compile Include="Index\SegmentReader.cs" />
+    <Compile Include="Index\SegmentReadState.cs" />
+    <Compile Include="Index\SegmentWriteState.cs" />
+    <Compile Include="Index\SerialMergeScheduler.cs" />
+    <Compile Include="Index\SimpleMergedSegmentWarmer.cs" />
+    <Compile Include="Index\SingleTermsEnum.cs" />
+    <Compile Include="Index\SingletonSortedSetDocValues.cs" />
+    <Compile Include="Index\SlowCompositeReaderWrapper.cs" />
+    <Compile Include="Index\SnapshotDeletionPolicy.cs" />
+    <Compile Include="Index\SortedDocValues.cs" />
+    <Compile Include="Index\SortedDocValuesTermsEnum.cs" />
+    <Compile Include="Index\SortedDocValuesWriter.cs" />
+    <Compile Include="Index\SortedSetDocValues.cs" />
+    <Compile Include="Index\SortedSetDocValuesTermsEnum.cs" />
+    <Compile Include="Index\SortedSetDocValuesWriter.cs" />
+    <Compile Include="Index\StandardDirectoryReader.cs" />
+    <Compile Include="Index\StoredFieldsConsumer.cs" />
+    <Compile Include="Index\StoredFieldsProcessor.cs" />
+    <Compile Include="Index\StoredFieldVisitor.cs" />
+    <Compile Include="Index\TaskMergeScheduler.cs" />
+    <Compile Include="Index\Term.cs" />
+    <Compile Include="Index\TermContext.cs" />
+    <Compile Include="Index\Terms.cs" />
+    <Compile Include="Index\TermsEnum.cs" />
+    <Compile Include="Index\TermsHash.cs" />
+    <Compile Include="Index\TermsHashConsumer.cs" />
+    <Compile Include="Index\TermsHashConsumerPerField.cs" />
+    <Compile Include="Index\TermsHashPerField.cs" />
+    <Compile Include="Index\TermState.cs" />
+    <Compile Include="Index\TermVectorsConsumer.cs" />
+    <Compile Include="Index\TermVectorsConsumerPerField.cs" />
+    <Compile Include="Index\TieredMergePolicy.cs" />
+    <Compile Include="Index\TrackingIndexWriter.cs" />
+    <Compile Include="Index\TwoPhaseCommit.cs" />
+    <Compile Include="Index\TwoPhaseCommitTool.cs" />
+    <Compile Include="Index\TwoStoredFieldsConsumers.cs" />
+    <Compile Include="Index\UpgradeIndexMergePolicy.cs" />
+    <Compile Include="LucenePackage.cs" />
+    <Compile Include="Support\IO\Compression\LZOCompressor.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Search\AutomatonQuery.cs" />
+    <Compile Include="Search\BitsFilteredDocIdSet.cs" />
+    <Compile Include="Search\BooleanClause.cs" />
+    <Compile Include="Search\BooleanQuery.cs" />
+    <Compile Include="Search\BooleanScorer.cs" />
+    <Compile Include="Search\BooleanScorer2.cs" />
+    <Compile Include="Search\BoostAttribute.cs" />
+    <Compile Include="Search\BoostAttributeImpl.cs" />
+    <Compile Include="Search\BulkScorer.cs" />
+    <Compile Include="Search\CachingCollector.cs" />
+    <Compile Include="Search\CachingWrapperFilter.cs" />
+    <Compile Include="Search\CollectionStatistics.cs" />
+    <Compile Include="Search\CollectionTerminatedException.cs" />
+    <Compile Include="Search\Collector.cs" />
+    <Compile Include="Search\ComplexExplanation.cs" />
+    <Compile Include="Search\ConjunctionScorer.cs" />
+    <Compile Include="Search\ConstantScoreAutoRewrite.cs" />
+    <Compile Include="Search\ConstantScoreQuery.cs" />
+    <Compile Include="Search\ControlledRealTimeReopenThread.cs" />
+    <Compile Include="Search\DisjunctionMaxQuery.cs" />
+    <Compile Include="Search\DisjunctionMaxScorer.cs" />
+    <Compile Include="Search\DisjunctionScorer.cs" />
+    <Compile Include="Search\DisjunctionSumScorer.cs" />
+    <Compile Include="Search\DocIdSet.cs" />
+    <Compile Include="Search\DocIdSetIterator.cs" />
+    <Compile Include="Search\DocTermOrdsRangeFilter.cs" />
+    <Compile Include="Search\DocTermOrdsRewriteMethod.cs" />
+    <Compile Include="Search\ExactPhraseScorer.cs" />
+    <Compile Include="Search\Explanation.cs" />
+    <Compile Include="Search\FakeScorer.cs" />
+    <Compile Include="Search\FieldCache.cs" />
+    <Compile Include="Search\FieldCacheDocIdSet.cs" />
+    <Compile Include="Search\FieldCacheImpl.cs" />
+    <Compile Include="Search\FieldCacheRangeFilter.cs" />
+    <Compile Include="Search\FieldCacheRewriteMethod.cs" />
+    <Compile Include="Search\FieldCacheTermsFilter.cs" />
+    <Compile Include="Search\FieldComparator.cs" />
+    <Compile Include="Search\FieldComparatorSource.cs" />
+    <Compile Include="Search\FieldDoc.cs" />
+    <Compile Include="Search\FieldValueFilter.cs" />
+    <Compile Include="Search\FieldValueHitQueue.cs" />
+    <Compile Include="Search\Filter.cs" />
+    <Compile Include="Search\FilteredDocIdSet.cs" />
+    <Compile Include="Search\FilteredDocIdSetIterator.cs" />
+    <Compile Include="Search\FilteredQuery.cs" />
+    <Compile Include="Search\FuzzyQuery.cs" />
+    <Compile Include="Search\FuzzyTermsEnum.cs" />
+    <Compile Include="Search\HitQueue.cs" />
+    <Compile Include="Search\IndexSearcher.cs" />
+    <Compile Include="Search\LiveFieldValues.cs" />
+    <Compile Include="Search\MatchAllDocsQuery.cs" />
+    <Compile Include="Search\MaxNonCompetitiveBoostAttribute.cs" />
+    <Compile Include="Search\MaxNonCompetitiveBoostAttributeImpl.cs" />
+    <Compile Include="Search\MinShouldMatchSumScorer.cs" />
+    <Compile Include="Search\MultiCollector.cs" />
+    <Compile Include="Search\MultiPhraseQuery.cs" />
+    <Compile Include="Search\MultiTermQuery.cs" />
+    <Compile Include="Search\MultiTermQueryWrapperFilter.cs" />
+    <Compile Include="Search\NGramPhraseQuery.cs" />
+    <Compile Include="Search\NumericRangeFilter.cs" />
+    <Compile Include="Search\NumericRangeQuery.cs" />
+    <Compile Include="Search\Payloads\AveragePayloadFunction.cs" />
+    <Compile Include="Search\Payloads\MaxPayloadFunction.cs" />
+    <Compile Include="Search\Payloads\MinPayloadFunction.cs" />
+    <Compile Include="Search\Payloads\PayloadFunction.cs" />
+    <Compile Include="Search\Payloads\PayloadNearQuery.cs" />
+    <Compile Include="Search\Payloads\PayloadSpanUtil.cs" />
+    <Compile Include="Search\Payloads\PayloadTermQuery.cs" />
+    <Compile Include="Search\PhrasePositions.cs" />
+    <Compile Include="Search\PhraseQuery.cs" />
+    <Compile Include="Search\PhraseQueue.cs" />
+    <Compile Include="Search\PositiveScoresOnlyCollector.cs" />
+    <Compile Include="Search\PrefixFilter.cs" />
+    <Compile Include="Search\PrefixQuery.cs" />
+    <Compile Include="Search\PrefixTermsEnum.cs" />
+    <Compile Include="Search\Query.cs" />
+    <Compile Include="Search\QueryRescorer.cs" />
+    <Compile Include="Search\QueryWrapperFilter.cs" />
+    <Compile Include="Search\ReferenceManager.cs" />
+    <Compile Include="Search\RegexpQuery.cs" />
+    <Compile Include="Search\ReqExclScorer.cs" />
+    <Compile Include="Search\ReqOptSumScorer.cs" />
+    <Compile Include="Search\Rescorer.cs" />
+    <Compile Include="Search\ScoreCachingWrappingScorer.cs" />
+    <Compile Include="Search\ScoreDoc.cs" />
+    <Compile Include="Search\Scorer.cs" />
+    <Compile Include="Search\ScoringRewrite.cs" />
+    <Compile Include="Search\SearcherFactory.cs" />
+    <Compile Include="Search\SearcherLifetimeManager.cs" />
+    <Compile Include="Search\SearcherManager.cs" />
+    <Compile Include="Search\Similarities\AfterEffect.cs" />
+    <Compile Include="Search\Similarities\AfterEffectB.cs" />
+    <Compile Include="Search\Similarities\AfterEffectL.cs" />
+    <Compile Include="Search\Similarities\BasicModel.cs" />
+    <Compile Include="Search\Similarities\BasicModelBE.cs" />
+    <Compile Include="Search\Similarities\BasicModelD.cs" />
+    <Compile Include="Search\Similarities\BasicModelG.cs" />
+    <Compile Include="Search\Similarities\BasicModelIF.cs" />
+    <Compile Include="Search\Similarities\BasicModelIn.cs" />
+    <Compile Include="Search\Similarities\BasicModelIne.cs" />
+    <Compile Include="Search\Similarities\BasicModelP.cs" />
+    <Compile Include="Search\Similarities\BasicStats.cs" />
+    <Compile Include="Search\Similarities\BM25Similarity.cs" />
+    <Compile Include="Search\Similarities\DefaultSimilarity.cs" />
+    <Compile Include="Search\Similarities\DFRSimilarity.cs" />
+    <Compile Include="Search\Similarities\Distribution.cs" />
+    <Compile Include="Search\Similarities\DistributionLL.cs" />
+    <Compile Include="Search\Similarities\DistributionSPL.cs" />
+    <Compile Include="Search\Similarities\IBSimilarity.cs" />
+    <Compile Include="Search\Similarities\Lambda.cs" />
+    <Compile Include="Search\Similarities\LambdaDF.cs" />
+    <Compile Include="Search\Similarities\LambdaTTF.cs" />
+    <Compile Include="Search\Similarities\LMDirichletSimilarity.cs" />
+    <Compile Include="Search\Similarities\LMJelinekMercerSimilarity.cs" />
+    <Compile Include="Search\Similarities\LMSimilarity.cs" />
+    <Compile Include="Search\Similarities\MultiSimilarity.cs" />
+    <Compile Include="Search\Similarities\Normalization.cs" />
+    <Compile Include="Search\Similarities\NormalizationH1.cs" />
+    <Compile Include="Search\Similarities\NormalizationH2.cs" />
+    <Compile Include="Search\Similarities\NormalizationH3.cs" />
+    <Compile Include="Search\Similarities\NormalizationZ.cs" />
+    <Compile Include="Search\Similarities\PerFieldSimilarityWrapper.cs" />
+    <Compile Include="Search\Similarities\Similarity.cs" />
+    <Compile Include="Search\Similarities\SimilarityBase.cs" />
+    <Compile Include="Search\Similarities\TFIDFSimilarity.cs" />
+    <Compile Include="Search\SloppyPhraseScorer.cs" />
+    <Compile Include="Search\Sort.cs" />
+    <Compile Include="Search\SortField.cs" />
+    <Compile Include="Search\SortRescorer.cs" />
+    <Compile Include="Search\Spans\FieldMaskingSpanQuery.cs" />
+    <Compile Include="Search\Spans\NearSpansOrdered.cs" />
+    <Compile Include="Search\Spans\NearSpansUnordered.cs" />
+    <Compile Include="Search\Spans\SpanFirstQuery.cs" />
+    <Compile Include="Search\Spans\SpanMultiTermQueryWrapper.cs" />
+    <Compile Include="Search\Spans\SpanNearPayloadCheckQuery.cs" />
+    <Compile Include="Search\Spans\SpanNearQuery.cs" />
+    <Compile Include="Search\Spans\SpanNotQuery.cs" />
+    <Compile Include="Search\Spans\SpanOrQuery.cs" />
+    <Compile Include="Search\Spans\SpanPayloadCheckQuery.cs" />
+    <Compile Include="Search\Spans\SpanPositionCheckQuery.cs" />
+    <Compile Include="Search\Spans\SpanPositionRangeQuery.cs" />
+    <Compile Include="Search\Spans\SpanQuery.cs" />
+    <Compile Include="Search\Spans\Spans.cs" />
+    <Compile Include="Search\Spans\SpanScorer.cs" />
+    <Compile Include="Search\Spans\SpanTermQuery.cs" />
+    <Compile Include="Search\Spans\SpanWeight.cs" />
+    <Compile Include="Search\Spans\TermSpans.cs" />
+    <Compile Include="Search\TermCollectingRewrite.cs" />
+    <Compile Include="Search\TermQuery.cs" />
+    <Compile Include="Search\TermRangeFilter.cs" />
+    <Compile Include="Search\TermRangeQuery.cs" />
+    <Compile Include="Search\TermRangeTermsEnum.cs" />
+    <Compile Include="Search\TermScorer.cs" />
+    <Compile Include="Search\TermStatistics.cs" />
+    <Compile Include="Search\TimeLimitingCollector.cs" />
+    <Compile Include="Search\TopDocs.cs" />
+    <Compile Include="Search\TopDocsCollector.cs" />
+    <Compile Include="Search\TopFieldCollector.cs" />
+    <Compile Include="Search\TopFieldDocs.cs" />
+    <Compile Include="Search\TopScoreDocCollector.cs" />
+    <Compile Include="Search\TopTermsRewrite.cs" />
+    <Compile Include="Search\TotalHitCountCollector.cs" />
+    <Compile Include="Search\Weight.cs" />
+    <Compile Include="Search\WildcardQuery.cs" />
+    <Compile Include="Store\AlreadyClosedException.cs" />
+    <Compile Include="Store\BaseDirectory.cs" />
+    <Compile Include="Store\BufferedChecksum.cs" />
+    <Compile Include="Store\BufferedChecksumIndexInput.cs" />
+    <Compile Include="Store\BufferedIndexInput.cs" />
+    <Compile Include="Store\BufferedIndexOutput.cs" />
+    <Compile Include="Store\ByteArrayDataInput.cs" />
+    <Compile Include="Store\ByteArrayDataOutput.cs" />
+    <Compile Include="Store\ByteBufferIndexInput.cs" />
+    <Compile Include="Store\ChecksumIndexInput.cs" />
+    <Compile Include="Store\CompoundFileDirectory.cs" />
+    <Compile Include="Store\CompoundFileWriter.cs" />
+    <Compile Include="Store\DataInput.cs" />
+    <Compile Include="Store\DataOutput.cs" />
+    <Compile Include="Store\Directory.cs" />
+    <Compile Include="Store\FileSwitchDirectory.cs" />
+    <Compile Include="Store\FilterDirectory.cs" />
+    <Compile Include="Store\FlushInfo.cs" />
+    <Compile Include="Store\FSDirectory.cs" />
+    <Compile Include="Store\FSLockFactory.cs" />
+    <Compile Include="Store\IndexInput.cs" />
+    <Compile Include="Store\IndexOutput.cs" />
+    <Compile Include="Store\InputStreamDataInput.cs" />
+    <Compile Include="Store\IOContext.cs" />
+    <Compile Include="Store\Lock.cs" />
+    <Compile Include="Store\LockFactory.cs" />
+    <Compile Include="Store\LockObtainFailedException.cs" />
+    <Compile Include="Store\LockReleaseFailedException.cs" />
+    <Compile Include="Store\LockStressTest.cs" />
+    <Compile Include="Store\LockVerifyServer.cs" />
+    <Compile Include="Store\MergeInfo.cs" />
+    <Compile Include="Store\MMapDirectory.cs" />
+    <Compile Include="Store\NativeFSLockFactory.cs" />
+    <Compile Include="Store\NIOFSDirectory.cs" />
+    <Compile Include="Store\NoLockFactory.cs" />
+    <Compile Include="Store\NoSuchDirectoryException.cs" />
+    <Compile Include="Store\NRTCachingDirectory.cs" />
+    <Compile Include="Store\OutputStreamDataOutput.cs" />
+    <Compile Include="Store\RAMDirectory.cs" />
+    <Compile Include="Store\RAMFile.cs" />
+    <Compile Include="Store\RAMInputStream.cs" />
+    <Compile Include="Store\RAMOutputStream.cs" />
+    <Compile Include="Store\RateLimitedDirectoryWrapper.cs" />
+    <Compile Include="Store\RateLimitedIndexOutput.cs" />
+    <Compile Include="Store\RateLimiter.cs" />
+    <Compile Include="Store\SimpleFSDirectory.cs" />
+    <Compile Include="Store\SimpleFSLockFactory.cs" />
+    <Compile Include="Store\SingleInstanceLockFactory.cs" />
+    <Compile Include="Store\TrackingDirectoryWrapper.cs" />
+    <Compile Include="Store\VerifyingLockFactory.cs" />
+    <Compile Include="Support\AssemblyExtensions.cs" />
+    <Compile Include="Support\AtomicBoolean.cs" />
+    <Compile Include="Support\AtomicInteger.cs" />
+    <Compile Include="Support\AtomicLong.cs" />
+    <Compile Include="Support\AtomicObject.cs" />
+    <Compile Include="Support\AtomicReferenceArray.cs" />
+    <Compile Include="Support\AttributeItem.cs" />
+    <Compile Include="Support\BitArrayExtensions.cs" />
+    <Compile Include="Support\BundleResourceManagerFactory.cs" />
+    <Compile Include="Support\IO\ByteArrayOutputStream.cs" />
+    <Compile Include="Support\C5.Support.cs" />
+    <Compile Include="Support\Character.cs" />
+    <Compile Include="Support\Arrays.cs" />
+    <Compile Include="Support\Codecs\CodecNameAttribute.cs" />
+    <Compile Include="Support\Codecs\DefaultDocValuesFormatFactory.cs" />
+    <Compile Include="Support\Codecs\DefaultPostingsFormatFactory.cs" />
+    <Compile Include="Support\Codecs\DocValuesFormatNameAttribute.cs" />
+    <Compile Include="Support\Codecs\ICodecFactory.cs" />
+    <Compile Include="Support\Codecs\IDocValuesFormatFactory.cs" />
+    <Compile Include="Support\Codecs\ExcludeCodecFromScanAttribute.cs" />
+    <Compile 
Include="Support\Codecs\ExcludeDocValuesFormatFromScanAttribute.cs" />
+    <Compile 
Include="Support\Codecs\ExcludePostingsFormatFromScanAttribute.cs" />
+    <Compile Include="Support\Codecs\IPostingsFormatFactory.cs" />
+    <Compile Include="Support\Codecs\PostingsFormatNameAttribute.cs" />
+    <Compile Include="Support\IO\BinaryReaderDataInput.cs" />
+    <Compile Include="Support\IO\BinaryWriterDataOutput.cs" />
+    <Compile Include="Support\Collections.cs" />
+    <Compile Include="Support\ConcurrentHashMapWrapper.cs" />
+    <Compile Include="Support\ConcurrentHashSet.cs" />
+    <Compile Include="Support\CultureContext.cs" />
+    <Compile Include="Support\IO\DataInputStream.cs" />
+    <Compile Include="Support\IO\DataOutputStream.cs" />
+    <Compile Include="Support\Codecs\DefaultCodecFactory.cs" />
+    <Compile Include="Support\Equatable.cs" />
+    <Compile Include="Support\EquatableSet.cs" />
+    <Compile Include="Support\ExceptionExtensions.cs" />
+    <Compile Include="Support\ExceptionToClassNameConventionAttribute.cs" />
+    <Compile Include="Support\ExceptionToNullableEnumConvention.cs" />
+    <Compile Include="Support\IO\FileStreamExtensions.cs" />
+    <Compile Include="Support\ICallable.cs" />
+    <Compile Include="Support\ICharSequence.cs" />
+    <Compile Include="Support\RectangularArrays.cs" />
+    <Compile Include="Support\Threading\ICompletionService.cs" />
+    <Compile Include="Support\IO\IDataInput.cs" />
+    <Compile Include="Support\IO\IDataOutput.cs" />
+    <Compile Include="Support\IdentityComparer.cs" />
+    <Compile Include="Support\IdentityHashMap.cs" />
+    <Compile Include="Support\IdentityHashSet.cs" />
+    <Compile Include="Support\IdentityWeakReference.cs" />
+    <Compile Include="Support\IO\Buffer.cs" />
+    <Compile Include="Support\IO\BufferExceptions.cs" />
+    <Compile Include="Support\IO\ByteBuffer.cs" />
+    <Compile Include="Support\DictionaryExtensions.cs" />
+    <Compile Include="Support\ExceptionToNetNumericConventionAttribute.cs" />
+    <Compile Include="Support\IndexWriterConfigExtensions.cs" />
+    <Compile Include="Support\IO\ByteOrder.cs" />
+    <Compile Include="Support\IO\Endianness.cs" />
+    <Compile Include="Support\IO\HeapByteBuffer.cs" />
+    <Compile Include="Support\IO\LongArrayBuffer.cs" />
+    <Compile Include="Support\IO\LongBuffer.cs" />
+    <Compile Include="Support\IO\LongToByteBufferAdapter.cs" />
+    <Compile Include="Support\IO\ReadOnlyHeapByteBuffer.cs" />
+    <Compile Include="Support\IO\ReadWriteHeapByteBuffer.cs" />
+    <Compile Include="Support\IO\ReadWriteLongArrayBuffer.cs" />
+    <Compile Include="Support\IResourceManagerFactory.cs" />
+    <Compile 
Include="Support\Threading\LimitedConcurrencyLevelTaskScheduler.cs" />
+    <Compile Include="Support\LinkedHashMap.cs" />
+    <Compile Include="Support\ListExtensions.cs" />
+    <Compile Include="Support\LurchTable.cs" />
+    <Compile Include="Support\MathExtension.cs" />
+    <Compile Include="Support\IO\MemoryMappedFileByteBuffer.cs" />
+    <Compile Include="Support\NumberFormat.cs" />
+    <Compile Include="Support\PriorityQueue.cs" />
+    <Compile Include="Support\Threading\ReaderWriterLockSlimExtensions.cs" />
+    <Compile Include="Support\Threading\ReentrantLock.cs" />
+    <Compile Include="Support\IO\SafeTextWriterWrapper.cs" />
+    <Compile Include="Support\SetExtensions.cs" />
+    <Compile Include="Support\SignedZeroComparer.cs" />
+    <Compile Include="Support\IO\StreamUtils.cs" />
+    <Compile Include="Support\StringBuilderExtensions.cs" />
+    <Compile Include="Support\StringCharSequenceWrapper.cs" />
+    <Compile Include="Support\StringExtensions.cs" />
+    <Compile Include="Support\StringTokenizer.cs" />
+    <Compile Include="Support\Threading\TaskSchedulerCompletionService.cs" />
+    <Compile Include="Support\Threading\ThreadFactory.cs" />
+    <Compile Include="Support\Time.cs" />
+    <Compile Include="Support\TreeDictionary.cs" />
+    <Compile Include="Support\TreeSet.cs" />
+    <Compile Include="Support\Threading\CloseableThreadLocalProfiler.cs" />
+    <Compile Include="Support\Compatibility\ConcurrentDictionary.cs" />
+    <Compile Include="Support\Compatibility\Func.cs" />
+    <Compile Include="Support\Compatibility\ISet.cs" />
+    <Compile Include="Support\Compatibility\SetFactory.cs" />
+    <Compile Include="Support\Compatibility\SortedSet.cs" />
+    <Compile Include="Support\Threading\ThreadLocal.cs" />
+    <Compile Include="Support\Compatibility\WrappedHashSet.cs" />
+    <Compile Include="Support\CRC32.cs" />
+    <Compile Include="Support\IO\Compression\Deflater.cs" />
+    <Compile Include="Support\EquatableList.cs" />
+    <Compile Include="Support\IO\FileSupport.cs" />
+    <Compile Include="Support\GeneralKeyedCollection.cs" />
+    <Compile Include="Support\HashMap.cs" />
+    <Compile Include="Support\IChecksum.cs" />
+    <Compile Include="Support\IO\Compression\Inflater.cs" />
+    <Compile Include="Support\Threading\IThreadRunnable.cs" />
+    <Compile Include="Support\Number.cs" />
+    <Compile Include="Support\OS.cs" />
+    <Compile Include="Support\IO\Compression\SharpZipLib.cs" />
+    <Compile Include="Support\Threading\ThreadClass.cs" />
+    <Compile Include="Support\Threading\ThreadLock.cs" />
+    <Compile Include="Support\Util\ExcludeServiceAttribute.cs" />
+    <Compile Include="Support\Util\IServiceListable.cs" />
+    <Compile Include="Support\Util\NamedServiceFactory.cs" />
+    <Compile Include="Support\Util\ServiceNameAttribute.cs" />
+    <Compile Include="Support\WeakDictionary.cs" />
+    <Compile Include="Support\WritableArrayAttribute.cs" />
+    <Compile Include="Util\Accountable.cs" />
+    <Compile Include="Util\ArrayInPlaceMergeSorter.cs" />
+    <Compile Include="Util\ArrayIntroSorter.cs" />
+    <Compile Include="Util\ArrayTimSorter.cs" />
+    <Compile Include="Util\ArrayUtil.cs" />
+    <Compile Include="Util\Attribute.cs" />
+    <Compile Include="Util\AttributeImpl.cs" />
+    <Compile Include="Util\AttributeReflector.cs" />
+    <Compile Include="Util\AttributeSource.cs" />
+    <Compile Include="Util\Automaton\Automaton.cs" />
+    <Compile Include="Util\Automaton\AutomatonProvider.cs" />
+    <Compile Include="Util\Automaton\BasicAutomata.cs" />
+    <Compile Include="Util\Automaton\BasicOperations.cs" />
+    <Compile Include="Util\Automaton\ByteRunAutomaton.cs" />
+    <Compile Include="Util\Automaton\CharacterRunAutomaton.cs" />
+    <Compile Include="Util\Automaton\CompiledAutomaton.cs" />
+    <Compile Include="Util\Automaton\DaciukMihovAutomatonBuilder.cs" />
+    <Compile Include="Util\Automaton\Lev1ParametricDescription.cs" />
+    <Compile Include="Util\Automaton\Lev1TParametricDescription.cs" />
+    <Compile Include="Util\Automaton\Lev2ParametricDescription.cs" />
+    <Compile Include="Util\Automaton\Lev2TParametricDescription.cs" />
+    <Compile Include="Util\Automaton\LevenshteinAutomata.cs" />
+    <Compile Include="Util\Automaton\MinimizationOperations.cs" />
+    <Compile Include="Util\Automaton\RegExp.cs" />
+    <Compile Include="Util\Automaton\RunAutomaton.cs" />
+    <Compile Include="Util\Automaton\SortedIntSet.cs" />
+    <Compile Include="Util\Automaton\SpecialOperations.cs" />
+    <Compile Include="Util\Automaton\State.cs" />
+    <Compile Include="Util\Automaton\StatePair.cs" />
+    <Compile Include="Util\Automaton\Transition.cs" />
+    <Compile Include="Util\Automaton\UTF32ToUTF8.cs" />
+    <Compile Include="Util\Bits.cs" />
+    <Compile Include="Util\BitUtil.cs" />
+    <Compile Include="Util\BroadWord.cs" />
+    <Compile Include="Util\ByteBlockPool.cs" />
+    <Compile Include="Util\BytesRef.cs" />
+    <Compile Include="Util\BytesRefArray.cs" />
+    <Compile Include="Util\BytesRefHash.cs" />
+    <Compile Include="Util\BytesRefIterator.cs" />
+    <Compile Include="Util\CharsRef.cs" />
+    <Compile Include="Util\CloseableThreadLocal.cs" />
+    <Compile Include="Util\CollectionUtil.cs" />
+    <Compile Include="Util\CommandLineUtil.cs" />
+    <Compile Include="Util\Constants.cs" />
+    <Compile Include="Util\Counter.cs" />
+    <Compile Include="Util\DocIdBitSet.cs" />
+    <Compile Include="Util\DoubleBarrelLRUCache.cs" />
+    <Compile Include="Util\FieldCacheSanityChecker.cs" />
+    <Compile Include="Util\FilterIterator.cs" />
+    <Compile Include="Util\FixedBitSet.cs" />
+    <Compile Include="Util\Fst\Builder.cs" />
+    <Compile Include="Util\Fst\ByteSequenceOutputs.cs" />
+    <Compile Include="Util\Fst\BytesRefFSTEnum.cs" />
+    <Compile Include="Util\Fst\BytesStore.cs" />
+    <Compile Include="Util\Fst\CharSequenceOutputs.cs" />
+    <Compile Include="Util\Fst\ForwardBytesReader.cs" />
+    <Compile Include="Util\Fst\FST.cs" />
+    <Compile Include="Util\Fst\FSTEnum.cs" />
+    <Compile Include="Util\Fst\IntSequenceOutputs.cs" />
+    <Compile Include="Util\Fst\IntsRefFSTEnum.cs" />
+    <Compile Include="Util\Fst\NodeHash.cs" />
+    <Compile Include="Util\Fst\NoOutputs.cs" />
+    <Compile Include="Util\Fst\Outputs.cs" />
+    <Compile Include="Util\Fst\PairOutputs.cs" />
+    <Compile Include="Util\Fst\PositiveIntOutputs.cs" />
+    <Compile Include="Util\Fst\ReverseBytesReader.cs" />
+    <Compile Include="Util\Fst\Util.cs" />
+    <Compile Include="Util\GrowableByteArrayDataOutput.cs" />
+    <Compile Include="Util\IndexableBinaryStringTools.cs" />
+    <Compile Include="Util\InfoStream.cs" />
+    <Compile Include="Util\InPlaceMergeSorter.cs" />
+    <Compile Include="Util\IntBlockPool.cs" />
+    <Compile Include="Util\IntroSorter.cs" />
+    <Compile Include="Util\IntsRef.cs" />
+    <Compile Include="Util\IOUtils.cs" />
+    <Compile Include="Util\LongBitSet.cs" />
+    <Compile Include="Util\LongsRef.cs" />
+    <Compile Include="Util\LongValues.cs" />
+    <Compile Include="Util\MapOfSets.cs" />
+    <Compile Include="Util\MathUtil.cs" />
+    <Compile Include="Util\MergedIterator.cs" />
+    <Compile Include="Util\MutableBits.cs" />
+    <Compile Include="Util\Mutable\MutableValue.cs" />
+    <Compile Include="Util\Mutable\MutableValueBool.cs" />
+    <Compile Include="Util\Mutable\MutableValueDate.cs" />
+    <Compile Include="Util\Mutable\MutableValueDouble.cs" />
+    <Compile Include="Util\Mutable\MutableValueFloat.cs" />
+    <Compile Include="Util\Mutable\MutableValueInt.cs" />
+    <Compile Include="Util\Mutable\MutableValueLong.cs" />
+    <Compile Include="Util\Mutable\MutableValueStr.cs" />
+    <Compile Include="Util\NamedSPILoader.cs" />
+    <Compile Include="Util\NamedThreadFactory.cs" />
+    <Compile Include="Util\NumericUtils.cs" />
+    <Compile Include="Util\OfflineSorter.cs" />
+    <Compile Include="Util\OpenBitSet.cs" />
+    <Compile Include="Util\OpenBitSetDISI.cs" />
+    <Compile Include="Util\OpenBitSetIterator.cs" />
+    <Compile Include="Util\Packed\AbstractAppendingLongBuffer.cs" />
+    <Compile Include="Util\Packed\AbstractBlockPackedWriter.cs" />
+    <Compile Include="Util\Packed\AbstractPagedMutable.cs" />
+    <Compile Include="Util\Packed\AppendingDeltaPackedLongBuffer.cs" />
+    <Compile Include="Util\Packed\AppendingPackedLongBuffer.cs" />
+    <Compile Include="Util\Packed\BlockPackedReader.cs" />
+    <Compile Include="Util\Packed\BlockPackedReaderIterator.cs" />
+    <Compile Include="Util\Packed\BlockPackedWriter.cs" />
+    <Compile Include="Util\Packed\BulkOperation.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked1.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked10.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked11.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked12.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked13.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked14.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked15.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked16.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked17.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked18.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked19.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked2.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked20.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked21.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked22.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked23.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked24.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked3.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked4.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked5.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked6.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked7.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked8.cs" />
+    <Compile Include="Util\Packed\BulkOperationPacked9.cs" />
+    <Compile Include="Util\Packed\BulkOperationPackedSingleBlock.cs" />
+    <Compile Include="Util\Packed\Direct16.cs" />
+    <Compile Include="Util\Packed\Direct32.cs" />
+    <Compile Include="Util\Packed\Direct64.cs" />
+    <Compile Include="Util\Packed\Direct8.cs" />
+    <Compile Include="Util\Packed\DirectPacked64SingleBlockReader.cs" />
+    <Compile Include="Util\Packed\DirectPackedReader.cs" />
+    <Compile Include="Util\Packed\EliasFanoDecoder.cs" />
+    <Compile Include="Util\Packed\EliasFanoDocIdSet.cs" />
+    <Compile Include="Util\Packed\EliasFanoEncoder.cs" />
+    <Compile Include="Util\Packed\GrowableWriter.cs" />
+    <Compile Include="Util\Packed\MonotonicAppendingLongBuffer.cs" />
+    <Compile Include="Util\Packed\MonotonicBlockPackedReader.cs" />
+    <Compile Include="Util\Packed\MonotonicBlockPackedWriter.cs" />
+    <Compile Include="Util\Packed\Packed16ThreeBlocks.cs" />
+    <Compile Include="Util\Packed\Packed64.cs" />
+    <Compile Include="Util\Packed\Packed64SingleBlock.cs" />
+    <Compile Include="Util\Packed\Packed8ThreeBlocks.cs" />
+    <Compile Include="Util\Packed\PackedDataInput.cs" />
+    <Compile Include="Util\Packed\PackedDataOutput.cs" />
+    <Compile Include="Util\Packed\PackedInts.cs" />
+    <Compile Include="Util\Packed\PackedReaderIterator.cs" />
+    <Compile Include="Util\Packed\PackedWriter.cs" />
+    <Compile Include="Util\Packed\PagedGrowableWriter.cs" />
+    <Compile Include="Util\Packed\PagedMutable.cs" />
+    <Compile Include="Util\PagedBytes.cs" />
+    <Compile Include="Util\PForDeltaDocIdSet.cs" />
+    <Compile Include="Util\PrintStreamInfoStream.cs" />
+    <Compile Include="Util\PriorityQueue.cs" />
+    <Compile Include="Util\QueryBuilder.cs" />
+    <Compile Include="Util\RamUsageEstimator.cs" />
+    <Compile Include="Util\RecyclingByteBlockAllocator.cs" />
+    <Compile Include="Util\RecyclingIntBlockAllocator.cs" />
+    <Compile Include="Util\RefCount.cs" />
+    <Compile Include="Util\RollingBuffer.cs" />
+    <Compile Include="Util\SentinelIntSet.cs" />
+    <Compile Include="Util\SetOnce.cs" />
+    <Compile Include="Support\SimpleStringInterner.cs" />
+    <Compile Include="Util\SloppyMath.cs" />
+    <Compile Include="Util\SmallFloat.cs" />
+    <Compile Include="Util\Sorter.cs" />
+    <Compile Include="Util\SPIClassIterator.cs" />
+    <Compile Include="Util\StringHelper.cs" />
+    <Compile Include="Support\StringInterner.cs" />
+    <Compile Include="Util\TimSorter.cs" />
+    <Compile Include="Util\ToStringUtils.cs" />
+    <Compile Include="Util\UnicodeUtil.cs" />
+    <Compile Include="Util\Version.cs" />
+    <Compile Include="Util\VirtualMethod.cs" />
+    <Compile Include="Util\WAH8DocIdSet.cs" />
+    <Compile Include="Util\WeakIdentityMap.cs" />
+    <Compile Include="..\CommonAssemblyInfo.cs">
+      <Link>Properties\CommonAssemblyInfo.cs</Link>
+    </Compile>
   </ItemGroup>
 
 </Project>

Reply via email to