2424import com .reandroid .json .JSONConvert ;
2525import com .reandroid .json .JSONObject ;
2626import com .reandroid .utils .CompareUtil ;
27- import com .reandroid .utils .ObjectsStore ;
2827import com .reandroid .utils .ObjectsUtil ;
2928import com .reandroid .utils .collection .ComputeIterator ;
29+ import com .reandroid .utils .collection .FilterIterator ;
3030import com .reandroid .xml .StyleDocument ;
3131import org .xmlpull .v1 .XmlSerializer ;
3232
3636import java .nio .charset .CharacterCodingException ;
3737import java .nio .charset .CharsetDecoder ;
3838import java .nio .charset .StandardCharsets ;
39+ import java .util .HashSet ;
3940import java .util .Iterator ;
41+ import java .util .Set ;
4042import java .util .function .Predicate ;
4143
4244public 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