This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 5d3f29371c5a96620a364396664bc7424a4c6a39 Author: Shad Storhaug <[email protected]> AuthorDate: Mon Aug 5 08:00:45 2019 +0700 BUG: Lucene.Net.Grouping.TopGroups - check collection equality if the generic type is a reference type (as is the default behavior in Java) --- src/Lucene.Net.Grouping/TopGroups.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Lucene.Net.Grouping/TopGroups.cs b/src/Lucene.Net.Grouping/TopGroups.cs index 132957c..7a7e522 100644 --- a/src/Lucene.Net.Grouping/TopGroups.cs +++ b/src/Lucene.Net.Grouping/TopGroups.cs @@ -1,6 +1,7 @@ using Lucene.Net.Support; using System; using System.Diagnostics.CodeAnalysis; +using System.Reflection; namespace Lucene.Net.Search.Grouping { @@ -144,6 +145,10 @@ namespace Lucene.Net.Search.Grouping return null; } + // LUCENENET specific - store whether T is value type + // for optimization of GetHashCode() and Equals() + bool shardGroupsIsValueType = typeof(T).GetTypeInfo().IsValueType; + int totalHitCount = 0; int totalGroupedHitCount = 0; // Optionally merge the totalGroupCount. @@ -193,7 +198,9 @@ namespace Lucene.Net.Search.Grouping throw new ArgumentException("group values differ across shards; you must pass same top groups to all shards' second-pass collector"); } } - else if (!groupValue.Equals(shardGroupDocs.GroupValue)) + // LUCENENET specific - use Collections.Equals() if we have a reference type + // to ensure if it is a collection its contents are compared + else if (!(shardGroupsIsValueType ? groupValue.Equals(shardGroupDocs.GroupValue) : Collections.Equals(groupValue, shardGroupDocs.GroupValue))) { throw new ArgumentException("group values differ across shards; you must pass same top groups to all shards' second-pass collector"); }
