From a2b3cfe5f2c453ee649417ad7c5fc6072ca92588 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Tue, 5 Mar 2013 21:33:02 -0800 Subject: [PATCH] Tweak how empty item references are formatted in the annotated dump --- .../jf/dexlib2/dexbacked/raw/ClassDataItem.java | 2 +- .../jf/dexlib2/dexbacked/raw/ClassDefItem.java | 17 +++++++---------- .../jf/dexlib2/dexbacked/raw/StringIdItem.java | 15 +++++++++++++++ .../jf/dexlib2/dexbacked/raw/TypeIdItem.java | 8 ++++++++ .../jf/dexlib2/dexbacked/raw/TypeListItem.java | 2 +- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDataItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDataItem.java index 601ea1f4..99164ac2 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDataItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDataItem.java @@ -152,7 +152,7 @@ public class ClassDataItem { int codeOffset = reader.readSmallUleb128(); if (codeOffset == 0) { - out.annotateTo(reader.getOffset(), "code_off = 0"); + out.annotateTo(reader.getOffset(), "code_off = code_item[NO_OFFSET]"); } else { out.annotateTo(reader.getOffset(), "code_off = code_item[0x%x]", codeOffset); addCodeItemIdentity(codeOffset, MethodIdItem.asString(dexFile, methodIndex)); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDefItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDefItem.java index 806e95ae..06fa2053 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDefItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/ClassDefItem.java @@ -75,29 +75,26 @@ public class ClassDefItem { Joiner.on('|').join(AccessFlags.getAccessFlagsForClass(accessFlags))); int superclassIndex = dexFile.readSmallUint(out.getCursor()); - out.annotate(4, "superclass_idx = %s", TypeIdItem.getReferenceAnnotation(dexFile, superclassIndex)); + out.annotate(4, "superclass_idx = %s", + TypeIdItem.getOptionalReferenceAnnotation(dexFile, superclassIndex)); int interfacesOffset = dexFile.readSmallUint(out.getCursor()); out.annotate(4, "interfaces_off = %s", TypeListItem.getReferenceAnnotation(dexFile, interfacesOffset)); int sourceFileIdx = dexFile.readOptionalUint(out.getCursor()); - if (sourceFileIdx == -1) { - out.annotate(4, "source_file_idx = -1"); - } else { - out.annotate(4, "source_file_idx = %s", StringIdItem.getReferenceAnnotation(dexFile, - sourceFileIdx)); - } + out.annotate(4, "source_file_idx = %s", StringIdItem.getOptionalReferenceAnnotation(dexFile, + sourceFileIdx)); int annotationsOffset = dexFile.readSmallUint(out.getCursor()); if (annotationsOffset == 0) { - out.annotate(4, "annotations_off = 0"); + out.annotate(4, "annotations_off = annotations_directory_item[NO_OFFSET]"); } else { out.annotate(4, "annotations_off = annotations_directory_item[0x%x]", annotationsOffset); } int classDataOffset = dexFile.readSmallUint(out.getCursor()); if (classDataOffset == 0) { - out.annotate(4, "class_data_off = 0"); + out.annotate(4, "class_data_off = class_data_item[NO_OFFSET]"); } else { out.annotate(4, "class_data_off = class_data_item[0x%x]", classDataOffset); addClassDataIdentity(classDataOffset, dexFile.getType(classIndex)); @@ -105,7 +102,7 @@ public class ClassDefItem { int staticValuesOffset = dexFile.readSmallUint(out.getCursor()); if (staticValuesOffset == 0) { - out.annotate(4, "static_values_off = 0"); + out.annotate(4, "static_values_off = encoded_array_item[NO_OFFSET]"); } else { out.annotate(4, "static_values_off = encoded_array_item[0x%x]", staticValuesOffset); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/StringIdItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/StringIdItem.java index 34b0e971..9c52abb8 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/StringIdItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/StringIdItem.java @@ -86,4 +86,19 @@ public class StringIdItem { } return String.format("string_id_item[%d]", stringIndex); } + + + @Nonnull + public static String getOptionalReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int stringIndex) { + return getOptionalReferenceAnnotation(dexFile, stringIndex, false); + + } + + public static String getOptionalReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int stringIndex, + boolean quote) { + if (stringIndex == -1) { + return "string_id_item[NO_INDEX]"; + } + return getReferenceAnnotation(dexFile, stringIndex, quote); + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeIdItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeIdItem.java index 3b05fe33..3e3e309c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeIdItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeIdItem.java @@ -66,4 +66,12 @@ public class TypeIdItem { } return String.format("type_id_item[%d]", typeIndex); } + + @Nonnull + public static String getOptionalReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int typeIndex) { + if (typeIndex == -1) { + return "type_id_item[NO_INDEX]"; + } + return getReferenceAnnotation(dexFile, typeIndex); + } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeListItem.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeListItem.java index 496970e1..b4ae1ce7 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeListItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/raw/TypeListItem.java @@ -69,7 +69,7 @@ public class TypeListItem { @Nonnull public static String getReferenceAnnotation(@Nonnull DexBackedDexFile dexFile, int typeListOffset) { if (typeListOffset == 0) { - return "0"; + return "type_list_item[NO_OFFSET]"; } try {