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