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 2017/02/01 10:22:15 UTC

[18/28] lucenenet git commit: Lucene.Net.Grouping refactor: Changed all public fields into properties

Lucene.Net.Grouping refactor: Changed all public fields into properties


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/378f1f12
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/378f1f12
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/378f1f12

Branch: refs/heads/api-work
Commit: 378f1f126a6006237b8ff0eaabb3d7d704858c8f
Parents: 1dccd77
Author: Shad Storhaug <sh...@shadstorhaug.com>
Authored: Wed Feb 1 16:06:07 2017 +0700
Committer: Shad Storhaug <sh...@shadstorhaug.com>
Committed: Wed Feb 1 16:06:07 2017 +0700

----------------------------------------------------------------------
 .../AbstractAllGroupHeadsCollector.cs           |  10 +-
 .../AbstractSecondPassGroupingCollector.cs      |  23 ++--
 .../Function/FunctionAllGroupHeadsCollector.cs  |  12 +-
 src/Lucene.Net.Grouping/SearchGroup.cs          | 123 ++++++++++++++-----
 .../Term/TermAllGroupHeadsCollector.cs          |  66 ++++++----
 .../Term/TermSecondPassGroupingCollector.cs     |   4 +-
 6 files changed, 161 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/AbstractAllGroupHeadsCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/AbstractAllGroupHeadsCollector.cs b/src/Lucene.Net.Grouping/AbstractAllGroupHeadsCollector.cs
index f5f5ad0..2fb3d59 100644
--- a/src/Lucene.Net.Grouping/AbstractAllGroupHeadsCollector.cs
+++ b/src/Lucene.Net.Grouping/AbstractAllGroupHeadsCollector.cs
@@ -93,7 +93,7 @@ namespace Lucene.Net.Search.Grouping
         /// Returns the group head and puts it into <see cref="TemporalResult"/>.
         /// If the group head wasn't encountered before then it will be added to the collected group heads.
         /// <para>
-        /// The <see cref="TemporalResult.stop"/> property will be <c>true</c> if the group head wasn't encountered before
+        /// The <see cref="TemporalResult.Stop"/> property will be <c>true</c> if the group head wasn't encountered before
         /// otherwise <c>false</c>.
         /// </para>
         /// </summary>
@@ -111,11 +111,11 @@ namespace Lucene.Net.Search.Grouping
         public override void Collect(int doc)
         {
             RetrieveGroupHeadAndAddIfNotExist(doc);
-            if (m_temporalResult.stop)
+            if (m_temporalResult.Stop)
             {
                 return;
             }
-            GH groupHead = m_temporalResult.groupHead;
+            GH groupHead = m_temporalResult.GroupHead;
 
             // Ok now we need to check if the current doc is more relevant then current doc for this group
             for (int compIDX = 0; ; compIDX++)
@@ -153,8 +153,8 @@ namespace Lucene.Net.Search.Grouping
         /// </summary>
         protected class TemporalResult
         {
-            public GH groupHead;
-            public bool stop;
+            public GH GroupHead { get; set; }
+            public bool Stop { get; set; }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/AbstractSecondPassGroupingCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/AbstractSecondPassGroupingCollector.cs b/src/Lucene.Net.Grouping/AbstractSecondPassGroupingCollector.cs
index deb44a3..ee75c57 100644
--- a/src/Lucene.Net.Grouping/AbstractSecondPassGroupingCollector.cs
+++ b/src/Lucene.Net.Grouping/AbstractSecondPassGroupingCollector.cs
@@ -86,7 +86,7 @@ namespace Lucene.Net.Search.Grouping
         {
             foreach (AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> group in m_groupMap.Values)
             {
-                group.collector.SetScorer(scorer);
+                group.Collector.SetScorer(scorer);
             }
         }
 
@@ -97,7 +97,7 @@ namespace Lucene.Net.Search.Grouping
             if (group != null)
             {
                 totalGroupedHitCount++;
-                group.collector.Collect(doc);
+                group.Collector.Collect(doc);
             }
         }
 
@@ -114,7 +114,7 @@ namespace Lucene.Net.Search.Grouping
             //System.out.println("SP.setNextReader");
             foreach (AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> group in m_groupMap.Values)
             {
-                group.collector.SetNextReader(context);
+                group.Collector.SetNextReader(context);
             }
         }
 
