summaryrefslogtreecommitdiff
path: root/errorprone
diff options
context:
space:
mode:
Diffstat (limited to 'errorprone')
-rw-r--r--errorprone/java/com/google/errorprone/bugpatterns/android/EfficientStringsChecker.java6
-rw-r--r--errorprone/tests/java/com/google/errorprone/bugpatterns/android/EfficientStringsCheckerTest.java10
2 files changed, 12 insertions, 4 deletions
diff --git a/errorprone/java/com/google/errorprone/bugpatterns/android/EfficientStringsChecker.java b/errorprone/java/com/google/errorprone/bugpatterns/android/EfficientStringsChecker.java
index d2cb030faef6..3a0fbd33933f 100644
--- a/errorprone/java/com/google/errorprone/bugpatterns/android/EfficientStringsChecker.java
+++ b/errorprone/java/com/google/errorprone/bugpatterns/android/EfficientStringsChecker.java
@@ -180,8 +180,10 @@ public final class EfficientStringsChecker extends BugChecker
for (int i = 0; i < format.length(); i++) {
char c = format.charAt(i);
if (c == '%') {
- i++;
- c = format.charAt(i);
+ c = format.charAt(++i);
+ while ('0' <= c && c <= '9') {
+ c = format.charAt(++i);
+ }
switch (c) {
case 'b':
case 'c':
diff --git a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/EfficientStringsCheckerTest.java b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/EfficientStringsCheckerTest.java
index ae9c316b8ca7..48e4ad11f9bf 100644
--- a/errorprone/tests/java/com/google/errorprone/bugpatterns/android/EfficientStringsCheckerTest.java
+++ b/errorprone/tests/java/com/google/errorprone/bugpatterns/android/EfficientStringsCheckerTest.java
@@ -41,9 +41,13 @@ public class EfficientStringsCheckerTest {
assertTrue(EfficientStringsChecker.isSimple(""));
assertTrue(EfficientStringsChecker.isSimple("%s"));
assertTrue(EfficientStringsChecker.isSimple("String %s%s and %%%% number %d%d together"));
+ assertTrue(EfficientStringsChecker.isSimple("%04d"));
+ assertTrue(EfficientStringsChecker.isSimple("%02x:%02x:%02x"));
+ assertTrue(EfficientStringsChecker.isSimple("%10d"));
- assertFalse(EfficientStringsChecker.isSimple("%04d"));
- assertFalse(EfficientStringsChecker.isSimple("%02x:%02x:%02x"));
+ assertFalse(EfficientStringsChecker.isSimple("%0.4f"));
+ assertFalse(EfficientStringsChecker.isSimple("%t"));
+ assertFalse(EfficientStringsChecker.isSimple("%1$s"));
}
@Test
@@ -58,6 +62,7 @@ public class EfficientStringsCheckerTest {
" String.format(\"foo %s bar\", str);",
" // BUG: Diagnostic contains:",
" String.format(\"foo %d bar\", 42);",
+ " // BUG: Diagnostic contains:",
" String.format(\"foo %04d bar\", 42);",
" }",
" public void exampleLocale(String str) {",
@@ -66,6 +71,7 @@ public class EfficientStringsCheckerTest {
" String.format(Locale.US, \"foo %s bar\", str);",
" // BUG: Diagnostic contains:",
" String.format(Locale.US, \"foo %d bar\", 42);",
+ " // BUG: Diagnostic contains:",
" String.format(Locale.US, \"foo %04d bar\", 42);",
" }",
"}")