diff --git a/src/main/java/com/reandroid/arsc/chunk/TypeBlock.java b/src/main/java/com/reandroid/arsc/chunk/TypeBlock.java index 5596046..cc04bdc 100755 --- a/src/main/java/com/reandroid/arsc/chunk/TypeBlock.java +++ b/src/main/java/com/reandroid/arsc/chunk/TypeBlock.java @@ -54,12 +54,9 @@ public class TypeBlock extends Chunk addChild(mEntryArray); } public PackageBlock getPackageBlock(){ - Block parent=getParent(); - while (parent!=null){ - if(parent instanceof SpecTypePair){ - return ((SpecTypePair)parent).getPackageBlock(); - } - parent=parent.getParent(); + SpecTypePair specTypePair = getParent(SpecTypePair.class); + if(specTypePair!=null){ + return specTypePair.getPackageBlock(); } return null; } diff --git a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlElement.java b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlElement.java index 3eb1adb..f4ce6ef 100755 --- a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlElement.java +++ b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlElement.java @@ -261,12 +261,9 @@ return null; } public ResXmlIDMap getResXmlIDMap(){ - Block parent=getParent(); - while (parent!=null){ - if(parent instanceof ResXmlDocument){ - return ((ResXmlDocument)parent).getResXmlIDMap(); - } - parent=parent.getParent(); + ResXmlDocument resXmlDocument = getParentInstance(ResXmlDocument.class); + if(resXmlDocument!=null){ + return resXmlDocument.getResXmlIDMap(); } return null; } diff --git a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlIDMap.java b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlIDMap.java index 21d8b49..a28670f 100755 --- a/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlIDMap.java +++ b/src/main/java/com/reandroid/arsc/chunk/xml/ResXmlIDMap.java @@ -56,12 +56,9 @@ } ResXmlStringPool getXmlStringPool(){ - Block parent=this; - while (parent!=null){ - if(parent instanceof ResXmlDocument){ - return ((ResXmlDocument)parent).getStringPool(); - } - parent=parent.getParent(); + ResXmlDocument resXmlDocument = getParentInstance(ResXmlDocument.class); + if(resXmlDocument!=null){ + return resXmlDocument.getStringPool(); } return null; } diff --git a/src/main/java/com/reandroid/arsc/item/ResXmlID.java b/src/main/java/com/reandroid/arsc/item/ResXmlID.java index 36e60a8..514c715 100755 --- a/src/main/java/com/reandroid/arsc/item/ResXmlID.java +++ b/src/main/java/com/reandroid/arsc/item/ResXmlID.java @@ -72,12 +72,9 @@ public class ResXmlID extends IntegerItem { return stringPool.get(getIndex()); } private ResXmlStringPool getXmlStringPool(){ - Block parent=this; - while (parent!=null){ - if(parent instanceof ResXmlDocument){ - return ((ResXmlDocument)parent).getStringPool(); - } - parent=parent.getParent(); + ResXmlDocument resXmlDocument = getParentInstance(ResXmlDocument.class); + if(resXmlDocument!=null){ + return resXmlDocument.getStringPool(); } return null; } diff --git a/src/main/java/com/reandroid/arsc/item/StringItem.java b/src/main/java/com/reandroid/arsc/item/StringItem.java index b349f05..4231e91 100755 --- a/src/main/java/com/reandroid/arsc/item/StringItem.java +++ b/src/main/java/com/reandroid/arsc/item/StringItem.java @@ -218,23 +218,13 @@ public class StringItem extends BlockItem implements JSONConvert { return styleItem.getSpanInfoList().size()>0; } public StyleItem getStyle(){ - StringPool stringPool=getStringPool(); + StringPool stringPool = getParentInstance(StringPool.class); if(stringPool==null){ return null; } int index=getIndex(); return stringPool.getStyle(index); } - private StringPool getStringPool(){ - Block parent=getParent(); - while (parent!=null){ - if(parent instanceof StringPool){ - return (StringPool)parent; - } - parent=parent.getParent(); - } - return null; - } @Override public JSONObject toJson() { if(isNull()){ diff --git a/src/main/java/com/reandroid/arsc/item/StyleItem.java b/src/main/java/com/reandroid/arsc/item/StyleItem.java index 24b045f..4e6ce91 100755 --- a/src/main/java/com/reandroid/arsc/item/StyleItem.java +++ b/src/main/java/com/reandroid/arsc/item/StyleItem.java @@ -263,14 +263,7 @@ public class StyleItem extends IntegerArray implements JSONConvert { return null; } private StringPool getStringPool(){ - Block parent=getParent(); - while (parent!=null){ - if(parent instanceof StringPool){ - return (StringPool)parent; - } - parent=parent.getParent(); - } - return null; + return getParentInstance(StringPool.class); } public String applyHtml(String str, boolean xml){ diff --git a/src/main/java/com/reandroid/arsc/pool/SpecStringPool.java b/src/main/java/com/reandroid/arsc/pool/SpecStringPool.java index 3d5e0c7..157278d 100755 --- a/src/main/java/com/reandroid/arsc/pool/SpecStringPool.java +++ b/src/main/java/com/reandroid/arsc/pool/SpecStringPool.java @@ -33,13 +33,6 @@ public class SpecStringPool extends StringPool { return new SpecStringArray(offsets, itemCount, itemStart, is_utf8); } public PackageBlock getPackageBlock(){ - Block parent=getParent(); - while (parent!=null){ - if(parent instanceof PackageBlock){ - return (PackageBlock) parent; - } - parent=parent.getParent(); - } - return null; + return getParent(PackageBlock.class); } } diff --git a/src/main/java/com/reandroid/arsc/pool/StringPool.java b/src/main/java/com/reandroid/arsc/pool/StringPool.java index 61dd028..f8436a3 100755 --- a/src/main/java/com/reandroid/arsc/pool/StringPool.java +++ b/src/main/java/com/reandroid/arsc/pool/StringPool.java @@ -140,6 +140,13 @@ package com.reandroid.arsc.pool; group.add(item); } } + void updateUniqueIdMap(T item){ + if(item==null){ + return; + } + StringGroup group = getOrCreateGroup(item.getHtml()); + group.add(item); + } public List removeUnusedStrings(){ return getStringsArray().removeUnusedStrings(); }