@@ -132,12 +132,12 @@ namespace Lucene.Net.Search.Grouping
             foreach (var group in groups)
             {
                 AbstractSecondPassGroupingCollector.SearchGroupDocs<TGroupValue> groupDocs = m_groupMap.ContainsKey(group.GroupValue) ? m_groupMap[group.GroupValue] : null;
-                TopDocs topDocs = groupDocs.collector.GetTopDocs(withinGroupOffset, maxDocsPerGroup);
+                TopDocs topDocs = groupDocs.Collector.GetTopDocs(withinGroupOffset, maxDocsPerGroup);
                 groupDocsResult[groupIDX++] = new GroupDocs<TGroupValue>(float.NaN,
                                                                               topDocs.MaxScore,
                                                                               topDocs.TotalHits,
                                                                               topDocs.ScoreDocs,
-                                                                              groupDocs.groupValue,
+                                                                              groupDocs.GroupValue,
                                                                               group.SortValues);
                 maxScore = Math.Max(maxScore, topDocs.MaxScore);
             }
@@ -169,8 +169,17 @@ namespace Lucene.Net.Search.Grouping
         // disad: blows up the size of SearchGroup if we need many of them, and couples implementations
         public class SearchGroupDocs<TGroupValue>
         {
-            public readonly TGroupValue groupValue;
-            public readonly ITopDocsCollector collector;
+            public TGroupValue GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly TGroupValue groupValue;
+
+            public ITopDocsCollector Collector
+            {
+                get { return collector; }
+            }
+            private readonly ITopDocsCollector collector;
             public SearchGroupDocs(TGroupValue groupValue, ITopDocsCollector collector)
             {
                 this.groupValue = groupValue;

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/Function/FunctionAllGroupHeadsCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/Function/FunctionAllGroupHeadsCollector.cs b/src/Lucene.Net.Grouping/Function/FunctionAllGroupHeadsCollector.cs
index 6ca3cdf..98f435e 100644
--- a/src/Lucene.Net.Grouping/Function/FunctionAllGroupHeadsCollector.cs
+++ b/src/Lucene.Net.Grouping/Function/FunctionAllGroupHeadsCollector.cs
@@ -71,13 +71,13 @@ namespace Lucene.Net.Search.Grouping.Function
                 MutableValue groupValue = mval.Duplicate();
                 groupHead = new GroupHead(this, groupValue, sortWithinGroup, doc);
                 groups[groupValue] = groupHead;
-                m_temporalResult.stop = true;
+                m_temporalResult.Stop = true;
             }
             else
             {
-                m_temporalResult.stop = false;
+                m_temporalResult.Stop = false;
             }
-            this.m_temporalResult.groupHead = groupHead;
+            this.m_temporalResult.GroupHead = groupHead;
         }
 
         protected override ICollection<GroupHead> CollectedGroupHeads
@@ -124,7 +124,11 @@ namespace Lucene.Net.Search.Grouping.Function
             private readonly FunctionAllGroupHeadsCollector outerInstance;
             // LUCENENET: Moved this here from the base class, AbstractAllGroupHeadsCollector_GroupHead so it doesn't
             // need to reference the generic closing type MutableValue.
