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

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


The following commit(s) were added to refs/heads/master by this push:
     new 54505e896 Remove unnecessary use of NoInlining and add traceability 
for valid uses, #931 (#1134)
54505e896 is described below

commit 54505e8964c112119b83adf8bf9163d687765cbe
Author: Paul Irwin <[email protected]>
AuthorDate: Mon Mar 10 09:28:45 2025 -0600

    Remove unnecessary use of NoInlining and add traceability for valid uses, 
#931 (#1134)
    
    * Use nameof for traceability to StackTraceHelper
    
    * Remove unnecessary NoInlining and add traceability, #931
---
 src/Lucene.Net.Misc/Util/Fst/ListOfOutputs.cs       | 13 +++++--------
 .../Util/Fst/UpToTwoPositiveIntOutputs.cs           |  1 -
 .../Codecs/Lucene3x/PreFlexRWPostingsFormat.cs      |  2 +-
 .../Codecs/Lucene3x/PreFlexRWTermVectorsFormat.cs   | 11 ++++++-----
 .../Store/MockDirectoryWrapper.cs                   |  6 +++---
 .../Index/TestConcurrentMergeScheduler.cs           | 12 ++++++------
 src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs |  6 +++---
 .../Index/TestIndexWriterExceptions.cs              | 14 ++++++++------
 src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs |  2 +-
 .../Index/TestIndexWriterWithThreads.cs             | 10 +++++-----
 src/Lucene.Net.Tests/TestMergeSchedulerExternal.cs  |  4 ++--
 .../Compressing/CompressingStoredFieldsWriter.cs    |  4 ----
 .../Compressing/CompressingTermVectorsWriter.cs     |  4 ----
 src/Lucene.Net/Codecs/FieldsConsumer.cs             |  7 ++-----
 .../Codecs/Lucene40/Lucene40LiveDocsFormat.cs       |  4 ++--
 .../Codecs/Lucene40/Lucene40StoredFieldsWriter.cs   |  2 --
 .../Codecs/Lucene40/Lucene40TermVectorsWriter.cs    |  3 ---
 src/Lucene.Net/Codecs/PostingsConsumer.cs           |  5 +----
 src/Lucene.Net/Codecs/StoredFieldsWriter.cs         |  2 --
 src/Lucene.Net/Codecs/TermVectorsWriter.cs          |  2 --
 src/Lucene.Net/Codecs/TermsConsumer.cs              |  4 +---
 src/Lucene.Net/Index/BinaryDocValuesFieldUpdates.cs |  5 +----
 src/Lucene.Net/Index/BinaryDocValuesWriter.cs       |  2 --
 src/Lucene.Net/Index/BufferedUpdatesStream.cs       |  4 ++--
 src/Lucene.Net/Index/ConcurrentMergeScheduler.cs    |  6 ++----
 src/Lucene.Net/Index/DocFieldProcessor.cs           |  7 +++----
 src/Lucene.Net/Index/DocInverter.cs                 |  6 +-----
 src/Lucene.Net/Index/DocInverterPerField.cs         |  4 +---
 src/Lucene.Net/Index/DocValuesProcessor.cs          |  3 ---
 src/Lucene.Net/Index/DocumentsWriter.cs             |  5 +----
 src/Lucene.Net/Index/DocumentsWriterPerThread.cs    |  8 +++-----
 src/Lucene.Net/Index/FreqProxTermsWriter.cs         |  2 --
 src/Lucene.Net/Index/FreqProxTermsWriterPerField.cs |  2 +-
 src/Lucene.Net/Index/IndexWriter.cs                 | 21 ++++++++++-----------
 src/Lucene.Net/Index/MergePolicy.cs                 |  3 ---
 src/Lucene.Net/Index/NormsConsumer.cs               |  2 --
 src/Lucene.Net/Index/NormsConsumerPerField.cs       |  2 --
 .../Index/NumericDocValuesFieldUpdates.cs           |  4 +---
 src/Lucene.Net/Index/NumericDocValuesWriter.cs      |  2 --
 .../Index/PersistentSnapshotDeletionPolicy.cs       |  4 ++--
 src/Lucene.Net/Index/ReadersAndUpdates.cs           |  7 +++----
 src/Lucene.Net/Index/SegmentInfos.cs                |  8 ++++----
 src/Lucene.Net/Index/SegmentMerger.cs               |  4 ++--
 src/Lucene.Net/Index/SerialMergeScheduler.cs        |  4 +---
 src/Lucene.Net/Index/SortedDocValuesWriter.cs       |  2 --
 src/Lucene.Net/Index/SortedSetDocValuesWriter.cs    |  2 --
 src/Lucene.Net/Index/StoredFieldsProcessor.cs       |  7 +------
 src/Lucene.Net/Index/TermVectorsConsumer.cs         |  7 ++-----
 src/Lucene.Net/Index/TermVectorsConsumerPerField.cs |  1 -
 src/Lucene.Net/Index/TermsHash.cs                   |  8 ++------
 src/Lucene.Net/Index/TermsHashPerField.cs           |  2 --
 src/Lucene.Net/Index/TwoStoredFieldsConsumers.cs    |  4 ----
 src/Lucene.Net/Search/TopDocs.cs                    |  3 ---
 src/Lucene.Net/Store/BufferedChecksum.cs            |  4 +---
 src/Lucene.Net/Store/BufferedIndexOutput.cs         |  4 +---
 src/Lucene.Net/Store/CompoundFileWriter.cs          |  1 -
 src/Lucene.Net/Store/FSDirectory.cs                 |  2 --
 src/Lucene.Net/Store/RAMOutputStream.cs             |  2 --
 src/Lucene.Net/Store/RateLimitedIndexOutput.cs      |  4 +---
 .../Support/ExceptionHandling/StackTraceHelper.cs   |  5 +++++
 src/Lucene.Net/Support/IO/SafeTextWriterWrapper.cs  |  2 --
 src/Lucene.Net/Support/Index/TaskMergeScheduler.cs  | 17 +++++++----------
 src/Lucene.Net/Util/Fst/NoOutputs.cs                |  1 -
 src/Lucene.Net/Util/Fst/Outputs.cs                  |  8 +++-----
 src/Lucene.Net/Util/Packed/BlockPackedWriter.cs     |  4 +---
 .../Util/Packed/MonotonicBlockPackedWriter.cs       |  5 ++---
 src/Lucene.Net/Util/Packed/PackedDataOutput.cs      |  2 --
 src/Lucene.Net/Util/Packed/PackedWriter.cs          |  5 +----
 68 files changed, 111 insertions(+), 224 deletions(-)

diff --git a/src/Lucene.Net.Misc/Util/Fst/ListOfOutputs.cs 
b/src/Lucene.Net.Misc/Util/Fst/ListOfOutputs.cs
index 9a713ccda..39e3690ee 100644
--- a/src/Lucene.Net.Misc/Util/Fst/ListOfOutputs.cs
+++ b/src/Lucene.Net.Misc/Util/Fst/ListOfOutputs.cs
@@ -2,8 +2,6 @@
 using Lucene.Net.Store;
 using System.Collections;
 using System.Collections.Generic;
-using System.Diagnostics;
-using System.Runtime.CompilerServices;
 using System.Text;
 using JCG = J2N.Collections.Generic;
 
@@ -34,11 +32,11 @@ namespace Lucene.Net.Util.Fst
     /// output by calling <see cref="Builder{T}.Add(Int32sRef,T)"/> multiple
     /// times.  The builder will then combine the outputs using
     /// the <see cref="Outputs{T}.Merge(T,T)"/> method.
-    /// 
+    ///
     /// <para>The resulting FST may not be minimal when an input has
     /// more than one output, as this requires pushing all
     /// multi-output values to a final state.
-    /// 
+    ///
     /// </para>
     /// <para>NOTE: the only way to create multiple outputs is to
     /// add the same input to the FST multiple times in a row.  This is
@@ -48,11 +46,11 @@ namespace Lucene.Net.Util.Fst
     /// <see cref="UpToTwoPositiveInt64Outputs"/> instead since it stores
     /// the outputs more compactly (by stealing a bit from each
     /// long value).
-    /// 
+    ///
     /// </para>
     /// <para>NOTE: this cannot wrap itself (ie you cannot make an
     /// FST with List&lt;List&lt;Object&gt;&gt; outputs using this).
-    /// 
+    ///
     /// @lucene.experimental
     /// </para>
     /// </summary>
