You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2019/08/13 09:12:14 UTC
[lucenenet] branch master updated: BUG: PerFieldAnalyzerWrapper and
PerFieldReuseStrategy must support null keys (fixes LUCENENET-615)
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 <sh...@shadstorhaug.com>
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;