Skip to content

Commit 5381fdb

Browse files
vwilsonclaude
andauthored
SWEEP: Replace BCL Dictionary<TKey,TValue> with JCG.Dictionary<TKey,TValue> (apache#1273) (apache#1287)
* SWEEP: Replace BCL Dictionary<TKey,TValue> with JCG.Dictionary<TKey,TValue> (apache#1273) Replaces System.Collections.Generic.Dictionary<TKey, TValue> with J2N.Collections.Generic.Dictionary<TKey, TValue> across all Java-derived sources, using the alias JCG.Dictionary<TKey, TValue>. J2N's Dictionary supports JDK HashMap semantics (null keys, removal during enumeration, ReadOnlySpan<char> alternate lookup, structural equality and formatting), which the BCL type lacks. Using BCL Dictionary in Java-derived code was potentially masking bugs in extensions with low test coverage. Exclusions per the issue: - Lucene.Net.CodeAnalysis.* projects - Lucene.Net.Replicator.AspNetCore - lucene-cli + Lucene.Net.Tests.Cli - Lucene.Net.Tests.TestFramework.{DependencyInjection,NUnitExtensions} - Support folders and Lucene.Net.Support namespace (except TagSoup and Sax under Lucene.Net.Benchmark/Support, which are explicitly in scope per the issue) Public API surface continues to expose IDictionary<TKey, TValue>; this is not a binary-breaking change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Commenting out using statements that were added to cover code that is currently commented out --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent d4e2707 commit 5381fdb

272 files changed

Lines changed: 694 additions & 561 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/Lucene.Net.Analysis.Common/Analysis/CharFilter/HTMLStripCharFilter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using System.Globalization;
1212
using System.IO;
1313
using Integer = J2N.Numerics.Int32;
14+
using JCG = J2N.Collections.Generic;
1415

1516
namespace Lucene.Net.Analysis.CharFilters
1617
{
@@ -30679,7 +30680,7 @@ private static int ZzUnpackAttribute(string packed, int offset, int[] result)
3067930680
/// user code:
3068030681
/// </summary>
3068130682
private static readonly IDictionary<string, string> upperCaseVariantsAccepted
30682-
= new Dictionary<string, string>()
30683+
= new JCG.Dictionary<string, string>()
3068330684
{
3068430685
{"quot", "QUOT"},
3068530686
{"copy", "COPY" },

src/Lucene.Net.Analysis.Common/Analysis/CharFilter/NormalizeCharMap.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ namespace Lucene.Net.Analysis.CharFilters
3636
public class NormalizeCharMap
3737
{
3838
internal readonly FST<CharsRef> map;
39-
internal readonly IDictionary<char?, FST.Arc<CharsRef>> cachedRootArcs = new Dictionary<char?, FST.Arc<CharsRef>>();
39+
internal readonly IDictionary<char?, FST.Arc<CharsRef>> cachedRootArcs = new JCG.Dictionary<char?, FST.Arc<CharsRef>>();
4040

4141
// Use the builder to create:
4242
private NormalizeCharMap(FST<CharsRef> map)

src/Lucene.Net.Analysis.Common/Analysis/Compound/Hyphenation/PatternParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ private static XmlReaderSettings GetXmlReaderSettings() // LUCENENET: CA1822: Ma
195195

196196
private static IDictionary<string, string> GetAttributes(XmlReader node) // LUCENENET: CA1822: Mark members as static
197197
{
198-
var result = new Dictionary<string, string>();
198+
var result = new JCG.Dictionary<string, string>();
199199
if (node.HasAttributes)
200200
{
201201
for (int i = 0; i < node.AttributeCount; i++)

src/Lucene.Net.Analysis.Common/Analysis/Core/LowerCaseTokenizerFactory.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7+
using JCG = J2N.Collections.Generic;
78

89
namespace Lucene.Net.Analysis.Core
910
{
@@ -55,7 +56,7 @@ public override Tokenizer Create(AttributeFactory factory, TextReader input)
5556

5657
public virtual AbstractAnalysisFactory GetMultiTermComponent()
5758
{
58-
return new LowerCaseFilterFactory(new Dictionary<string, string>(OriginalArgs));
59+
return new LowerCaseFilterFactory(new JCG.Dictionary<string, string>(OriginalArgs));
5960
}
6061
}
6162
}

src/Lucene.Net.Analysis.Common/Analysis/Hunspell/Dictionary.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ internal static string GetDictionaryEncoding(Stream affix)
725725
internal static readonly IDictionary<string, string> CHARSET_ALIASES = LoadCharsetAliases();
726726
private static IDictionary<string, string> LoadCharsetAliases() // LUCENENET: Avoid static constructors (see https://github.com/apache/lucenenet/pull/224#issuecomment-469284006)
727727
{
728-
return Collections.AsReadOnly(new Dictionary<string, string>
728+
return Collections.AsReadOnly(new JCG.Dictionary<string, string>
729729
{
730730
["microsoft-cp1251"] = "windows-1251",
731731
["TIS620-2533"] = "TIS-620"

src/Lucene.Net.Analysis.Common/Analysis/Pt/RSLPStemmerBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ protected static IDictionary<string, Step> Parse(Type clazz, string resource)
284284
{
285285
try
286286
{
287-
IDictionary<string, Step> steps = new Dictionary<string, Step>();
287+
IDictionary<string, Step> steps = new JCG.Dictionary<string, Step>();
288288

289289
using (TextReader r = IOUtils.GetDecodingReader(clazz, resource, Encoding.UTF8))
290290
{

src/Lucene.Net.Analysis.Common/Analysis/Query/QueryAutoStopWordAnalyzer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ namespace Lucene.Net.Analysis.Query
4141
public sealed class QueryAutoStopWordAnalyzer : AnalyzerWrapper
4242
{
4343
private readonly Analyzer @delegate;
44-
private readonly IDictionary<string, ISet<string>> stopWordsPerField = new Dictionary<string, ISet<string>>();
44+
private readonly IDictionary<string, ISet<string>> stopWordsPerField = new JCG.Dictionary<string, ISet<string>>();
4545
//The default maximum percentage (40%) of index documents which
4646
//can contain a term, after which the term is considered to be a stop word.
4747
public const float defaultMaxDocFreqPercent = 0.4f;

src/Lucene.Net.Analysis.Common/Analysis/Synonym/FSTSynonymFilterFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ internal sealed class FSTSynonymFilterFactory : TokenFilterFactory, IResourceLoa
3535
private readonly string synonyms;
3636
private readonly string format;
3737
private readonly bool expand;
38-
private readonly IDictionary<string, string> tokArgs = new Dictionary<string, string>();
38+
private readonly IDictionary<string, string> tokArgs = new JCG.Dictionary<string, string>();
3939

4040
private SynonymMap map;
4141

src/Lucene.Net.Analysis.Common/Analysis/Synonym/SlowSynonymFilterFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ internal sealed class SlowSynonymFilterFactory : TokenFilterFactory, IResourceLo
4646
private readonly bool ignoreCase;
4747
private readonly bool expand;
4848
private readonly string tf;
49-
private readonly IDictionary<string, string> tokArgs = new Dictionary<string, string>();
49+
private readonly IDictionary<string, string> tokArgs = new JCG.Dictionary<string, string>();
5050

5151
// LUCENENET: Optimized by pre-comiling regex and lazy-loading
5252
private class Holder

src/Lucene.Net.Analysis.Common/Analysis/Synonym/SynonymFilterFactory.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Lucene.Net.Util;
44
using System;
55
using System.Collections.Generic;
6+
using JCG = J2N.Collections.Generic;
67

78
namespace Lucene.Net.Analysis.Synonym
89
{
@@ -67,7 +68,7 @@ public SynonymFilterFactory(IDictionary<string, string> args)
6768
#pragma warning disable 612, 618
6869
if (m_luceneMatchVersion.OnOrAfter(Lucene.Net.Util.LuceneVersion.LUCENE_34))
6970
{
70-
delegator = new FSTSynonymFilterFactory(new Dictionary<string, string>(OriginalArgs));
71+
delegator = new FSTSynonymFilterFactory(new JCG.Dictionary<string, string>(OriginalArgs));
7172
}
7273
#pragma warning restore 612, 618
7374
else
@@ -79,7 +80,7 @@ public SynonymFilterFactory(IDictionary<string, string> args)
7980
throw new ArgumentException("You must specify luceneMatchVersion >= 3.4 to use alternate synonyms formats");
8081
}
8182
#pragma warning disable 612, 618
82-
delegator = new SlowSynonymFilterFactory(new Dictionary<string, string>(OriginalArgs));
83+
delegator = new SlowSynonymFilterFactory(new JCG.Dictionary<string, string>(OriginalArgs));
8384
#pragma warning restore 612, 618
8485
}
8586
}

0 commit comments

Comments
 (0)