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

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


The following commit(s) were added to refs/heads/master by this push:
     new 09c073b  BUG: PerFieldAnalyzerWrapper and PerFieldReuseStrategy must 
support null keys (fixes LUCENENET-615)
09c073b is described below

commit 09c073ba8db9e8204694481da449b7b0d2a66018
Author: Shad Storhaug <[email protected]>
AuthorDate: Tue Aug 13 16:11:27 2019 +0700

    BUG: PerFieldAnalyzerWrapper and PerFieldReuseStrategy must support null 
keys (fixes LUCENENET-615)
---
 .../Analysis/Miscellaneous/PerFieldAnalyzerWrapper.cs |  9 ++++-----
 .../Miscellaneous/TestPerFieldAnalyzerWrapper.cs      | 19 +++++++++++++++++++
 src/Lucene.Net/Analysis/Analyzer.cs                   |  4 +++-
 3 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/src/Lucene.Net.Analysis.Common/Analysis/Miscellaneous/PerFieldAnalyzerWrapper.cs
 
b/src/Lucene.Net.Analysis.Common/Analysis/Miscellaneous/PerFieldAnalyzerWrapper.cs
index 862f2a2..0d42889 100644
--- 
a/src/Lucene.Net.Analysis.Common/Analysis/Miscellaneous/PerFieldAnalyzerWrapper.cs
+++ 
b/src/Lucene.Net.Analysis.Common/Analysis/Miscellaneous/PerFieldAnalyzerWrapper.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using Lucene.Net.Support;
+using System.Collections.Generic;
 
 namespace Lucene.Net.Analysis.Miscellaneous
 {
@@ -71,14 +72,12 @@ namespace Lucene.Net.Analysis.Miscellaneous
             : base(PER_FIELD_REUSE_STRATEGY)
         {
             this.defaultAnalyzer = defaultAnalyzer;
-            this.fieldAnalyzers = fieldAnalyzers ?? new Dictionary<string, 
Analyzer>();
+            this.fieldAnalyzers = fieldAnalyzers ?? new HashMap<string, 
Analyzer>(); // LUCENENET-615: Must support nullable keys
         }
 
         protected override Analyzer GetWrappedAnalyzer(string fieldName)
         {
-            Analyzer analyzer = fieldAnalyzers.ContainsKey(fieldName) ?
-                fieldAnalyzers[fieldName] :
-                null;
+            fieldAnalyzers.TryGetValue(fieldName, out Analyzer analyzer);
             return analyzer ?? defaultAnalyzer;
         }
 
diff --git 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestPerFieldAnalyzerWrapper.cs
 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestPerFieldAnalyzerWrapper.cs
index 7429429..103d44d 100644
--- 
a/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestPerFieldAnalyzerWrapper.cs
+++ 
b/src/Lucene.Net.Tests.Analysis.Common/Analysis/Miscellaneous/TestPerFieldAnalyzerWrapper.cs
@@ -1,7 +1,10 @@
 using Lucene.Net.Analysis.Core;
+using Lucene.Net.Analysis.En;
 using Lucene.Net.Analysis.TokenAttributes;
+using Lucene.Net.Attributes;
 using Lucene.Net.Util;
 using NUnit.Framework;
+using System;
 using System.Collections.Generic;
 using System.IO;
 
@@ -69,6 +72,22 @@ namespace Lucene.Net.Analysis.Miscellaneous
             }
         }
 
+        [Test, LuceneNetSpecific]
+        public virtual void TestLUCENENET615()
+        {
+            var english = new 
EnglishAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+
+            var whitespace = new 
WhitespaceAnalyzer(Lucene.Net.Util.LuceneVersion.LUCENE_48);
+
+            var pf = new PerFieldAnalyzerWrapper(english, new 
Lucene.Net.Support.HashMap<string, Analyzer>() { { "foo", whitespace } });
+
+            var test1 = english.GetTokenStream(null, "test"); // Does not throw
+
+            var test2 = pf.GetTokenStream("", "test"); // works
+
+            Assert.DoesNotThrow(() => pf.GetTokenStream(null, "test"), 
"GetTokenStream should not throw NullReferenceException with a null key");
+        }
+
         [Test]
         public virtual void TestCharFilters()
         {
diff --git a/src/Lucene.Net/Analysis/Analyzer.cs 
b/src/Lucene.Net/Analysis/Analyzer.cs
index 1120fd2..192362b 100644
--- a/src/Lucene.Net/Analysis/Analyzer.cs
+++ b/src/Lucene.Net/Analysis/Analyzer.cs
@@ -1,3 +1,4 @@
+using Lucene.Net.Support;
 using Lucene.Net.Util;
 using System;
 using System.Collections.Generic;
@@ -464,7 +465,8 @@ namespace Lucene.Net.Analysis
                 var componentsPerField = (IDictionary<string, 
TokenStreamComponents>)GetStoredValue(analyzer);
                 if (componentsPerField == null)
                 {
-                    componentsPerField = new Dictionary<string, 
TokenStreamComponents>();
+                    // LUCENENET-615: This needs to support nullable keys
+                    componentsPerField = new HashMap<string, 
TokenStreamComponents>();
                     SetStoredValue(analyzer, componentsPerField);
                 }
                 componentsPerField[fieldName] = components;

Reply via email to