ignore updating existing key

This commit is contained in:
REAndroid 2023-04-20 14:26:24 +02:00
parent 6cba5d1d7f
commit 480e66e598

View File

@ -73,6 +73,9 @@ public class ValueHeader extends BlockItem implements JSONConvert<JSONObject> {
linkStringReference(); linkStringReference();
} }
public void setKey(StringItem stringItem){ public void setKey(StringItem stringItem){
if(ignoreUpdateKey(stringItem)){
return;
}
unLinkStringReference(); unLinkStringReference();
int key = -1; int key = -1;
if(stringItem!=null){ if(stringItem!=null){
@ -81,6 +84,17 @@ public class ValueHeader extends BlockItem implements JSONConvert<JSONObject> {
putInteger(getBytesInternal(), OFFSET_SPEC_REFERENCE, key); putInteger(getBytesInternal(), OFFSET_SPEC_REFERENCE, key);
linkStringReference(stringItem); linkStringReference(stringItem);
} }
private boolean ignoreUpdateKey(StringItem stringItem){
int key = getKey();
ReferenceItem referenceItem = this.mStringReference;
if(stringItem == null){
return referenceItem == null && key == -1;
}
if(referenceItem == null || key != stringItem.getIndex()){
return false;
}
return getSpecString(key) == stringItem;
}
public void setSize(int size){ public void setSize(int size){
super.setBytesLength(size, false); super.setBytesLength(size, false);
writeSize(); writeSize();
@ -126,11 +140,17 @@ public class ValueHeader extends BlockItem implements JSONConvert<JSONObject> {
stringItem.removeReference(stringReference); stringItem.removeReference(stringReference);
} }
public StringItem getNameString(){ public StringItem getNameString(){
return getSpecString(getKey());
}
private StringItem getSpecString(int key){
if(key < 0){
return null;
}
StringPool<?> specStringPool = getSpecStringPool(); StringPool<?> specStringPool = getSpecStringPool();
if(specStringPool==null){ if(specStringPool==null){
return null; return null;
} }
return specStringPool.get(getKey()); return specStringPool.get(key);
} }
private StringPool<?> getSpecStringPool(){ private StringPool<?> getSpecStringPool(){
Block parent = getParent(); Block parent = getParent();