@@ -176,7 +174,6 @@ public override string OutputToString(object output)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override object Merge(object first, object second)
         {
             IList<T> outputList = new JCG.List<T>();
@@ -224,4 +221,4 @@ public IList<T> AsList(object output)
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net.Misc/Util/Fst/UpToTwoPositiveIntOutputs.cs 
b/src/Lucene.Net.Misc/Util/Fst/UpToTwoPositiveIntOutputs.cs
index 5436f8af1..78efab649 100644
--- a/src/Lucene.Net.Misc/Util/Fst/UpToTwoPositiveIntOutputs.cs
+++ b/src/Lucene.Net.Misc/Util/Fst/UpToTwoPositiveIntOutputs.cs
@@ -295,7 +295,6 @@ public override string OutputToString(object output)
             return output.ToString();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override object Merge(object first, object second)
         {
             if (Debugging.AssertsEnabled)
diff --git 
a/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWPostingsFormat.cs 
b/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWPostingsFormat.cs
index 468f6dbe3..517953d46 100644
--- a/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWPostingsFormat.cs
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWPostingsFormat.cs
@@ -67,7 +67,7 @@ protected override bool SortTermsByUnicode
 
                     // LUCENENET specific: for these to work in release mode, 
we have added [MethodImpl(MethodImplOptions.NoInlining)]
                     // to each possible target of the StackTraceHelper. If 
these change, so must the attribute on the target methods.
-                    if (StackTraceHelper.DoesStackTraceContainMethod("Merge"))
+                    if 
(StackTraceHelper.DoesStackTraceContainMethod(nameof(SegmentMerger.Merge)))
                     {
                         unicodeSortOrder = false;
                         if (LuceneTestCase.Verbose)
diff --git 
a/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWTermVectorsFormat.cs 
b/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWTermVectorsFormat.cs
index a7b726a4f..389b1474d 100644
--- a/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWTermVectorsFormat.cs
+++ b/src/Lucene.Net.TestFramework/Codecs/Lucene3x/PreFlexRWTermVectorsFormat.cs
@@ -54,11 +54,12 @@ protected internal override bool SortTermsByUnicode()
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
                 if (StackTraceHelper.DoesStackTraceContainMethod("Merge"))
                 {
-                        unicodeSortOrder = false;
-                        if (LuceneTestCase.Verbose)
-                        {
-                            Console.WriteLine("NOTE: PreFlexRW codec: forcing 
legacy UTF16 vector term sort order");
-                        }
+                    // LUCENENET TODO: This does not seem to be hit, unused?
+                    unicodeSortOrder = false;
+                    if (LuceneTestCase.Verbose)
+                    {
+                        Console.WriteLine("NOTE: PreFlexRW codec: forcing 
legacy UTF16 vector term sort order");
+                    }
                 }
 
                 return unicodeSortOrder;
diff --git a/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs 
b/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs
index e5acaba0b..57a77d5a3 100644
--- a/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs
+++ b/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs
@@ -237,7 +237,7 @@ private bool MustSync()
             return @delegate is NRTCachingDirectory;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions,
         public override void Sync(ICollection<string> names)
         {
             UninterruptableMonitor.Enter(this);
@@ -519,7 +519,7 @@ internal virtual void MaybeThrowIOExceptionOnOpen(string 
name)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         public override void DeleteFile(string name)
         {
             UninterruptableMonitor.Enter(this);
@@ -576,7 +576,7 @@ private void MaybeYield()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         private void DeleteFile(string name, bool forced)
         {
             UninterruptableMonitor.Enter(this);
diff --git a/src/Lucene.Net.Tests/Index/TestConcurrentMergeScheduler.cs 
b/src/Lucene.Net.Tests/Index/TestConcurrentMergeScheduler.cs
index 3cd7f4300..e4198bdd2 100644
--- a/src/Lucene.Net.Tests/Index/TestConcurrentMergeScheduler.cs
+++ b/src/Lucene.Net.Tests/Index/TestConcurrentMergeScheduler.cs
@@ -66,9 +66,9 @@ public override void Eval(MockDirectoryWrapper dir)
                 {
                     // LUCENENET specific: for these to work in release mode, 
we have added [MethodImpl(MethodImplOptions.NoInlining)]
                     // to each possible target of the StackTraceHelper. If 
these change, so must the attribute on the target methods.
-                    bool isDoFlush = 
StackTraceHelper.DoesStackTraceContainMethod("Flush");
-                    bool isClose = 
StackTraceHelper.DoesStackTraceContainMethod("Close") ||
-                        
StackTraceHelper.DoesStackTraceContainMethod("Dispose");
+                    bool isDoFlush = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(DocumentsWriterPerThread.Flush));
+                    bool isClose = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.Close)) || // 
LUCENENET NOTE: Close is aggressively inlined, so likely won't hit this case, 
but would hit Dispose
+                        
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.Dispose));
 
                     if (isDoFlush && !isClose && Random.NextBoolean())
                     {
@@ -334,7 +334,7 @@ public ConcurrentMergeSchedulerAnonymousClass(int 
maxMergeCount, CountdownEvent
                 this.failed = failed;
             }
 
-            protected override void DoMerge(MergePolicy.OneMerge merge)
+            protected internal override void DoMerge(MergePolicy.OneMerge 
merge)
             {
                 try
                 {
@@ -385,7 +385,7 @@ public TrackingCMS()
                 SetMaxMergesAndThreads(5, 5);
             }
 
-            protected override void DoMerge(MergePolicy.OneMerge merge)
+            protected internal override void DoMerge(MergePolicy.OneMerge 
merge)
             {
                 totMergedBytes += merge.TotalBytesSize;
                 base.DoMerge(merge);
@@ -432,7 +432,7 @@ public override void Eval(MockDirectoryWrapper dir)
             {
                 // LUCENENET specific: for these to work in release mode, we 
have added [MethodImpl(MethodImplOptions.NoInlining)]
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
-                if (StackTraceHelper.DoesStackTraceContainMethod("DoMerge"))
+                if 
(StackTraceHelper.DoesStackTraceContainMethod(nameof(ConcurrentMergeScheduler.DoMerge)))
                 {
                     throw new IOException("now failing during merge");
                 }
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs
index 197935fa9..52cb20810 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs
@@ -975,8 +975,8 @@ public override void Eval(MockDirectoryWrapper dir)
                     // LUCENENET specific: for these to work in release mode, 
we have added [MethodImpl(MethodImplOptions.NoInlining)]
                     // to each possible target of the StackTraceHelper. If 
these change, so must the attribute on the target methods.
                     bool seen =
-                        
StackTraceHelper.DoesStackTraceContainMethod("ApplyDeletesAndUpdates") ||
-                        
StackTraceHelper.DoesStackTraceContainMethod("SlowFileExists");
+                        
StackTraceHelper.DoesStackTraceContainMethod(nameof(BufferedUpdatesStream.ApplyDeletesAndUpdates))
 ||
+                        
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.SlowFileExists));
 
                     if (!seen)
                     {
@@ -994,7 +994,7 @@ public override void Eval(MockDirectoryWrapper dir)
                 {
                     // LUCENENET specific: for these to work in release mode, 
we have added [MethodImpl(MethodImplOptions.NoInlining)]
                     // to each possible target of the StackTraceHelper. If 
these change, so must the attribute on the target methods.
-                    if 
(StackTraceHelper.DoesStackTraceContainMethod("ApplyDeletesAndUpdates"))
+                    if 
(StackTraceHelper.DoesStackTraceContainMethod(nameof(BufferedUpdatesStream.ApplyDeletesAndUpdates)))
                     {
                         if (Verbose)
                         {
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
index e3b6f0064..b034429e6 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs
@@ -1,6 +1,8 @@
 using J2N.Threading;
 using J2N.Threading.Atomic;
 using Lucene.Net.Analysis;
+using Lucene.Net.Codecs;
+using Lucene.Net.Codecs.Lucene40;
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Documents;
 using Lucene.Net.Index.Extensions;
@@ -699,7 +701,7 @@ public override void Eval(MockDirectoryWrapper dir)
                     // which will always be true if the first case is true. 
The name of the variable implies it checking for "Append"
                     // but that is not a method on FreqProxTermsWriterPerField.
                     bool sawAppend = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(FreqProxTermsWriterPerField),
 nameof(FreqProxTermsWriterPerField.Flush));
-                    bool sawFlush = 
StackTraceHelper.DoesStackTraceContainMethod("Flush");
+                    bool sawFlush = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(FreqProxTermsWriterPerField.Flush));
 
                     if (sawAppend && sawFlush && count++ >= 30)
                     {
@@ -1810,7 +1812,7 @@ public override IndexInput OpenInput(string name, 
IOContext context)
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
                 if (doFail
                     && name.StartsWith("segments_", StringComparison.Ordinal)
-                    && StackTraceHelper.DoesStackTraceContainMethod("Read"))
+                    && 
StackTraceHelper.DoesStackTraceContainMethod(nameof(SegmentInfos.Read)))
                 {
                     throw UnsupportedOperationException.Create("expected UOE");
                 }
@@ -2349,9 +2351,9 @@ public override void Eval(MockDirectoryWrapper dir)
 
                 // LUCENENET specific: for these to work in release mode, we 
have added [MethodImpl(MethodImplOptions.NoInlining)]
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
-                bool sawSeal = 
StackTraceHelper.DoesStackTraceContainMethod("SealFlushedSegment");
-                bool sawWrite = 
StackTraceHelper.DoesStackTraceContainMethod("WriteLiveDocs")
-                        || 
StackTraceHelper.DoesStackTraceContainMethod("WriteFieldUpdates");
+                bool sawSeal = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(DocumentsWriterPerThread.SealFlushedSegment));
+                bool sawWrite = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(Lucene40LiveDocsFormat.WriteLiveDocs))
+                        || 
StackTraceHelper.DoesStackTraceContainMethod(nameof(ReadersAndUpdates.WriteFieldUpdates));
 
                 // Don't throw exc if we are "flushing", else
                 // the segment is aborted and docs are lost:
@@ -2527,7 +2529,7 @@ public override void Eval(MockDirectoryWrapper dir)
             {
                 // LUCENENET specific: for these to work in release mode, we 
have added [MethodImpl(MethodImplOptions.NoInlining)]
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
-                bool maybeFail = 
StackTraceHelper.DoesStackTraceContainMethod("RollbackInternal");
+                bool maybeFail = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.RollbackInternal));
 
                 if (maybeFail && Random.Next(10) == 0)
                 {
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs
index 0bed9be3e..6b5410057 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs
@@ -1379,7 +1379,7 @@ public override void Eval(MockDirectoryWrapper dir)
             {
                 // LUCENENET specific: for these to work in release mode, we 
have added [MethodImpl(MethodImplOptions.NoInlining)]
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
-                if (shouldFail && 
StackTraceHelper.DoesStackTraceContainMethod("GetReadOnlyClone"))
+                if (shouldFail && 
StackTraceHelper.DoesStackTraceContainMethod(nameof(ReadersAndUpdates.GetReadOnlyClone)))
                 {
                     if (Verbose)
                     {
diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs 
b/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs
index 2a6b6f124..671def338 100644
--- a/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs
+++ b/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs
@@ -433,11 +433,11 @@ public override void Eval(MockDirectoryWrapper dir)
                 {
                     // LUCENENET specific: for these to work in release mode, 
we have added [MethodImpl(MethodImplOptions.NoInlining)]
                     // to each possible target of the StackTraceHelper. If 
these change, so must the attribute on the target methods.
-                    bool sawAbortOrFlushDoc = 
StackTraceHelper.DoesStackTraceContainMethod("Abort")
-                        || 
StackTraceHelper.DoesStackTraceContainMethod("FinishDocument");
-                    bool sawClose = 
StackTraceHelper.DoesStackTraceContainMethod("Close")
-                        || 
StackTraceHelper.DoesStackTraceContainMethod("Dispose");
-                    bool sawMerge = 
StackTraceHelper.DoesStackTraceContainMethod("Merge");
+                    bool sawAbortOrFlushDoc = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(DocumentsWriterPerThread.Abort))
+                        || 
StackTraceHelper.DoesStackTraceContainMethod(nameof(DocFieldProcessor.FinishDocument));
+                    bool sawClose = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.Close))
+                        || 
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.Dispose));
+                    bool sawMerge = 
StackTraceHelper.DoesStackTraceContainMethod(nameof(IndexWriter.Merge));
 
                     if (sawAbortOrFlushDoc && !sawClose && !sawMerge)
                     {
diff --git a/src/Lucene.Net.Tests/TestMergeSchedulerExternal.cs 
b/src/Lucene.Net.Tests/TestMergeSchedulerExternal.cs
index 276302044..adec5b4e1 100644
--- a/src/Lucene.Net.Tests/TestMergeSchedulerExternal.cs
+++ b/src/Lucene.Net.Tests/TestMergeSchedulerExternal.cs
@@ -84,7 +84,7 @@ protected override void HandleMergeException(Exception t)
                 outerInstance.excCalled = true;
             }
 
-            protected override void DoMerge(MergePolicy.OneMerge merge)
+            protected internal override void DoMerge(MergePolicy.OneMerge 
merge)
             {
                 outerInstance.mergeCalled = true;
                 base.DoMerge(merge);
@@ -97,7 +97,7 @@ public override void Eval(MockDirectoryWrapper dir)
             {
                 // LUCENENET specific: for these to work in release mode, we 
have added [MethodImpl(MethodImplOptions.NoInlining)]
                 // to each possible target of the StackTraceHelper. If these 
change, so must the attribute on the target methods.
-                if (StackTraceHelper.DoesStackTraceContainMethod("DoMerge"))
+                if 
(StackTraceHelper.DoesStackTraceContainMethod(nameof(ConcurrentMergeScheduler.DoMerge)))
                 {
                     throw new IOException("now failing during merge");
                 }
diff --git a/src/Lucene.Net/Codecs/Compressing/CompressingStoredFieldsWriter.cs 
b/src/Lucene.Net/Codecs/Compressing/CompressingStoredFieldsWriter.cs
index bb39272ef..1f59da7f8 100644
--- a/src/Lucene.Net/Codecs/Compressing/CompressingStoredFieldsWriter.cs
+++ b/src/Lucene.Net/Codecs/Compressing/CompressingStoredFieldsWriter.cs
@@ -166,7 +166,6 @@ public override void StartDocument(int numStoredFields)
             ++numBufferedDocs;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void FinishDocument()
         {
             endOffsets[numBufferedDocs - 1] = bufferedDocs.Length;
@@ -240,7 +239,6 @@ private bool TriggerFlush()
             return bufferedDocs.Length >= chunkSize || numBufferedDocs >= 
MAX_DOCUMENTS_PER_CHUNK; // chunks of at least chunkSize bytes
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         private void Flush()
         {
             indexWriter.WriteIndex(numBufferedDocs, fieldsStream.Position); // 
LUCENENET specific: Renamed from getFilePointer() to match FileStream
@@ -363,7 +361,6 @@ public override void WriteField(FieldInfo info, 
IIndexableField field)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             IOUtils.DisposeWhileHandlingException(this);
@@ -389,7 +386,6 @@ public override void Finish(FieldInfos fis, int numDocs)
             if (Debugging.AssertsEnabled) Debugging.Assert(bufferedDocs.Length 
== 0);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override int Merge(MergeState mergeState)
         {
             int docCount = 0;
diff --git a/src/Lucene.Net/Codecs/Compressing/CompressingTermVectorsWriter.cs 
b/src/Lucene.Net/Codecs/Compressing/CompressingTermVectorsWriter.cs
index e3fd67c2d..8d755c51a 100644
--- a/src/Lucene.Net/Codecs/Compressing/CompressingTermVectorsWriter.cs
+++ b/src/Lucene.Net/Codecs/Compressing/CompressingTermVectorsWriter.cs
@@ -318,7 +318,6 @@ protected override void Dispose(bool disposing)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             IOUtils.DisposeWhileHandlingException(this);
@@ -331,7 +330,6 @@ public override void StartDocument(int numVectorFields)
             curDoc = AddDocData(numVectorFields);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void FinishDocument()
         {
             // append the payload bytes of the doc after its terms
@@ -390,7 +388,6 @@ private bool TriggerFlush()
             return termSuffixes.Length >= chunkSize || pendingDocs.Count >= 
MAX_DOCUMENTS_PER_CHUNK;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         private void Flush()
         {
             int chunkDocs = pendingDocs.Count;
@@ -879,7 +876,6 @@ public override void AddProx(int numProx, DataInput 
positions, DataInput offsets
             curField.totalPositions += numProx;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override int Merge(MergeState mergeState)
         {
             int docCount = 0;
diff --git a/src/Lucene.Net/Codecs/FieldsConsumer.cs 
b/src/Lucene.Net/Codecs/FieldsConsumer.cs
index 9ca4f1870..ba3e432ae 100644
--- a/src/Lucene.Net/Codecs/FieldsConsumer.cs
+++ b/src/Lucene.Net/Codecs/FieldsConsumer.cs
@@ -1,7 +1,5 @@
 using Lucene.Net.Diagnostics;
 using System;
-using System.Diagnostics;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Codecs
 {
@@ -77,11 +75,10 @@ public void Dispose()
         /// <summary>
         /// Called during merging to merge all <see cref="Fields"/> from
         /// sub-readers.  this must recurse to merge all postings
-        /// (terms, docs, positions, etc.).  A 
+        /// (terms, docs, positions, etc.).  A
         /// <see cref="PostingsFormat"/> can override this default
         /// implementation to do its own merging.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual void Merge(MergeState mergeState, Fields fields)
         {
             foreach (string field in fields)
@@ -97,4 +94,4 @@ public virtual void Merge(MergeState mergeState, Fields 
fields)
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Codecs/Lucene40/Lucene40LiveDocsFormat.cs 
b/src/Lucene.Net/Codecs/Lucene40/Lucene40LiveDocsFormat.cs
index 38209fa31..23865a035 100644
--- a/src/Lucene.Net/Codecs/Lucene40/Lucene40LiveDocsFormat.cs
+++ b/src/Lucene.Net/Codecs/Lucene40/Lucene40LiveDocsFormat.cs
@@ -100,7 +100,7 @@ public override IBits ReadLiveDocs(Directory dir, 
SegmentCommitInfo info, IOCont
             return liveDocs;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions, TestIndexWriterOnDiskFull
         public override void WriteLiveDocs(IMutableBits bits, Directory dir, 
SegmentCommitInfo info, int newDelCount, IOContext context)
         {
             string filename = 
IndexFileNames.FileNameFromGeneration(info.Info.Name, DELETES_EXTENSION, 
info.NextDelGen);
@@ -122,4 +122,4 @@ public override void Files(SegmentCommitInfo info, 
ICollection<string> files)
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Codecs/Lucene40/Lucene40StoredFieldsWriter.cs 
b/src/Lucene.Net/Codecs/Lucene40/Lucene40StoredFieldsWriter.cs
index e3838768e..dec4edf86 100644
--- a/src/Lucene.Net/Codecs/Lucene40/Lucene40StoredFieldsWriter.cs
+++ b/src/Lucene.Net/Codecs/Lucene40/Lucene40StoredFieldsWriter.cs
@@ -147,7 +147,6 @@ protected override void Dispose(bool disposing)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             try
@@ -288,7 +287,6 @@ public override void Finish(FieldInfos fis, int numDocs)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override int Merge(MergeState mergeState)
         {
             int docCount = 0;
diff --git a/src/Lucene.Net/Codecs/Lucene40/Lucene40TermVectorsWriter.cs 
b/src/Lucene.Net/Codecs/Lucene40/Lucene40TermVectorsWriter.cs
index 78ddd01ce..b823edfa3 100644
--- a/src/Lucene.Net/Codecs/Lucene40/Lucene40TermVectorsWriter.cs
+++ b/src/Lucene.Net/Codecs/Lucene40/Lucene40TermVectorsWriter.cs
@@ -141,7 +141,6 @@ public override void StartField(FieldInfo info, int 
numTerms, bool positions, bo
             tvf.WriteByte((byte)bits);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void FinishDocument()
         {
             if (Debugging.AssertsEnabled) Debugging.Assert(fieldCount == 
numVectorFields);
@@ -327,7 +326,6 @@ private void WritePosition(int delta, BytesRef payload)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             try
@@ -372,7 +370,6 @@ private void AddRawDocuments(Lucene40TermVectorsReader 
reader, int[] tvdLengths,
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override int Merge(MergeState mergeState)
         {
             // Used for bulk-reading raw bytes for term vectors
diff --git a/src/Lucene.Net/Codecs/PostingsConsumer.cs 
b/src/Lucene.Net/Codecs/PostingsConsumer.cs
index d4d6d5ef7..835bca462 100644
--- a/src/Lucene.Net/Codecs/PostingsConsumer.cs
+++ b/src/Lucene.Net/Codecs/PostingsConsumer.cs
@@ -1,7 +1,5 @@
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Index;
-using System.Diagnostics;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Codecs
 {
@@ -86,7 +84,6 @@ protected PostingsConsumer()
         /// Default merge impl: append documents, mapping around
         /// deletes.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual TermStats Merge(MergeState mergeState, IndexOptions 
indexOptions, DocsEnum postings, FixedBitSet visitedDocs)
         {
             int df = 0;
@@ -177,4 +174,4 @@ public virtual TermStats Merge(MergeState mergeState, 
IndexOptions indexOptions,
             return new TermStats(df, indexOptions == IndexOptions.DOCS_ONLY ? 
-1 : totTF);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Codecs/StoredFieldsWriter.cs 
b/src/Lucene.Net/Codecs/StoredFieldsWriter.cs
index cb652d48f..195424326 100644
--- a/src/Lucene.Net/Codecs/StoredFieldsWriter.cs
+++ b/src/Lucene.Net/Codecs/StoredFieldsWriter.cs
@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Codecs
 {
@@ -98,7 +97,6 @@ public virtual void FinishDocument()
         /// Implementations can override this method for more sophisticated
         /// merging (bulk-byte copying, etc).
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual int Merge(MergeState mergeState)
         {
             int docCount = 0;
diff --git a/src/Lucene.Net/Codecs/TermVectorsWriter.cs 
b/src/Lucene.Net/Codecs/TermVectorsWriter.cs
index 688bc50a9..8d2605dec 100644
--- a/src/Lucene.Net/Codecs/TermVectorsWriter.cs
+++ b/src/Lucene.Net/Codecs/TermVectorsWriter.cs
@@ -2,7 +2,6 @@
 using Lucene.Net.Diagnostics;
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Codecs
 {
@@ -217,7 +216,6 @@ public virtual void AddProx(int numProx, DataInput 
positions, DataInput offsets)
         /// Implementations can override this method for more sophisticated
         /// merging (bulk-byte copying, etc).
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual int Merge(MergeState mergeState)
         {
             int docCount = 0;
diff --git a/src/Lucene.Net/Codecs/TermsConsumer.cs 
b/src/Lucene.Net/Codecs/TermsConsumer.cs
index 35f6a09df..d790fe1cf 100644
--- a/src/Lucene.Net/Codecs/TermsConsumer.cs
+++ b/src/Lucene.Net/Codecs/TermsConsumer.cs
@@ -1,7 +1,6 @@
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Index;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Codecs
 {
@@ -96,7 +95,6 @@ protected TermsConsumer()
 
         /// <summary>
         /// Default merge impl. </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual void Merge(MergeState mergeState, IndexOptions 
indexOptions, TermsEnum termsEnum)
         {
             BytesRef term;
@@ -246,4 +244,4 @@ public virtual void Merge(MergeState mergeState, 
IndexOptions indexOptions, Term
             Finish(indexOptions == IndexOptions.DOCS_ONLY ? -1 : 
sumTotalTermFreq, sumDocFreq, visitedDocs.Cardinality);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/BinaryDocValuesFieldUpdates.cs 
b/src/Lucene.Net/Index/BinaryDocValuesFieldUpdates.cs
index 7a1cc3050..e6e571d8e 100644
--- a/src/Lucene.Net/Index/BinaryDocValuesFieldUpdates.cs
+++ b/src/Lucene.Net/Index/BinaryDocValuesFieldUpdates.cs
@@ -1,6 +1,4 @@
 using Lucene.Net.Documents;
-using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -250,7 +248,6 @@ protected override int Compare(int i, int j)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Merge(DocValuesFieldUpdates other)
         {
             BinaryDocValuesFieldUpdates otherUpdates = 
(BinaryDocValuesFieldUpdates)other;
@@ -283,4 +280,4 @@ public override bool Any()
             return size > 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/BinaryDocValuesWriter.cs 
b/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
index 3b4ff5a03..52b2e7a22 100644
--- a/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/BinaryDocValuesWriter.cs
@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -122,7 +121,6 @@ public override void Finish(int maxDoc)
         {
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state, DocValuesConsumer 
dvConsumer)
         {
             int maxDoc = state.SegmentInfo.DocCount;
diff --git a/src/Lucene.Net/Index/BufferedUpdatesStream.cs 
b/src/Lucene.Net/Index/BufferedUpdatesStream.cs
index f95ba7094..5336bb847 100644
--- a/src/Lucene.Net/Index/BufferedUpdatesStream.cs
+++ b/src/Lucene.Net/Index/BufferedUpdatesStream.cs
@@ -177,7 +177,7 @@ internal ApplyDeletesResult(bool anyDeletes, long gen, 
IList<SegmentCommitInfo>
         /// actual deleted docIDs in the liveDocs <see 
cref="Util.IMutableBits"/> for
         /// each <see cref="SegmentReader"/>.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterDelete
         public virtual ApplyDeletesResult 
ApplyDeletesAndUpdates(IndexWriter.ReaderPool readerPool, 
IList<SegmentCommitInfo> infos)
         {
             UninterruptableMonitor.Enter(this);
@@ -756,4 +756,4 @@ private bool CheckDeleteStats()
             return true;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/ConcurrentMergeScheduler.cs 
b/src/Lucene.Net/Index/ConcurrentMergeScheduler.cs
index c1f55341c..4b18235ae 100644
--- a/src/Lucene.Net/Index/ConcurrentMergeScheduler.cs
+++ b/src/Lucene.Net/Index/ConcurrentMergeScheduler.cs
@@ -4,7 +4,6 @@
 using System;
 using System.Collections.Generic;
 using System.Runtime.CompilerServices;
-using System.Security;
 using System.Text;
 using System.Threading;
 using JCG = J2N.Collections.Generic;
@@ -419,7 +418,6 @@ protected virtual int MergeThreadCount
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Merge(IndexWriter writer, MergeTrigger trigger, 
bool newMergesFound)
         {
             UninterruptableMonitor.Enter(this);
@@ -538,8 +536,8 @@ public override void Merge(IndexWriter writer, MergeTrigger 
trigger, bool newMer
 
         /// <summary>
         /// Does the actual merge, by calling <see 
cref="IndexWriter.Merge(MergePolicy.OneMerge)"/> </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
-        protected virtual void DoMerge(MergePolicy.OneMerge merge)
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestConcurrentMergeScheduler
+        protected internal virtual void DoMerge(MergePolicy.OneMerge merge) // 
LUCENENET: made protected internal for test access
         {
             m_writer.Merge(merge);
         }
diff --git a/src/Lucene.Net/Index/DocFieldProcessor.cs 
b/src/Lucene.Net/Index/DocFieldProcessor.cs
index 00a36d5bc..f7d27bca3 100644
--- a/src/Lucene.Net/Index/DocFieldProcessor.cs
+++ b/src/Lucene.Net/Index/DocFieldProcessor.cs
@@ -71,7 +71,7 @@ public DocFieldProcessor(DocumentsWriterPerThread docWriter, 
DocFieldConsumer co
             this.storedConsumer = storedConsumer;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterWithThreads
         public override void Flush(SegmentWriteState state)
         {
             IDictionary<string, DocFieldConsumerPerField> childFields = new 
Dictionary<string, DocFieldConsumerPerField>();
@@ -94,7 +94,6 @@ public override void Flush(SegmentWriteState state)
             infosWriter.Write(state.Directory, state.SegmentInfo.Name, "", 
state.FieldInfos, IOContext.DEFAULT);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             Exception th = null;
@@ -286,7 +285,7 @@ public override void ProcessDocument(FieldInfos.Builder 
fieldInfos)
 
         private static readonly IComparer<DocFieldProcessorPerField> 
fieldsComp = Comparer<DocFieldProcessorPerField>.Create((o1, o2) => 
o1.fieldInfo.Name.CompareToOrdinal(o2.fieldInfo.Name));
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterWithThreads
         internal override void FinishDocument()
         {
             try
@@ -299,4 +298,4 @@ internal override void FinishDocument()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/DocInverter.cs 
b/src/Lucene.Net/Index/DocInverter.cs
index fc1ffda82..8c893c2d5 100644
--- a/src/Lucene.Net/Index/DocInverter.cs
+++ b/src/Lucene.Net/Index/DocInverter.cs
@@ -1,5 +1,4 @@
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -39,7 +38,6 @@ public DocInverter(DocumentsWriterPerThread.DocState 
docState, InvertedDocConsum
             this.endConsumer = endConsumer;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void Flush(IDictionary<string, 
DocFieldConsumerPerField> fieldsToFlush, SegmentWriteState state)
         {
             IDictionary<string, InvertedDocConsumerPerField> 
childFieldsToFlush = new Dictionary<string, InvertedDocConsumerPerField>();
@@ -62,7 +60,6 @@ public override void StartDocument()
             endConsumer.StartDocument();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void FinishDocument()
         {
             // TODO: allow endConsumer.finishDocument to also return
@@ -71,7 +68,6 @@ public override void FinishDocument()
             consumer.FinishDocument();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void Abort()
         {
             try
@@ -89,4 +85,4 @@ public override DocFieldConsumerPerField AddField(FieldInfo 
fi)
             return new DocInverterPerField(this, fi);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/DocInverterPerField.cs 
b/src/Lucene.Net/Index/DocInverterPerField.cs
index 97e91f3bb..52c044705 100644
--- a/src/Lucene.Net/Index/DocInverterPerField.cs
+++ b/src/Lucene.Net/Index/DocInverterPerField.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Analysis.TokenAttributes;
 using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -49,7 +48,6 @@ public DocInverterPerField(DocInverter parent, FieldInfo 
fieldInfo)
             this.endConsumer = parent.endConsumer.AddField(this, fieldInfo);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void Abort()
         {
             try
@@ -250,4 +248,4 @@ public override void ProcessFields(IIndexableField[] 
fields, int count)
 
         internal override FieldInfo FieldInfo => fieldInfo;
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/DocValuesProcessor.cs 
b/src/Lucene.Net/Index/DocValuesProcessor.cs
index 9c94d4879..ddb6412ca 100644
--- a/src/Lucene.Net/Index/DocValuesProcessor.cs
+++ b/src/Lucene.Net/Index/DocValuesProcessor.cs
@@ -3,7 +3,6 @@
 using Lucene.Net.Documents.Extensions;
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -85,7 +84,6 @@ public override void AddField(int docID, IIndexableField 
field, FieldInfo fieldI
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state)
         {
             if (writers.Count > 0)
@@ -214,7 +212,6 @@ internal void AddNumericField(FieldInfo fieldInfo, int 
docID, long value)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             foreach (DocValuesWriter writer in writers.Values)
diff --git a/src/Lucene.Net/Index/DocumentsWriter.cs 
b/src/Lucene.Net/Index/DocumentsWriter.cs
index 64e833ee3..108016145 100644
--- a/src/Lucene.Net/Index/DocumentsWriter.cs
+++ b/src/Lucene.Net/Index/DocumentsWriter.cs
@@ -1,11 +1,9 @@
 using J2N.Threading.Atomic;
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Support.Threading;
-using Lucene.Net.Util;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 using System.Threading;
 using JCG = J2N.Collections.Generic;
 
@@ -45,7 +43,7 @@ namespace Lucene.Net.Index
     /// Each added document is passed to the <see cref="DocConsumer"/>,
     /// which in turn processes the document and interacts with
     /// other consumers in the indexing chain.  Certain
-    /// consumers, like <see cref="StoredFieldsConsumer"/> and 
+    /// consumers, like <see cref="StoredFieldsConsumer"/> and
     /// <see cref="TermVectorsConsumer"/>, digest a document and
     /// immediately write bytes to the "doc store" files (ie,
     /// they do not consume RAM per document, except while they
@@ -259,7 +257,6 @@ private void EnsureOpen()
         ///  currently buffered docs.  this resets our state,
         ///  discarding any docs added since last flush.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal void Abort(IndexWriter writer)
         {
             UninterruptableMonitor.Enter(this);
diff --git a/src/Lucene.Net/Index/DocumentsWriterPerThread.cs 
b/src/Lucene.Net/Index/DocumentsWriterPerThread.cs
index 6ac584bbd..eadcc5f9a 100644
--- a/src/Lucene.Net/Index/DocumentsWriterPerThread.cs
+++ b/src/Lucene.Net/Index/DocumentsWriterPerThread.cs
@@ -2,7 +2,6 @@
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Globalization;
 using System.Runtime.CompilerServices;
 using System.Threading;
@@ -156,7 +155,7 @@ internal FlushedSegment(SegmentCommitInfo segmentInfo, 
FieldInfos fieldInfos, Bu
         /// currently buffered docs.  this resets our state,
         /// discarding any docs added since last flush.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterWithThreads
         internal virtual void Abort(ISet<string> createdFiles)
         {
             //System.out.println(Thread.currentThread().getName() + ": now 
abort seg=" + segmentInfo.name);
@@ -419,7 +418,6 @@ public virtual int 
UpdateDocuments(IEnumerable<IEnumerable<IIndexableField>> doc
             return docCount;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         private void FinishDocument(Term delTerm)
         {
             /*
@@ -501,7 +499,7 @@ internal virtual FrozenBufferedUpdates PrepareFlush()
 
         /// <summary>
         /// Flush all pending docs to a new segment </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestConcurrentMergeScheduler
         internal virtual FlushedSegment Flush()
         {
             if (Debugging.AssertsEnabled)
@@ -601,7 +599,7 @@ internal virtual FlushedSegment Flush()
         /// Seals the <see cref="Index.SegmentInfo"/> for the new flushed 
segment and persists
         /// the deleted documents <see cref="IMutableBits"/>.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal virtual void SealFlushedSegment(FlushedSegment flushedSegment)
         {
             if (Debugging.AssertsEnabled) Debugging.Assert(flushedSegment != 
null);
diff --git a/src/Lucene.Net/Index/FreqProxTermsWriter.cs 
b/src/Lucene.Net/Index/FreqProxTermsWriter.cs
index b2b90203d..180d92116 100644
--- a/src/Lucene.Net/Index/FreqProxTermsWriter.cs
+++ b/src/Lucene.Net/Index/FreqProxTermsWriter.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Diagnostics;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
@@ -38,7 +37,6 @@ public override void Abort()
         // under the same FieldInfo together, up into TermsHash*.
         // Other writers would presumably share alot of this...
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(IDictionary<string, 
TermsHashConsumerPerField> fieldsToFlush, SegmentWriteState state)
         {
             // Gather all FieldData's that have postings, across all
diff --git a/src/Lucene.Net/Index/FreqProxTermsWriterPerField.cs 
b/src/Lucene.Net/Index/FreqProxTermsWriterPerField.cs
index de5a18a81..a7486ecca 100644
--- a/src/Lucene.Net/Index/FreqProxTermsWriterPerField.cs
+++ b/src/Lucene.Net/Index/FreqProxTermsWriterPerField.cs
@@ -394,7 +394,7 @@ internal override int BytesPerPosting()
         /// instances) found in this field and serialize them
         /// into a single RAM segment.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal void Flush(string fieldName, FieldsConsumer consumer, 
SegmentWriteState state)
         {
             if (!fieldInfo.IsIndexed)
diff --git a/src/Lucene.Net/Index/IndexWriter.cs 
b/src/Lucene.Net/Index/IndexWriter.cs
index be24ca1a1..69aacafeb 100644
--- a/src/Lucene.Net/Index/IndexWriter.cs
+++ b/src/Lucene.Net/Index/IndexWriter.cs
@@ -1091,7 +1091,7 @@ private void MessageState()
         /// <see cref="IndexWriter"/> for details.</para>
         /// </summary>
         /// <exception cref="IOException"> if there is a low-level IO error 
</exception>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestConcurrentMergeScheduler and TestIndexWriterWithThreads
         public void Dispose()
         {
             Dispose(disposing: true, waitForMerges: true);
@@ -1124,7 +1124,7 @@ public void Dispose()
         /// running merges to abort, wait until those merges have
         /// finished (which should be at most a few seconds), and
         /// then return. </param>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestConcurrentMergeScheduler and TestIndexWriterWithThreads
         [SuppressMessage("CodeQuality", "IDE0079:Remove unnecessary 
suppression", Justification = "This is a SonarCloud issue")]
         [SuppressMessage("Usage", "CA1816:Dispose methods should call 
SuppressFinalize", Justification = "This is Lucene's alternate path to 
Dispose() and we must suppress the finalizer here.")]
         [SuppressMessage("Usage", "S2953:Methods named \"Dispose\" should 
implement \"IDisposable.Dispose\"", Justification = "This is Lucene's alternate 
path to Dispose() and we must suppress the finalizer here.")]
@@ -1176,7 +1176,7 @@ public void Dispose(bool waitForMerges)
         /// <c>false</c> to release only unmanaged resources. </param>
         // LUCENENET specific - Added this overload to allow subclasses to 
dispose resoruces
         // in one place without also having to override Dispose(bool).
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestConcurrentMergeScheduler and TestIndexWriterWithThreads
         protected virtual void Dispose(bool disposing, bool waitForMerges)
         {
             if (disposing)
@@ -1185,8 +1185,8 @@ protected virtual void Dispose(bool disposing, bool 
waitForMerges)
             }
         }
 
-        [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        private void Close(bool waitForMerges)
+        [MethodImpl(MethodImplOptions.AggressiveInlining)] // LUCENENET NOTE: 
this will interfere with stack trace inspection in tests, but that case should 
be covered by Dispose above which is NoInlining
+        internal void Close(bool waitForMerges) // LUCENENET: made internal 
for test purposes
         {
             // Ensure that only one thread actually gets to do the
             // closing, and make sure no commit is also in progress:
@@ -2753,8 +2753,8 @@ public virtual void Rollback()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
-        private void RollbackInternal()
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
+        internal void RollbackInternal() // LUCENENET: made internal for test 
access
         {
             bool success = false;
 
@@ -4220,7 +4220,6 @@ private void FinishCommit()
         /// <param name="triggerMerge"> if <c>true</c>, we may merge segments 
(if
         /// deletes or docs were flushed) if necessary </param>
         /// <param name="applyAllDeletes"> whether pending deletes should also 
</param>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public void Flush(bool triggerMerge, bool applyAllDeletes)
         {
             // NOTE: this method cannot be sync'd because
@@ -4955,7 +4954,7 @@ private void HandleMergeException(Exception t, 
MergePolicy.OneMerge merge)
         /// <para/>
         /// @lucene.experimental
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterWithThreads
         public virtual void Merge(MergePolicy.OneMerge merge)
         {
             bool success = false;
@@ -6475,8 +6474,8 @@ internal interface IEvent
         /// (unlike <see cref="File.Exists(string)"/>) throws <see 
cref="IOException"/> if
         /// there's some unexpected error.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
-        private static bool SlowFileExists(Directory dir, string fileName)
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterDelete
+        internal static bool SlowFileExists(Directory dir, string fileName) // 
LUCENENET: made internal for test access
         {
             try
             {
diff --git a/src/Lucene.Net/Index/MergePolicy.cs 
b/src/Lucene.Net/Index/MergePolicy.cs
index c697bbad9..a3e49436b 100644
--- a/src/Lucene.Net/Index/MergePolicy.cs
+++ b/src/Lucene.Net/Index/MergePolicy.cs
@@ -6,13 +6,11 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Runtime.CompilerServices;
 #if FEATURE_SERIALIZABLE_EXCEPTIONS
 using System.ComponentModel;
 using System.Runtime.Serialization;
 #endif
 using System.Text;
-using System.Threading;
 using JCG = J2N.Collections.Generic;
 
 namespace Lucene.Net.Index
@@ -267,7 +265,6 @@ internal virtual Exception Exception
             /// before the merge is committed then the merge will
             /// not be committed.
             /// </summary>
-            [MethodImpl(MethodImplOptions.NoInlining)]
             internal virtual void Abort()
             {
                 UninterruptableMonitor.Enter(this);
diff --git a/src/Lucene.Net/Index/NormsConsumer.cs 
b/src/Lucene.Net/Index/NormsConsumer.cs
index 532b9c0f3..9861bda81 100644
--- a/src/Lucene.Net/Index/NormsConsumer.cs
+++ b/src/Lucene.Net/Index/NormsConsumer.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Diagnostics;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -39,7 +38,6 @@ internal override void Abort()
         {
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void Flush(IDictionary<string, 
InvertedDocEndConsumerPerField> fieldsToFlush, SegmentWriteState state)
         {
             bool success = false;
diff --git a/src/Lucene.Net/Index/NormsConsumerPerField.cs 
b/src/Lucene.Net/Index/NormsConsumerPerField.cs
index c9aaad74d..e91e7a5d1 100644
--- a/src/Lucene.Net/Index/NormsConsumerPerField.cs
+++ b/src/Lucene.Net/Index/NormsConsumerPerField.cs
@@ -1,6 +1,5 @@
 using J2N.Text;
 using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -58,7 +57,6 @@ internal override void Finish()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal void Flush(SegmentWriteState state, DocValuesConsumer 
normsWriter)
         {
             int docCount = state.SegmentInfo.DocCount;
diff --git a/src/Lucene.Net/Index/NumericDocValuesFieldUpdates.cs 
b/src/Lucene.Net/Index/NumericDocValuesFieldUpdates.cs
index eede36d05..27c4c2e67 100644
--- a/src/Lucene.Net/Index/NumericDocValuesFieldUpdates.cs
+++ b/src/Lucene.Net/Index/NumericDocValuesFieldUpdates.cs
@@ -3,7 +3,6 @@
 using Lucene.Net.Search;
 using Lucene.Net.Util;
 using Lucene.Net.Util.Packed;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -206,7 +205,6 @@ protected override int Compare(int i, int j)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Merge(DocValuesFieldUpdates other)
         {
             if (Debugging.AssertsEnabled) Debugging.Assert(other is 
NumericDocValuesFieldUpdates);
@@ -236,4 +234,4 @@ public override bool Any()
             return size > 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/NumericDocValuesWriter.cs 
b/src/Lucene.Net/Index/NumericDocValuesWriter.cs
index fad9732d0..8077b8ed7 100644
--- a/src/Lucene.Net/Index/NumericDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/NumericDocValuesWriter.cs
@@ -1,7 +1,6 @@
 using Lucene.Net.Util.Packed;
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -93,7 +92,6 @@ public override void Finish(int maxDoc)
         {
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state, DocValuesConsumer 
dvConsumer)
         {
             int maxDoc = state.SegmentInfo.DocCount;
diff --git a/src/Lucene.Net/Index/PersistentSnapshotDeletionPolicy.cs 
b/src/Lucene.Net/Index/PersistentSnapshotDeletionPolicy.cs
index 93e429dbc..07139e827 100644
--- a/src/Lucene.Net/Index/PersistentSnapshotDeletionPolicy.cs
+++ b/src/Lucene.Net/Index/PersistentSnapshotDeletionPolicy.cs
@@ -214,7 +214,7 @@ public virtual void Release(long gen)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestPersistentSnapshotDeletionPolicy
         internal void Persist()
         {
             UninterruptableMonitor.Enter(this);
@@ -403,4 +403,4 @@ private void LoadPriorSnapshots()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/ReadersAndUpdates.cs 
b/src/Lucene.Net/Index/ReadersAndUpdates.cs
index 8d4d04a5c..1c74995ad 100644
--- a/src/Lucene.Net/Index/ReadersAndUpdates.cs
+++ b/src/Lucene.Net/Index/ReadersAndUpdates.cs
@@ -326,7 +326,7 @@ public virtual void DropReaders()
         /// Returns a ref to a clone. NOTE: you should <see cref="DecRef()"/> 
the reader when you're
         /// done (ie do not call <see cref="IndexReader.Dispose()"/>).
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterReader
         public virtual SegmentReader GetReadOnlyClone(IOContext context)
         {
             UninterruptableMonitor.Enter(this);
@@ -452,7 +452,6 @@ public virtual void DropChanges()
         // _X_N updates files) to the directory; returns true if it wrote any 
file
         // and false if there were no new deletes or updates to write:
         // TODO (DVU_RENAME) to writeDeletesAndUpdates
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual bool WriteLiveDocs(Directory dir)
         {
             UninterruptableMonitor.Enter(this);
@@ -522,7 +521,7 @@ public virtual bool WriteLiveDocs(Directory dir)
         }
 
         // Writes field updates (new _X_N updates files) to the directory
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         public virtual void WriteFieldUpdates(Directory dir, 
DocValuesFieldUpdates.Container dvUpdates)
         {
             UninterruptableMonitor.Enter(this);
@@ -884,4 +883,4 @@ public override string ToString()
             return sb.ToString();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/SegmentInfos.cs 
b/src/Lucene.Net/Index/SegmentInfos.cs
index a6167f367..ac8acbd3d 100644
--- a/src/Lucene.Net/Index/SegmentInfos.cs
+++ b/src/Lucene.Net/Index/SegmentInfos.cs
@@ -498,7 +498,7 @@ public string GetNextSegmentFileName()
         /// <param name="segmentFileName"> segment file to load </param>
         /// <exception cref="CorruptIndexException"> if the index is corrupt 
</exception>
         /// <exception cref="IOException"> if there is a low-level IO error 
</exception>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         public void Read(Directory directory, string segmentFileName)
         {
             var success = false;
@@ -617,7 +617,7 @@ public void Read(Directory directory, string 
segmentFileName)
         /// Find the latest commit (<c>segments_N file</c>) and
         /// load all <see cref="SegmentCommitInfo"/>s.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         public void Read(Directory directory)
         {
             generation = lastGeneration = -1;
@@ -1269,7 +1269,7 @@ internal void RollbackCommit(Directory dir)
         /// method if changes have been made to this <see 
cref="SegmentInfos"/> instance
         /// </para>
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal void PrepareCommit(Directory dir)
         {
             if (pendingSegnOutput != null)
@@ -1311,7 +1311,7 @@ public ICollection<string> GetFiles(Directory dir, bool 
includeSegmentsFile)
             return files;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal void FinishCommit(Directory dir)
         {
             if (pendingSegnOutput is null)
diff --git a/src/Lucene.Net/Index/SegmentMerger.cs 
b/src/Lucene.Net/Index/SegmentMerger.cs
index bb9c94a97..4bd651e54 100644
--- a/src/Lucene.Net/Index/SegmentMerger.cs
+++ b/src/Lucene.Net/Index/SegmentMerger.cs
@@ -85,7 +85,7 @@ internal SegmentMerger(IList<AtomicReader> readers, 
SegmentInfo segmentInfo, Inf
         /// <returns> The number of documents that were merged </returns>
         /// <exception cref="CorruptIndexException"> if the index is corrupt 
</exception>
         /// <exception cref="IOException"> if there is a low-level IO error 
</exception>
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in PreFlexRWPostingsFormat
         internal MergeState Merge()
         {
             if (!ShouldMerge)
@@ -437,7 +437,7 @@ private int SetDocMaps()
             return docBase;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterOnDiskFull
         internal void MergeTerms(SegmentWriteState segmentWriteState)
         {
             IList<Fields> fields = new JCG.List<Fields>();
diff --git a/src/Lucene.Net/Index/SerialMergeScheduler.cs 
b/src/Lucene.Net/Index/SerialMergeScheduler.cs
index 044b4ee85..764d19407 100644
--- a/src/Lucene.Net/Index/SerialMergeScheduler.cs
+++ b/src/Lucene.Net/Index/SerialMergeScheduler.cs
@@ -1,5 +1,4 @@
 using Lucene.Net.Support.Threading;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -37,7 +36,6 @@ public SerialMergeScheduler()
         /// "synchronized" so that even if the application is using
         /// multiple threads, only one merge may run at a time.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Merge(IndexWriter writer, MergeTrigger trigger, 
bool newMergesFound) // LUCENENET NOTE: This was internal in the original, but 
the base class is public so there isn't much choice here
         {
             UninterruptableMonitor.Enter(this);
@@ -63,4 +61,4 @@ protected override void Dispose(bool disposing)
         {
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/SortedDocValuesWriter.cs 
b/src/Lucene.Net/Index/SortedDocValuesWriter.cs
index a1b65f7c7..1459ba32b 100644
--- a/src/Lucene.Net/Index/SortedDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/SortedDocValuesWriter.cs
@@ -4,7 +4,6 @@
 using Lucene.Net.Util.Packed;
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -109,7 +108,6 @@ private void UpdateBytesUsed()
             bytesUsed = newBytesUsed;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state, DocValuesConsumer 
dvConsumer)
         {
             int maxDoc = state.SegmentInfo.DocCount;
diff --git a/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs 
b/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
index a4bc65e63..614874f6e 100644
--- a/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
+++ b/src/Lucene.Net/Index/SortedSetDocValuesWriter.cs
@@ -2,7 +2,6 @@
 using System;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -160,7 +159,6 @@ private void UpdateBytesUsed()
             bytesUsed = newBytesUsed;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state, DocValuesConsumer 
dvConsumer)
         {
             int maxDoc = state.SegmentInfo.DocCount;
diff --git a/src/Lucene.Net/Index/StoredFieldsProcessor.cs 
b/src/Lucene.Net/Index/StoredFieldsProcessor.cs
index 9cda0b79e..1fbc49be5 100644
--- a/src/Lucene.Net/Index/StoredFieldsProcessor.cs
+++ b/src/Lucene.Net/Index/StoredFieldsProcessor.cs
@@ -1,8 +1,6 @@
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
 using Lucene.Net.Support.Threading;
-using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -64,7 +62,6 @@ public override void StartDocument()
             Reset();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state)
         {
             int numDocs = state.SegmentInfo.DocCount;
@@ -115,7 +112,6 @@ private void InitFieldsWriter(IOContext context)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             Reset();
@@ -142,7 +138,6 @@ internal void Fill(int docID)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void FinishDocument()
         {
             if (Debugging.AssertsEnabled) 
Debugging.Assert(docWriter.TestPoint("StoredFieldsWriter.finishDocument 
start"));
@@ -189,4 +184,4 @@ public override void AddField(int docID, IIndexableField 
field, FieldInfo fieldI
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/TermVectorsConsumer.cs 
b/src/Lucene.Net/Index/TermVectorsConsumer.cs
index a9f1a0dd1..0596af0ea 100644
--- a/src/Lucene.Net/Index/TermVectorsConsumer.cs
+++ b/src/Lucene.Net/Index/TermVectorsConsumer.cs
@@ -55,7 +55,6 @@ public TermVectorsConsumer(DocumentsWriterPerThread docWriter)
         }
 
         // LUCENENE specific - original was internal, but FreqProxTermsWriter 
requires public (little point, since both are internal classes)
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(IDictionary<string, 
TermsHashConsumerPerField> fieldsToFlush, SegmentWriteState state)
         {
             if (writer != null)
@@ -100,7 +99,7 @@ internal void Fill(int docID)
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal void InitTermVectorsWriter()
         {
             if (writer is null)
@@ -111,7 +110,7 @@ internal void InitTermVectorsWriter()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
+        [MethodImpl(MethodImplOptions.NoInlining)] // Stack trace needed 
intact in TestIndexWriterExceptions
         internal override void FinishDocument(TermsHash termsHash)
         {
             if (Debugging.AssertsEnabled) 
Debugging.Assert(docWriter.TestPoint("TermVectorsTermsWriter.finishDocument 
start"));
@@ -142,7 +141,6 @@ internal override void FinishDocument(TermsHash termsHash)
             if (Debugging.AssertsEnabled) 
Debugging.Assert(docWriter.TestPoint("TermVectorsTermsWriter.finishDocument 
end"));
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             hasVectors = false;
@@ -168,7 +166,6 @@ public override TermsHashConsumerPerField 
AddField(TermsHashPerField termsHashPe
             return new TermVectorsConsumerPerField(termsHashPerField, this, 
fieldInfo);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal void AddFieldToFlush(TermVectorsConsumerPerField fieldToFlush)
         {
             if (numVectorFields == perFields.Length)
diff --git a/src/Lucene.Net/Index/TermVectorsConsumerPerField.cs 
b/src/Lucene.Net/Index/TermVectorsConsumerPerField.cs
index 64631edb3..acc9db35e 100644
--- a/src/Lucene.Net/Index/TermVectorsConsumerPerField.cs
+++ b/src/Lucene.Net/Index/TermVectorsConsumerPerField.cs
@@ -158,7 +158,6 @@ internal override void Finish()
             termsWriter.AddFieldToFlush(this);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal void FinishDocument()
         {
             if (Debugging.AssertsEnabled) 
Debugging.Assert(docState.TestPoint("TermVectorsTermsWriterPerField.finish 
start"));
diff --git a/src/Lucene.Net/Index/TermsHash.cs 
b/src/Lucene.Net/Index/TermsHash.cs
index 609db16d9..959d6da5e 100644
--- a/src/Lucene.Net/Index/TermsHash.cs
+++ b/src/Lucene.Net/Index/TermsHash.cs
@@ -1,5 +1,4 @@
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -30,7 +29,7 @@ namespace Lucene.Net.Index
     /// is passed each token produced by the analyzer on each
     /// field.  It stores these tokens in a hash table, and
     /// allocates separate byte streams per token.  Consumers of
-    /// this class, eg <see cref="FreqProxTermsWriter"/> and 
+    /// this class, eg <see cref="FreqProxTermsWriter"/> and
     /// <see cref="TermVectorsConsumer"/>, write their own byte streams
     /// under each term.
     /// </summary>
@@ -80,7 +79,6 @@ public TermsHash(DocumentsWriterPerThread docWriter, 
TermsHashConsumer consumer,
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             Reset();
@@ -105,7 +103,6 @@ internal void Reset()
             bytePool.Reset(false, false);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void Flush(IDictionary<string, 
InvertedDocConsumerPerField> fieldsToFlush, SegmentWriteState state)
         {
             IDictionary<string, TermsHashConsumerPerField> childFields = new 
Dictionary<string, TermsHashConsumerPerField>();
@@ -143,7 +140,6 @@ internal override InvertedDocConsumerPerField 
AddField(DocInverterPerField docIn
             return new TermsHashPerField(docInverterPerField, this, 
nextTermsHash, fieldInfo);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void FinishDocument()
         {
             consumer.FinishDocument(this);
@@ -162,4 +158,4 @@ internal override void StartDocument()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Index/TermsHashPerField.cs 
b/src/Lucene.Net/Index/TermsHashPerField.cs
index dbd60285e..646e99e9c 100644
--- a/src/Lucene.Net/Index/TermsHashPerField.cs
+++ b/src/Lucene.Net/Index/TermsHashPerField.cs
@@ -2,7 +2,6 @@
 using Lucene.Net.Diagnostics;
 using System;
 using System.Collections.Generic;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -100,7 +99,6 @@ public void Reset()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort()
         {
             Reset();
diff --git a/src/Lucene.Net/Index/TwoStoredFieldsConsumers.cs 
b/src/Lucene.Net/Index/TwoStoredFieldsConsumers.cs
index 4cac1d0f5..3ace61200 100644
--- a/src/Lucene.Net/Index/TwoStoredFieldsConsumers.cs
+++ b/src/Lucene.Net/Index/TwoStoredFieldsConsumers.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Index
 {
@@ -39,14 +38,12 @@ public override void AddField(int docID, IIndexableField 
field, FieldInfo fieldI
             second.AddField(docID, field, fieldInfo);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush(SegmentWriteState state) // LUCENENET NOTE: 
original was internal, but other implementations require public
         {
             first.Flush(state);
             second.Flush(state);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Abort() // LUCENENET NOTE: original was internal, 
but other implementations require public
         {
             try
@@ -74,7 +71,6 @@ public override void AddField(int docID, IIndexableField 
field, FieldInfo fieldI
             second.StartDocument();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         internal override void FinishDocument()
         {
             first.FinishDocument();
diff --git a/src/Lucene.Net/Search/TopDocs.cs b/src/Lucene.Net/Search/TopDocs.cs
index b32cfb91f..1c0496ccc 100644
--- a/src/Lucene.Net/Search/TopDocs.cs
+++ b/src/Lucene.Net/Search/TopDocs.cs
@@ -5,7 +5,6 @@
 using System.Buffers;
 using System.Collections.Generic;
 using System.Diagnostics.CodeAnalysis;
-using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
 namespace Lucene.Net.Search
@@ -299,7 +298,6 @@ protected internal override bool LessThan(Shard first, 
Shard second)
         /// @lucene.experimental
         /// </summary>
         /// <exception cref="ArgumentNullException"><paramref 
name="shardHits"/> is <c>null</c>.</exception>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public static TopDocs Merge(Sort? sort, int topN, TopDocs[] shardHits)
         {
             return Merge(sort, 0, topN, shardHits);
@@ -311,7 +309,6 @@ public static TopDocs Merge(Sort? sort, int topN, TopDocs[] 
shardHits)
         /// at most <see cref="Util.PriorityQueue{T}.Count"/>.
         /// </summary>
         /// <exception cref="ArgumentNullException"><paramref 
name="shardHits"/> is <c>null</c>.</exception>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public static TopDocs Merge(Sort? sort, int start, int size, TopDocs[] 
shardHits)
         {
             // LUCENENET specific - added guard clause.
diff --git a/src/Lucene.Net/Store/BufferedChecksum.cs 
b/src/Lucene.Net/Store/BufferedChecksum.cs
index 6a2322728..9899a58ba 100644
--- a/src/Lucene.Net/Store/BufferedChecksum.cs
+++ b/src/Lucene.Net/Store/BufferedChecksum.cs
@@ -1,5 +1,4 @@
 using Lucene.Net.Support;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Store
 {
@@ -111,7 +110,6 @@ public virtual void Reset()
             @in.Reset();
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         private void Flush()
         {
             if (upto > 0)
@@ -121,4 +119,4 @@ private void Flush()
             upto = 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Store/BufferedIndexOutput.cs 
b/src/Lucene.Net/Store/BufferedIndexOutput.cs
index 6be6f077f..89bd1eabf 100644
--- a/src/Lucene.Net/Store/BufferedIndexOutput.cs
+++ b/src/Lucene.Net/Store/BufferedIndexOutput.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Support;
 using System;
-using System.Runtime.CompilerServices;
 using System.Threading;
 
 namespace Lucene.Net.Store
@@ -132,7 +131,6 @@ public override void WriteBytes(byte[] b, int offset, int 
length)
         }
 
         /// <inheritdoc/>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush()
         {
             if (buffer is null) return; // LUCENENET: Lazy-load the buffer, so 
we don't force all subclasses to allocate it
@@ -210,4 +208,4 @@ private void EnsureOpen()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Store/CompoundFileWriter.cs 
b/src/Lucene.Net/Store/CompoundFileWriter.cs
index bd9326b13..5a8d394be 100644
--- a/src/Lucene.Net/Store/CompoundFileWriter.cs
+++ b/src/Lucene.Net/Store/CompoundFileWriter.cs
@@ -367,7 +367,6 @@ internal DirectCFSIndexOutput(CompoundFileWriter 
outerInstance, IndexOutput @del
                 this.isSeparate = isSeparate;
             }
 
-            [MethodImpl(MethodImplOptions.NoInlining)]
             public override void Flush()
             {
                 @delegate.Flush();
diff --git a/src/Lucene.Net/Store/FSDirectory.cs 
b/src/Lucene.Net/Store/FSDirectory.cs
index 66950592c..4d738062d 100644
--- a/src/Lucene.Net/Store/FSDirectory.cs
+++ b/src/Lucene.Net/Store/FSDirectory.cs
@@ -7,7 +7,6 @@
 using System.Globalization;
 using System.IO;
 using System.Linq;// Used only for WRITE_LOCK_NAME in deprecated create=true 
case:
-using System.Runtime.CompilerServices;
 using System.Security;
 using System.Threading;
 using System.Threading.Tasks;
@@ -561,7 +560,6 @@ protected internal override void FlushBuffer(byte[] b, int 
offset, int size)
             }
 
             /// <inheritdoc/>
-            [MethodImpl(MethodImplOptions.NoInlining)]
             public override void Flush()
             {
                 // LUCENENET specific: Guard to ensure we aren't disposed.
diff --git a/src/Lucene.Net/Store/RAMOutputStream.cs 
b/src/Lucene.Net/Store/RAMOutputStream.cs
index 6b6ffd5c6..e00254fa5 100644
--- a/src/Lucene.Net/Store/RAMOutputStream.cs
+++ b/src/Lucene.Net/Store/RAMOutputStream.cs
@@ -1,7 +1,6 @@
 using Lucene.Net.Support;
 using System;
 using Lucene.Net.Diagnostics;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Store
 {
@@ -206,7 +205,6 @@ private void SetFileLength()
             }
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush()
         {
             SetFileLength();
diff --git a/src/Lucene.Net/Store/RateLimitedIndexOutput.cs 
b/src/Lucene.Net/Store/RateLimitedIndexOutput.cs
index fe0a147ae..e65866a05 100644
--- a/src/Lucene.Net/Store/RateLimitedIndexOutput.cs
+++ b/src/Lucene.Net/Store/RateLimitedIndexOutput.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Runtime.CompilerServices;
 using System.Threading;
 
 namespace Lucene.Net.Store
@@ -83,7 +82,6 @@ public override void Seek(long pos)
             @delegate.Seek(pos);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush()
         {
             try
@@ -125,4 +123,4 @@ private void EnsureOpen()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Support/ExceptionHandling/StackTraceHelper.cs 
b/src/Lucene.Net/Support/ExceptionHandling/StackTraceHelper.cs
index ba31f9aaf..70dbcc21f 100644
--- a/src/Lucene.Net/Support/ExceptionHandling/StackTraceHelper.cs
+++ b/src/Lucene.Net/Support/ExceptionHandling/StackTraceHelper.cs
@@ -33,6 +33,11 @@ internal static class StackTraceHelper
         /// <para/>
         /// IMPORTANT: To make the tests pass in release mode, the method(s) 
named here
         /// must be decorated with 
<c>[MethodImpl(MethodImplOptions.NoInlining)]</c>.
+        /// However, do not add this attribute unless you determine it is 
necessary, as it can
+        /// harm performance. Always add two-way traceability to the method(s) 
in question
+        /// by using the <c>nameof</c> operator to reference the method name 
in the test,
+        /// and add a comment at the point of use of the <see 
cref="MethodImplAttribute"/>
+        /// of which test(s) require it.
         /// </summary>
         public static bool DoesStackTraceContainMethod(string methodName)
         {
diff --git a/src/Lucene.Net/Support/IO/SafeTextWriterWrapper.cs 
b/src/Lucene.Net/Support/IO/SafeTextWriterWrapper.cs
index 89dae6741..a96156908 100644
--- a/src/Lucene.Net/Support/IO/SafeTextWriterWrapper.cs
+++ b/src/Lucene.Net/Support/IO/SafeTextWriterWrapper.cs
@@ -1,6 +1,5 @@
 using System;
 using System.IO;
-using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -76,7 +75,6 @@ public override bool Equals(object obj)
             return Run(() => textWriter.Equals(obj));
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Flush()
         {
             Run(() => textWriter.Flush());
diff --git a/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs 
b/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
index 42913f275..89d4a7b21 100644
--- a/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
+++ b/src/Lucene.Net/Support/Index/TaskMergeScheduler.cs
@@ -4,7 +4,6 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Runtime.CompilerServices;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
@@ -32,12 +31,12 @@ namespace Lucene.Net.Index
     /// <summary>
     /// A <see cref="MergeScheduler"/> that runs each merge using
     /// <see cref="Task"/>s on the default <see cref="TaskScheduler"/>.
-    /// 
+    ///
     /// <para>If more than <see cref="MaxMergeCount"/> merges are
     /// requested then this class will forcefully throttle the
     /// incoming threads by pausing until one more more merges
     /// complete.</para>
-    ///  
+    ///
     /// LUCENENET specific
     /// </summary>
     [Obsolete("Use ConcurrentMergeScheduler instead. This class will be 
removed in 4.8.0 release candidate."), 
System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
@@ -172,7 +171,7 @@ protected override void Dispose(bool disposing)
         }
 
         /// <summary>
-        /// Wait for any running merge threads to finish. 
+        /// Wait for any running merge threads to finish.
         /// This call is not interruptible as used by <see 
cref="MergeScheduler.Dispose()"/>.
         /// </summary>
         public virtual void Sync()
@@ -214,7 +213,6 @@ public virtual void Sync()
         /// </summary>
         private int MergeThreadCount => _mergeThreads.Count(x => x.IsAlive && 
x.CurrentMerge != null);
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override void Merge(IndexWriter writer, MergeTrigger trigger, 
bool newMergesFound)
         {
             using (_lock.Write())
@@ -322,7 +320,6 @@ public override void Merge(IndexWriter writer, MergeTrigger 
trigger, bool newMer
 
         /// <summary>
         /// Does the actual merge, by calling <see 
cref="IndexWriter.Merge(MergePolicy.OneMerge)"/> </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         protected virtual void DoMerge(MergePolicy.OneMerge merge)
         {
             _writer.Merge(merge);
@@ -478,7 +475,7 @@ public virtual MergePolicy.OneMerge RunningMerge
             }
 
             /// <summary>
-            /// Return the current merge, or <c>null</c> if this 
+            /// Return the current merge, or <c>null</c> if this
             /// <see cref="MergeThread"/> is done.
             /// </summary>
             public virtual MergePolicy.OneMerge CurrentMerge
@@ -569,9 +566,9 @@ private void Run(CancellationToken cancellationToken)
                     while (true && !cancellationToken.IsCancellationRequested)
                     {
                         RunningMerge = merge;
-                        // LUCENENET NOTE: We MUST call DoMerge(merge) instead 
of 
+                        // LUCENENET NOTE: We MUST call DoMerge(merge) instead 
of
                         // _writer.Merge(merge) because the tests specifically 
look
-                        // for the method name DoMerge in the stack trace. 
+                        // for the method name DoMerge in the stack trace.
                         _doMerge(merge);
 
                         // Subsequent times through the loop we do any new
@@ -667,4 +664,4 @@ public override int GetHashCode()
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Util/Fst/NoOutputs.cs 
b/src/Lucene.Net/Util/Fst/NoOutputs.cs
index 2bd8134ae..8fac506ae 100644
--- a/src/Lucene.Net/Util/Fst/NoOutputs.cs
+++ b/src/Lucene.Net/Util/Fst/NoOutputs.cs
@@ -93,7 +93,6 @@ public override object Add(object prefix, object output)
             return NO_OUTPUT;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public override object Merge(object first, object second)
         {
             if (Debugging.AssertsEnabled)
diff --git a/src/Lucene.Net/Util/Fst/Outputs.cs 
b/src/Lucene.Net/Util/Fst/Outputs.cs
index efe852d94..b2da10075 100644
--- a/src/Lucene.Net/Util/Fst/Outputs.cs
+++ b/src/Lucene.Net/Util/Fst/Outputs.cs
@@ -1,4 +1,3 @@
-using System;
 using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Util.Fst
@@ -30,7 +29,7 @@ namespace Lucene.Net.Util.Fst
     /// <para>Note that any operation that returns NO_OUTPUT must
     /// return the same singleton object from
     /// <see cref="NoOutput"/>.</para>
-    /// 
+    ///
     /// <para>LUCENENET IMPORTANT: If <typeparamref name="T"/> is a collection 
type,
     /// it must implement <see cref="System.Collections.IStructuralEquatable"/>
     /// in order to properly compare its nested values.</para>
@@ -62,7 +61,7 @@ public abstract class Outputs<T>
 
         /// <summary>
         /// Encode an final node output value into a
-        /// <see cref="DataOutput"/>.  By default this just calls 
+        /// <see cref="DataOutput"/>.  By default this just calls
         /// <see cref="Write(T, DataOutput)"/>.
         /// </summary>
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -99,10 +98,9 @@ public virtual T ReadFinalOutput(DataInput @in)
 
         // TODO: maybe make valid(T output) public...?  for asserts
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public virtual T Merge(T first, T second)
         {
             throw UnsupportedOperationException.Create();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Util/Packed/BlockPackedWriter.cs 
b/src/Lucene.Net/Util/Packed/BlockPackedWriter.cs
index 4ec36453d..e91494fa1 100644
--- a/src/Lucene.Net/Util/Packed/BlockPackedWriter.cs
+++ b/src/Lucene.Net/Util/Packed/BlockPackedWriter.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Diagnostics;
 using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Util.Packed
 {
@@ -68,7 +67,6 @@ public BlockPackedWriter(DataOutput @out, int blockSize)
         {
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         protected override void Flush()
         {
             if (Debugging.AssertsEnabled) Debugging.Assert(m_off > 0);
@@ -115,4 +113,4 @@ protected override void Flush()
             m_off = 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Util/Packed/MonotonicBlockPackedWriter.cs 
b/src/Lucene.Net/Util/Packed/MonotonicBlockPackedWriter.cs
index 6ba982b56..25c7250a3 100644
--- a/src/Lucene.Net/Util/Packed/MonotonicBlockPackedWriter.cs
+++ b/src/Lucene.Net/Util/Packed/MonotonicBlockPackedWriter.cs
@@ -49,7 +49,7 @@ namespace Lucene.Net.Util.Packed
     ///     <a 
href="https://developers.google.com/protocol-buffers/docs/encoding#types";>zigzag-encoded</a>
     ///     packed (<see cref="PackedInt32s"/>) deltas from the expected value 
(computed from
     ///     the function) using exaclty BitsPerValue bits per 
value</description></item>
-    /// </list> 
+    /// </list>
     /// <para/>
     /// @lucene.internal
     /// </summary>
@@ -71,7 +71,6 @@ public override void Add(long l)
             base.Add(l);
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         protected override void Flush()
         {
             if (Debugging.AssertsEnabled) Debugging.Assert(m_off > 0);
@@ -104,4 +103,4 @@ protected override void Flush()
             m_off = 0;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Lucene.Net/Util/Packed/PackedDataOutput.cs 
b/src/Lucene.Net/Util/Packed/PackedDataOutput.cs
index 6cfafd924..3e1e6be0a 100644
--- a/src/Lucene.Net/Util/Packed/PackedDataOutput.cs
+++ b/src/Lucene.Net/Util/Packed/PackedDataOutput.cs
@@ -1,6 +1,5 @@
 using Lucene.Net.Diagnostics;
 using System;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Util.Packed
 {
@@ -72,7 +71,6 @@ public void WriteInt64(long value, int bitsPerValue)
         /// <summary>
         /// Flush pending bits to the underlying <see cref="DataOutput"/>.
         /// </summary>
-        [MethodImpl(MethodImplOptions.NoInlining)]
         public void Flush()
         {
             if (remainingBits < 8)
diff --git a/src/Lucene.Net/Util/Packed/PackedWriter.cs 
b/src/Lucene.Net/Util/Packed/PackedWriter.cs
index 4ff193dd3..6bd7a01fa 100644
--- a/src/Lucene.Net/Util/Packed/PackedWriter.cs
+++ b/src/Lucene.Net/Util/Packed/PackedWriter.cs
@@ -1,7 +1,5 @@
 using Lucene.Net.Diagnostics;
 using Lucene.Net.Support;
-using System.IO;
-using System.Runtime.CompilerServices;
 
 namespace Lucene.Net.Util.Packed
 {
@@ -86,7 +84,6 @@ public override void Finish()
             finished = true;
         }
 
-        [MethodImpl(MethodImplOptions.NoInlining)]
         private void Flush()
         {
             encoder.Encode(nextValues, 0, nextBlocks, 0, iterations);
@@ -98,4 +95,4 @@ private void Flush()
 
         public override int Ord => written - 1;
     }
-}
\ No newline at end of file
+}


Reply via email to