RefList.Builder<Ref> symbolic = scan.symbolic;
for (int idx = 0; idx < symbolic.size();) {
- Ref ref = symbolic.get(idx);
- ref = resolve(ref, 0, prefix, loose, packed);
- if (ref != null && ref.getObjectId() != null) {
- symbolic.set(idx, ref);
+ final Ref symbolicRef = symbolic.get(idx);
+ final Ref resolvedRef = resolve(symbolicRef, 0, prefix, loose, packed);
+ if (resolvedRef != null && resolvedRef.getObjectId() != null) {
+ symbolic.set(idx, resolvedRef);
idx++;
} else {
// A broken symbolic reference, we have to drop it from the
// collections the client is about to receive. Should be a
// rare occurrence so pay a copy penalty.
- loose = loose.remove(idx);
symbolic.remove(idx);
+ final int toRemove = loose.find(symbolicRef.getName());
+ if (0 <= toRemove)
+ loose = loose.remove(toRemove);
}
}