Update checksum marker comparison
Change-Id: Ia0feaa5ed018472049056f141870b7f9d5390d8a
diff --git a/src/main/java/com/android/tools/r8/dex/ClassesChecksum.java b/src/main/java/com/android/tools/r8/dex/ClassesChecksum.java
index ffdb9a4..3624975 100644
--- a/src/main/java/com/android/tools/r8/dex/ClassesChecksum.java
+++ b/src/main/java/com/android/tools/r8/dex/ClassesChecksum.java
@@ -83,13 +83,22 @@
assert PREFIX.length() == 3;
char[] prefix = new char[PREFIX.length()];
int prefixLength = string.decodePrefix(prefix);
- return prefixLength == 0
- || (prefixLength == 1 && prefix[0] <= PREFIX_CHAR0)
- || (prefixLength == 2 && prefix[0] == PREFIX_CHAR0 && prefix[1] <= PREFIX_CHAR1)
- || (prefixLength == 3
- && prefix[0] == PREFIX_CHAR0
- && prefix[1] == PREFIX_CHAR1
- && prefix[2] < PREFIX_CHAR2);
+ if (prefixLength == 0) {
+ return true;
+ }
+ if (prefix[0] != PREFIX_CHAR0) {
+ return prefix[0] < PREFIX_CHAR0;
+ }
+ if (prefixLength == 1) {
+ return true;
+ }
+ if (prefix[1] != PREFIX_CHAR1) {
+ return prefix[1] < PREFIX_CHAR1;
+ }
+ if (prefixLength == 2) {
+ return true;
+ }
+ return prefix[2] < PREFIX_CHAR2;
} catch (UTFDataFormatException e) {
throw new RuntimeException("Bad format", e);
}
diff --git a/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsHighSortingStrings.java b/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsHighSortingStrings.java
index c5ad260..24601c1 100644
--- a/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsHighSortingStrings.java
+++ b/src/test/java/com/android/tools/r8/dexfilemerger/DexMergeChecksumsHighSortingStrings.java
@@ -121,6 +121,14 @@
assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("~")));
assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("}")));
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("z")));
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("zz")));
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("zzz")));
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("zzzz")));
+
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("this")));
+ assertTrue(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("println")));
+
// False negatives.
assertFalse(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("~~~")));
assertFalse(ClassesChecksum.definitelyPrecedesChecksumMarker(factory.createString("~~~z")));