aboutsummaryrefslogtreecommitdiffstats
path: root/lint/libs
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-11-20 10:20:29 -0800
committerTor Norbye <tnorbye@google.com>2012-11-20 10:22:36 -0800
commitdae3cab9a279b5e0a31ed51c12ab6f9fb5c9ae58 (patch)
tree10d9554fc048c7fbffb73b5336106f0dd4e48dd5 /lint/libs
parent58f08e38bdba9e7d594802d0e3c9f7f5549382a1 (diff)
downloadsdk-dae3cab9a279b5e0a31ed51c12ab6f9fb5c9ae58.zip
sdk-dae3cab9a279b5e0a31ed51c12ab6f9fb5c9ae58.tar.gz
sdk-dae3cab9a279b5e0a31ed51c12ab6f9fb5c9ae58.tar.bz2
Issue 39599: Fix typo detector to handle escapes
Fix handling of escapes in the lint typo detector This fixes 39599: LINT 21: Type flags incorrectly Also fixes a description typo (issue 39554) Change-Id: I48e651f8a314b025dc31063d517de57e0419351a
Diffstat (limited to 'lint/libs')
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java2
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/TypoDetector.java47
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values-de/typos.xml2
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/typos.xml7
4 files changed, 45 insertions, 13 deletions
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java
index bc5084f..71b5191 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ManifestOrderDetector.java
@@ -85,7 +85,7 @@ public class ManifestOrderDetector extends Detector implements Detector.XmlScann
"Checks that the minimum SDK and target SDK attributes are defined",
"The manifest should contain a `<uses-sdk>` element which defines the " +
- "minimum minimum API Level required for the application to run, " +
+ "minimum API Level required for the application to run, " +
"as well as the target version (the highest API level you have tested " +
"the version for.)",
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypoDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypoDetector.java
index 6f85505..7a38d97 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypoDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypoDetector.java
@@ -16,8 +16,8 @@
package com.android.tools.lint.checks;
-import static com.android.tools.lint.checks.TypoLookup.isLetter;
import static com.android.SdkConstants.TAG_STRING;
+import static com.android.tools.lint.checks.TypoLookup.isLetter;
import static com.google.common.base.Objects.equal;
import com.android.annotations.NonNull;
@@ -183,15 +183,27 @@ public class TypoDetector extends ResourceXmlDetector {
int index = 0;
boolean checkedTypos = false;
while (index < max) {
- while (index < max && !Character.isLetter(text.charAt(index))) {
- index++;
+ for (; index < max; index++) {
+ char c = text.charAt(index);
+ if (c == '\\') {
+ index++;
+ continue;
+ } else if (Character.isLetter(c)) {
+ break;
+ }
}
- if (index == max) {
+ if (index >= max) {
return;
}
int begin = index;
- while (index < max && Character.isLetter(text.charAt(index))) {
- if (text.charAt(index) >= 0x80) {
+ for (; index < max; index++) {
+ char c = text.charAt(index);
+ if (c == '\\') {
+ index++;
+ break;
+ } else if (!Character.isLetter(c)) {
+ break;
+ } else if (text.charAt(index) >= 0x80) {
// Switch to UTF-8 handling for this string
if (checkedTypos) {
// If we've already checked words we may have reported typos
@@ -207,7 +219,6 @@ public class TypoDetector extends ResourceXmlDetector {
}
return;
}
- index++;
}
int end = index;
@@ -228,7 +239,13 @@ public class TypoDetector extends ResourceXmlDetector {
// Find beginning of word
while (index < byteEnd) {
byte b = utf8Text[index];
- if (isLetter(b)) {
+ if (b == '\\') {
+ index++;
+ charStart++;
+ if (index < byteEnd) {
+ b = utf8Text[index];
+ }
+ } else if (isLetter(b)) {
break;
}
index++;
@@ -238,7 +255,7 @@ public class TypoDetector extends ResourceXmlDetector {
}
}
- if (index == byteEnd) {
+ if (index >= byteEnd) {
return;
}
int charEnd = charStart;
@@ -248,7 +265,17 @@ public class TypoDetector extends ResourceXmlDetector {
// bytes won't match these ASCII characters (because the high bit must be set there)
while (index < byteEnd) {
byte b = utf8Text[index];
- if (!isLetter(b)) {
+ if (b == '\\') {
+ index++;
+ charEnd++;
+ if (index < byteEnd) {
+ b = utf8Text[index++];
+ if ((b & 0x80) == 0 || (b & 0xC0) == 0xC0) {
+ charEnd++;
+ }
+ }
+ break;
+ } else if (!isLetter(b)) {
break;
}
index++;
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values-de/typos.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values-de/typos.xml
index 9583fc7..5108cc9 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values-de/typos.xml
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values-de/typos.xml
@@ -8,5 +8,7 @@
</string>
<string name="s2">(Authorisierungscode!)</string>
<string name="s3"> zurück gefoobaren!</string>
+ <!-- escaped separator -->
+ <string name="issue39599">"ü test\nciht zu"</string>
</resources>
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/typos.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/typos.xml
index a94be49..dd24812 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/typos.xml
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/typos.xml
@@ -18,5 +18,8 @@
<string name="s8">OK Cancel dialog with a long message</string>
<!-- case changes only: invalid -->
<string name="dlg_button_ok">Ok</string>
-</resources>
-
+ <!-- escaped separator -->
+ <string name="issue39599">"Please take a moment\nto rate ^1"</string>
+ <!-- escaped separator 2 -->
+ <string name="issue39599_2">"\nto</string>
+</resources> \ No newline at end of file