-            public readonly MutableValue groupValue;
+            public MutableValue GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly MutableValue groupValue;
             internal readonly FieldComparer[] comparers;
 
             internal GroupHead(FunctionAllGroupHeadsCollector outerInstance, MutableValue groupValue, Sort sort, int doc)

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/SearchGroup.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/SearchGroup.cs b/src/Lucene.Net.Grouping/SearchGroup.cs
index cad33f3..a5e6cd5 100644
--- a/src/Lucene.Net.Grouping/SearchGroup.cs
+++ b/src/Lucene.Net.Grouping/SearchGroup.cs
@@ -94,8 +94,17 @@ namespace Lucene.Net.Search.Grouping
 
         private class ShardIter<T>
         {
-            public readonly IEnumerator<ISearchGroup<T>> iter;
-            public readonly int shardIndex;
+            public IEnumerator<ISearchGroup<T>> Iter
+            {
+                get { return iter; }
+            }
+            private readonly IEnumerator<ISearchGroup<T>> iter;
+
+            public int ShardIndex
+            {
+                get { return shardIndex; }
+            }
+            private readonly int shardIndex;
 
             public ShardIter(IEnumerable<ISearchGroup<T>> shard, int shardIndex)
             {
@@ -129,13 +138,47 @@ namespace Lucene.Net.Search.Grouping
         {
 
             // groupValue may be null!
-            public readonly T groupValue;
+            public T GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly T groupValue;
 
-            public object[] topValues;
-            public readonly List<ShardIter<T>> shards = new List<ShardIter<T>>();
-            public int minShardIndex;
-            public bool processed;
-            public bool inQueue;
+            [WritableArray]
+            [SuppressMessage("Microsoft.Performance", "CA1819", Justification = "Lucene's design requires some writable array properties")]
+            public object[] TopValues
+            {
+                get { return topValues; }
+                set { topValues = value; }
+            }
+            private object[] topValues;
+
+            public IList<ShardIter<T>> Shards
+            {
+                get { return shards; }
+            }
+            private readonly List<ShardIter<T>> shards = new List<ShardIter<T>>();
+
+            public int MinShardIndex
+            {
+                get { return minShardIndex; }
+                set { minShardIndex = value; }
+            }
+            private int minShardIndex;
+
+            public bool IsProcessed
+            {
+                get { return processed; }
+                set { processed = value; }
+            }
+            private bool processed;
+
+            public bool IsInQueue
+            {
+                get { return inQueue; }
+                set { inQueue = value; }
+            }
+            private bool inQueue;
 
             public MergedGroup(T groupValue)
             {
@@ -199,9 +242,21 @@ namespace Lucene.Net.Search.Grouping
 
         private class GroupComparer<T> : IComparer<MergedGroup<T>>
         {
+            [WritableArray]
+            [SuppressMessage("Microsoft.Performance", "CA1819", Justification = "Lucene's design requires some writable array properties")]
+            public FieldComparer[] Comparers
+            {
+                get { return comparers; }
+            }
+            private readonly FieldComparer[] comparers;
 
-            public readonly FieldComparer[] comparers;
-            public readonly int[] reversed;
+            [WritableArray]
+            [SuppressMessage("Microsoft.Performance", "CA1819", Justification = "Lucene's design requires some writable array properties")]
+            public int[] Reversed
+            {
+                get { return reversed; }
+            }
+            private readonly int[] reversed;
 
             public GroupComparer(Sort groupSort)
             {
@@ -223,8 +278,8 @@ namespace Lucene.Net.Search.Grouping
                     return 0;
                 }
                 //System.out.println("compare group=" + group + " other=" + other);
-                object[] groupValues = group.topValues;
-                object[] otherValues = other.topValues;
+                object[] groupValues = group.TopValues;
+                object[] otherValues = other.TopValues;
                 //System.out.println("  groupValues=" + groupValues + " otherValues=" + otherValues);
                 for (int compIDX = 0; compIDX < comparers.Length; compIDX++)
                 {
@@ -237,8 +292,8 @@ namespace Lucene.Net.Search.Grouping
                 }
 
                 // Tie break by min shard index:
-                Debug.Assert(group.minShardIndex != other.minShardIndex);
-                return group.minShardIndex - other.minShardIndex;
+                Debug.Assert(group.MinShardIndex != other.MinShardIndex);
+                return group.MinShardIndex - other.MinShardIndex;
             }
         }
 
@@ -258,7 +313,7 @@ namespace Lucene.Net.Search.Grouping
 
             private void UpdateNextGroup(int topN, ShardIter<T> shard)
             {
-                while (shard.iter.MoveNext())
+                while (shard.Iter.MoveNext())
                 {
                     ISearchGroup<T> group = shard.Next();
                     MergedGroup<T> mergedGroup = groupsSeen.ContainsKey(group.GroupValue) ? groupsSeen[group.GroupValue] : null;
@@ -270,14 +325,14 @@ namespace Lucene.Net.Search.Grouping
                         // Start a new group:
                         //System.out.println("      new");
                         mergedGroup = new MergedGroup<T>(group.GroupValue);
-                        mergedGroup.minShardIndex = shard.shardIndex;
+                        mergedGroup.MinShardIndex = shard.ShardIndex;
                         Debug.Assert(group.SortValues != null);
-                        mergedGroup.topValues = group.SortValues;
+                        mergedGroup.TopValues = group.SortValues;
                         groupsSeen[group.GroupValue] = mergedGroup;
-                        mergedGroup.inQueue = true;
+                        mergedGroup.IsInQueue = true;
                         queue.Add(mergedGroup);
                     }
-                    else if (mergedGroup.processed)
+                    else if (mergedGroup.IsProcessed)
                     {
                         // This shard produced a group that we already
                         // processed; move on to next group...
@@ -287,10 +342,10 @@ namespace Lucene.Net.Search.Grouping
                     {
                         //System.out.println("      old");
                         bool competes = false;
-                        for (int compIDX = 0; compIDX < groupComp.comparers.Length; compIDX++)
+                        for (int compIDX = 0; compIDX < groupComp.Comparers.Length; compIDX++)
                         {
-                            int cmp = groupComp.reversed[compIDX] * groupComp.comparers[compIDX].CompareValues(group.SortValues[compIDX],
-                                                                                                                       mergedGroup.topValues[compIDX]);
+                            int cmp = groupComp.Reversed[compIDX] * groupComp.Comparers[compIDX].CompareValues(group.SortValues[compIDX],
+                                                                                                                       mergedGroup.TopValues[compIDX]);
                             if (cmp < 0)
                             {
                                 // Definitely competes
@@ -302,9 +357,9 @@ namespace Lucene.Net.Search.Grouping
                                 // Definitely does not compete
                                 break;
                             }
-                            else if (compIDX == groupComp.comparers.Length - 1)
+                            else if (compIDX == groupComp.Comparers.Length - 1)
                             {
-                                if (shard.shardIndex < mergedGroup.minShardIndex)
+                                if (shard.ShardIndex < mergedGroup.MinShardIndex)
                                 {
                                     competes = true;
                                 }
@@ -316,18 +371,18 @@ namespace Lucene.Net.Search.Grouping
                         if (competes)
                         {
                             // Group's sort changed -- remove & re-insert
-                            if (mergedGroup.inQueue)
+                            if (mergedGroup.IsInQueue)
                             {
                                 queue.Remove(mergedGroup);
                             }
-                            mergedGroup.topValues = group.SortValues;
-                            mergedGroup.minShardIndex = shard.shardIndex;
+                            mergedGroup.TopValues = group.SortValues;
+                            mergedGroup.MinShardIndex = shard.ShardIndex;
                             queue.Add(mergedGroup);
-                            mergedGroup.inQueue = true;
+                            mergedGroup.IsInQueue = true;
                         }
                     }
 
-                    mergedGroup.shards.Add(shard);
+                    mergedGroup.Shards.Add(shard);
                     break;
                 }
 
@@ -337,7 +392,7 @@ namespace Lucene.Net.Search.Grouping
                     MergedGroup<T> group = queue.Last();
                     queue.Remove(group);
                     //System.out.println("PRUNE: " + group);
-                    group.inQueue = false;
+                    group.IsInQueue = false;
                 }
             }
 
@@ -367,13 +422,13 @@ namespace Lucene.Net.Search.Grouping
                 {
                     MergedGroup<T> group = queue.First();
                     queue.Remove(group);
-                    group.processed = true;
+                    group.IsProcessed = true;
                     //System.out.println("  pop: shards=" + group.shards + " group=" + (group.groupValue == null ? "null" : (((BytesRef) group.groupValue).utf8ToString())) + " sortValues=" + Arrays.toString(group.topValues));
                     if (count++ >= offset)
                     {
                         SearchGroup<T> newGroup = new SearchGroup<T>();
-                        newGroup.GroupValue = group.groupValue;
-                        newGroup.SortValues = group.topValues;
+                        newGroup.GroupValue = group.GroupValue;
+                        newGroup.SortValues = group.TopValues;
                         newTopGroups.Add(newGroup);
                         if (newTopGroups.Count == topN)
                         {
@@ -384,7 +439,7 @@ namespace Lucene.Net.Search.Grouping
                     }
 
                     // Advance all iters in this group:
-                    foreach (ShardIter<T> shardIter in group.shards)
+                    foreach (ShardIter<T> shardIter in group.Shards)
                     {
                         UpdateNextGroup(maxQueueSize, shardIter);
                     }

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/Term/TermAllGroupHeadsCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/Term/TermAllGroupHeadsCollector.cs b/src/Lucene.Net.Grouping/Term/TermAllGroupHeadsCollector.cs
index 88ab3ce..8961fed 100644
--- a/src/Lucene.Net.Grouping/Term/TermAllGroupHeadsCollector.cs
+++ b/src/Lucene.Net.Grouping/Term/TermAllGroupHeadsCollector.cs
@@ -176,13 +176,13 @@ namespace Lucene.Net.Search.Grouping.Terms
             {
                 groupHead = new GroupHead(this, groupValue, sortWithinGroup, doc);
                 groups[groupValue == null ? null : BytesRef.DeepCopyOf(groupValue)] = groupHead;
-                m_temporalResult.stop = true;
+                m_temporalResult.Stop = true;
             }
             else
             {
-                m_temporalResult.stop = false;
+                m_temporalResult.Stop = false;
             }
-            m_temporalResult.groupHead = groupHead;
+            m_temporalResult.GroupHead = groupHead;
         }
 
         protected override ICollection<GroupHead> CollectedGroupHeads
@@ -221,7 +221,11 @@ namespace Lucene.Net.Search.Grouping.Terms
             private readonly GeneralAllGroupHeadsCollector outerInstance;
             // LUCENENET: Moved groupValue here from the base class, AbstractAllGroupHeadsCollector_GroupHead so it doesn't
             // need to reference the generic closing type BytesRef.
-            public readonly BytesRef groupValue;
+            public BytesRef GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly BytesRef groupValue;
 
             internal readonly FieldComparer[] comparers;
 
@@ -320,14 +324,14 @@ namespace Lucene.Net.Search.Grouping.Terms
                 groupHead = new GroupHead(this, doc, term);
                 collectedGroups.Add(groupHead);
                 segmentGroupHeads[key + 1] = groupHead;
-                m_temporalResult.stop = true;
+                m_temporalResult.Stop = true;
             }
             else
             {
-                m_temporalResult.stop = false;
+                m_temporalResult.Stop = false;
                 groupHead = segmentGroupHeads[key + 1];
             }
-            m_temporalResult.groupHead = groupHead;
+            m_temporalResult.GroupHead = groupHead;
         }
 
         public override void SetNextReader(AtomicReaderContext context)
@@ -350,15 +354,15 @@ namespace Lucene.Net.Search.Grouping.Terms
             foreach (GroupHead collectedGroup in collectedGroups)
             {
                 int ord;
-                if (collectedGroup.groupValue == null)
+                if (collectedGroup.GroupValue == null)
                 {
                     ord = -1;
                 }
                 else
                 {
-                    ord = groupIndex.LookupTerm(collectedGroup.groupValue);
+                    ord = groupIndex.LookupTerm(collectedGroup.GroupValue);
                 }
-                if (collectedGroup.groupValue == null || ord >= 0)
+                if (collectedGroup.GroupValue == null || ord >= 0)
                 {
                     ordSet.Put(ord);
                     segmentGroupHeads[ord + 1] = collectedGroup;
@@ -390,7 +394,11 @@ namespace Lucene.Net.Search.Grouping.Terms
             private readonly OrdScoreAllGroupHeadsCollector outerInstance;
             // LUCENENET: Moved groupValue here from the base class, AbstractAllGroupHeadsCollector_GroupHead so it doesn't
             // need to reference the generic closing type BytesRef.
-            public readonly BytesRef groupValue;
+            public BytesRef GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly BytesRef groupValue;
 
             internal BytesRef[] sortValues;
             internal int[] sortOrds;
@@ -545,14 +553,14 @@ namespace Lucene.Net.Search.Grouping.Terms
                 groupHead = new GroupHead(this, doc, term);
                 collectedGroups.Add(groupHead);
                 segmentGroupHeads[key + 1] = groupHead;
-                m_temporalResult.stop = true;
+                m_temporalResult.Stop = true;
             }
             else
             {
-                m_temporalResult.stop = false;
+                m_temporalResult.Stop = false;
                 groupHead = segmentGroupHeads[key + 1];
             }
-            m_temporalResult.groupHead = groupHead;
+            m_temporalResult.GroupHead = groupHead;
         }
 
         public override void SetNextReader(AtomicReaderContext context)
@@ -570,15 +578,15 @@ namespace Lucene.Net.Search.Grouping.Terms
             foreach (GroupHead collectedGroup in collectedGroups)
             {
                 int groupOrd;
-                if (collectedGroup.groupValue == null)
+                if (collectedGroup.GroupValue == null)
                 {
                     groupOrd = -1;
                 }
                 else
                 {
-                    groupOrd = groupIndex.LookupTerm(collectedGroup.groupValue);
+                    groupOrd = groupIndex.LookupTerm(collectedGroup.GroupValue);
                 }
-                if (collectedGroup.groupValue == null || groupOrd >= 0)
+                if (collectedGroup.GroupValue == null || groupOrd >= 0)
                 {
                     ordSet.Put(groupOrd);
                     segmentGroupHeads[groupOrd + 1] = collectedGroup;
@@ -605,7 +613,11 @@ namespace Lucene.Net.Search.Grouping.Terms
             private readonly OrdAllGroupHeadsCollector outerInstance;
             // LUCENENET: Moved groupValue here from the base class, AbstractAllGroupHeadsCollector_GroupHead so it doesn't
             // need to reference the generic closing type BytesRef.
-            public readonly BytesRef groupValue;
+            public BytesRef GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly BytesRef groupValue;
             internal BytesRef[] sortValues;
             internal int[] sortOrds;
 
@@ -728,14 +740,14 @@ namespace Lucene.Net.Search.Grouping.Terms
                 groupHead = new GroupHead(this, doc, term);
                 collectedGroups.Add(groupHead);
                 segmentGroupHeads[key + 1] = groupHead;
-                m_temporalResult.stop = true;
+                m_temporalResult.Stop = true;
             }
             else
             {
-                m_temporalResult.stop = false;
+                m_temporalResult.Stop = false;
                 groupHead = segmentGroupHeads[key + 1];
             }
-            m_temporalResult.groupHead = groupHead;
+            m_temporalResult.GroupHead = groupHead;
         }
         public override void SetNextReader(AtomicReaderContext context)
         {
@@ -748,15 +760,15 @@ namespace Lucene.Net.Search.Grouping.Terms
             foreach (GroupHead collectedGroup in collectedGroups)
             {
                 int ord;
-                if (collectedGroup.groupValue == null)
+                if (collectedGroup.GroupValue == null)
                 {
                     ord = -1;
                 }
                 else
                 {
-                    ord = groupIndex.LookupTerm(collectedGroup.groupValue);
+                    ord = groupIndex.LookupTerm(collectedGroup.GroupValue);
                 }
-                if (collectedGroup.groupValue == null || ord >= 0)
+                if (collectedGroup.GroupValue == null || ord >= 0)
                 {
                     ordSet.Put(ord);
                     segmentGroupHeads[ord + 1] = collectedGroup;
@@ -769,7 +781,11 @@ namespace Lucene.Net.Search.Grouping.Terms
             private readonly ScoreAllGroupHeadsCollector outerInstance;
             // LUCENENET: Moved groupValue here from the base class, AbstractAllGroupHeadsCollector_GroupHead so it doesn't
             // need to reference the generic closing type BytesRef.
-            public readonly BytesRef groupValue;
+            public BytesRef GroupValue
+            {
+                get { return groupValue; }
+            }
+            private readonly BytesRef groupValue;
             internal float[] scores;
 
             internal GroupHead(ScoreAllGroupHeadsCollector outerInstance, int doc, BytesRef groupValue)

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/378f1f12/src/Lucene.Net.Grouping/Term/TermSecondPassGroupingCollector.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Grouping/Term/TermSecondPassGroupingCollector.cs b/src/Lucene.Net.Grouping/Term/TermSecondPassGroupingCollector.cs
index c84af50..a0924a6 100644
--- a/src/Lucene.Net.Grouping/Term/TermSecondPassGroupingCollector.cs
+++ b/src/Lucene.Net.Grouping/Term/TermSecondPassGroupingCollector.cs
@@ -53,8 +53,8 @@ namespace Lucene.Net.Search.Grouping.Terms
             foreach (AbstractSecondPassGroupingCollector.SearchGroupDocs<BytesRef> group in m_groupMap.Values)
             {
                 //      System.out.println("  group=" + (group.groupValue == null ? "null" : group.groupValue.utf8ToString()));
-                int ord = group.groupValue == null ? -1 : index.LookupTerm(group.groupValue);
-                if (group.groupValue == null || ord >= 0)
+                int ord = group.GroupValue == null ? -1 : index.LookupTerm(group.GroupValue);
+                if (group.GroupValue == null || ord >= 0)
                 {
                     m_groupDocs[ordSet.Put(ord)] = group;
                 }