Avoid decoding DexString to determine length/isEmpty

Test: tools/test.py --no-internal -v *StringContentCheckTest*
Change-Id: I9972e0abb93e7880b84e4cc8de48aa74880a94f3
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
index 221d1e4..80963a7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
@@ -194,9 +194,9 @@
           }
         };
       } else if (invokedMethod == factory.stringMethods.length) {
-        operatorWithNoArg = rcv -> rcv.toString().length();
+        operatorWithNoArg = rcv -> rcv.size;
       } else if (invokedMethod == factory.stringMethods.isEmpty) {
-        operatorWithNoArg = rcv -> rcv.toString().isEmpty() ? 1 : 0;
+        operatorWithNoArg = rcv -> rcv.size == 0 ? 1 : 0;
       } else if (invokedMethod == factory.stringMethods.contains) {
         operatorWithString = (rcv, arg) -> rcv.toString().contains(arg.toString()) ? 1 : 0;
       } else if (invokedMethod == factory.stringMethods.startsWith) {