Skip to content

Commit daf17cb

Browse files
committed
[Fix]: HashSet for string references #97 #98
1 parent a59c6e6 commit daf17cb

1 file changed

Lines changed: 14 additions & 15 deletions

File tree

‎src/main/java/com/reandroid/arsc/item/StringItem.java‎

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
import com.reandroid.json.JSONConvert;
2525
import com.reandroid.json.JSONObject;
2626
import com.reandroid.utils.CompareUtil;
27-
import com.reandroid.utils.ObjectsStore;
2827
import com.reandroid.utils.ObjectsUtil;
2928
import com.reandroid.utils.collection.ComputeIterator;
29+
import com.reandroid.utils.collection.FilterIterator;
3030
import com.reandroid.xml.StyleDocument;
3131
import org.xmlpull.v1.XmlSerializer;
3232

@@ -36,18 +36,21 @@
3636
import java.nio.charset.CharacterCodingException;
3737
import java.nio.charset.CharsetDecoder;
3838
import java.nio.charset.StandardCharsets;
39+
import java.util.HashSet;
3940
import java.util.Iterator;
41+
import java.util.Set;
4042
import java.util.function.Predicate;
4143

4244
public class StringItem extends StringBlock implements JSONConvert<JSONObject>, Comparable<StringItem> {
4345

4446
private boolean mUtf8;
45-
private Object mReferencedList;
47+
private final Set<ReferenceItem> mReferencedList;
4648
private StyleItem mStyleItem;
4749

4850
public StringItem(boolean utf8) {
4951
super();
5052
this.mUtf8 = utf8;
53+
this.mReferencedList = new HashSet<>();
5154
}
5255

5356
public StyleDocument getStyleDocument() {
@@ -73,22 +76,22 @@ public<T extends Block> Iterator<T> getUsers(Class<T> parentClass,
7376
}
7477

7578
public void removeReference(ReferenceItem reference) {
76-
mReferencedList = ObjectsStore.remove(mReferencedList, reference);
79+
mReferencedList.remove(reference);
7780
}
7881
public void clearReferences() {
79-
mReferencedList = ObjectsStore.clear(mReferencedList);
82+
mReferencedList.clear();
8083
}
8184
public boolean hasReference() {
8285
ensureStringLinkUnlocked();
83-
return ObjectsStore.containsIf(mReferencedList, referenceItem ->
84-
!(referenceItem instanceof StyleItem.StyleIndexReference));
86+
return FilterIterator.of(mReferencedList.iterator(), referenceItem ->
87+
!(referenceItem instanceof StyleItem.StyleIndexReference)).hasNext();
8588
}
8689
public int getReferencesSize() {
87-
return ObjectsStore.size(mReferencedList);
90+
return mReferencedList.size();
8891
}
8992
public Iterator<ReferenceItem> getReferences() {
9093
ensureStringLinkUnlocked();
91-
return ObjectsStore.iterator(mReferencedList);
94+
return mReferencedList.iterator();
9295
}
9396
void ensureStringLinkUnlocked() {
9497
StringPool<?> stringPool = getParentInstance(StringPool.class);
@@ -98,17 +101,15 @@ void ensureStringLinkUnlocked() {
98101
}
99102
public void addReference(ReferenceItem reference) {
100103
if (reference != null) {
101-
mReferencedList = ObjectsStore.add(mReferencedList, reference);
104+
mReferencedList.add(reference);
102105
int index = this.getIndex();
103106
if (reference.get() != index) {
104107
reference.set(index);
105108
}
106109
}
107110
}
108111
private void reUpdateReferences(int newIndex) {
109-
Iterator<ReferenceItem> iterator = ObjectsStore.clonedIterator(mReferencedList);
110-
while (iterator.hasNext()) {
111-
ReferenceItem reference = iterator.next();
112+
for (ReferenceItem reference : new HashSet<>(mReferencedList)) {
112113
reference.set(newIndex);
113114
}
114115
}
@@ -360,9 +361,7 @@ public void transferReferences(StringItem source) {
360361
if (getIndex() < 0 || source.getIndex() < 0) {
361362
return;
362363
}
363-
Iterator<ReferenceItem> iterator = ObjectsStore.clonedIterator(source.mReferencedList);
364-
while (iterator.hasNext()) {
365-
ReferenceItem reference = iterator.next();
364+
for (ReferenceItem reference : new HashSet<>(source.mReferencedList)) {
366365
if (isTransferable(reference)) {
367366
source.removeReference(reference);
368367
addReference(reference);

0 commit comments

Comments
 (0)