]> source.dussan.org Git - jgit.git/commitdiff
PackIndex: Make iterator static (pass object count in ctor) 73/1194473/2
authorIvan Frade <ifrade@google.com>
Thu, 28 Mar 2024 22:07:34 +0000 (15:07 -0700)
committerIvan Frade <ifrade@google.com>
Wed, 8 May 2024 17:57:47 +0000 (10:57 -0700)
The iterator uses an implicit reference to the external class to
call #getObjectCount(). This implicit reference prevents PackIndex to
become an interface. The object count is immutable and known at
index (and iterator) construction time.

Pass the object count in the constructor of the iterator and make it
static.

Change-Id: I4949ff943de2a88380fb7f4c9b65b089734854b9

org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndex.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndexV1.java
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackIndexV2.java

index 8a64c3247a862d4083a30998eee7fced6082e780..a23bc4f0a53395467b57036a7718100568e84a7a 100644 (file)
@@ -353,16 +353,22 @@ public abstract class PackIndex
                }
        }
 
-       abstract class EntriesIterator implements Iterator<MutableEntry> {
+       static abstract class EntriesIterator implements Iterator<MutableEntry> {
                protected final MutableEntry entry = initEntry();
 
+               private final long objectCount;
+
+               protected EntriesIterator(long objectCount) {
+                       this.objectCount = objectCount;
+               }
+
                protected long returnedNumber = 0;
 
                protected abstract MutableEntry initEntry();
 
                @Override
                public boolean hasNext() {
-                       return returnedNumber < getObjectCount();
+                       return returnedNumber < objectCount;
                }
 
                /**
index 21f7314f33b366e0942b1359ee368be47ef49fb6..3496a2a20c5347285a9baf4bc2ec0d238a48792a 100644 (file)
@@ -203,7 +203,7 @@ class PackIndexV1 extends PackIndex {
 
        @Override
        public Iterator<MutableEntry> iterator() {
-               return new IndexV1Iterator();
+               return new IndexV1Iterator(objectCnt);
        }
 
        @Override
@@ -251,6 +251,10 @@ class PackIndexV1 extends PackIndex {
 
                int levelTwo;
 
+               IndexV1Iterator(long objectCount) {
+                       super(objectCount);
+               }
+
                @Override
                protected MutableEntry initEntry() {
                        return new MutableEntry() {
index 9a6f4a421abc79004bef61094ab7bcbd86cb61ba..12dfeb669527d8c5c105c4208e6af9e12b979bb9 100644 (file)
@@ -224,7 +224,7 @@ class PackIndexV2 extends PackIndex {
 
        @Override
        public Iterator<MutableEntry> iterator() {
-               return new EntriesIteratorV2();
+               return new EntriesIteratorV2(objectCnt);
        }
 
        @Override
@@ -294,6 +294,10 @@ class PackIndexV2 extends PackIndex {
 
                int levelTwo;
 
+               EntriesIteratorV2(long objectCount){
+                       super(objectCount);
+               }
+
                @Override
                protected MutableEntry initEntry() {
                        return new MutableEntry() {