aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-07-23 15:05:10 -0700
committerTor Norbye <tnorbye@google.com>2012-07-23 15:17:35 -0700
commitdb39de536209298ed0c09a0e5aaf69c9df5715d3 (patch)
treee3806402e216fc1f5c2495872a641aa84abee2c9
parent099c517c0d151cfb096c829e95737aa81b81ee1c (diff)
downloadsdk-db39de536209298ed0c09a0e5aaf69c9df5715d3.zip
sdk-db39de536209298ed0c09a0e5aaf69c9df5715d3.tar.gz
sdk-db39de536209298ed0c09a0e5aaf69c9df5715d3.tar.bz2
Tweaks to the lint CLI offsets
Change-Id: I20592372d41235b36227a0d36014d77c23c7fc58
-rw-r--r--common/src/com/android/util/PositionXmlParser.java3
-rw-r--r--lint/cli/src/com/android/tools/lint/Main.java18
-rw-r--r--lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java6
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java4
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java4
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java32
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java7
7 files changed, 48 insertions, 26 deletions
diff --git a/common/src/com/android/util/PositionXmlParser.java b/common/src/com/android/util/PositionXmlParser.java
index 08aeb0a..fe22f58 100644
--- a/common/src/com/android/util/PositionXmlParser.java
+++ b/common/src/com/android/util/PositionXmlParser.java
@@ -356,7 +356,8 @@ public class PositionXmlParser {
Position attributePosition = createPosition(line, column, index);
// Also set end range for retrieval in getLocation
- attributePosition.setEnd(createPosition(line, column, matcher.end()));
+ attributePosition.setEnd(createPosition(line, column + matcher.end() - index,
+ matcher.end()));
return attributePosition;
} else {
// No regexp match either: just fall back to element position
diff --git a/lint/cli/src/com/android/tools/lint/Main.java b/lint/cli/src/com/android/tools/lint/Main.java
index 18a2da0..24c7cda 100644
--- a/lint/cli/src/com/android/tools/lint/Main.java
+++ b/lint/cli/src/com/android/tools/lint/Main.java
@@ -1008,7 +1008,23 @@ public class Main extends LintClient {
for (int i = 0; i < column; i++) {
sb.append(' ');
}
- sb.append('^');
+
+ boolean displayCaret = true;
+ Position endPosition = location.getEnd();
+ if (endPosition != null) {
+ int endLine = endPosition.getLine();
+ int endColumn = endPosition.getColumn();
+ if (endLine == line && endColumn > column) {
+ for (int i = column; i < endColumn; i++) {
+ sb.append("~");
+ }
+ displayCaret = false;
+ }
+ }
+
+ if (displayCaret) {
+ sb.append('^');
+ }
sb.append('\n');
warning.errorLine = sb.toString();
}
diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java
index f5e7595..1e3b9fa 100644
--- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java
+++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/Location.java
@@ -243,7 +243,7 @@ public class Location {
}
char c = contents.charAt(offset);
if (c == '\n') {
- lineOffset = offset;
+ lineOffset = offset + 1;
line++;
}
}
@@ -353,6 +353,10 @@ public class Location {
return new Location(file, new DefaultPosition(line, column, index),
new DefaultPosition(line, -1, end + patternEnd.length()));
}
+ } else if (hints != null && (hints.isJavaSymbol() || hints.isWholeWord())) {
+ return new Location(file, new DefaultPosition(line, column, index),
+ new DefaultPosition(line, column + patternStart.length(),
+ index + patternStart.length()));
}
return new Location(file, new DefaultPosition(line, column, index),
new DefaultPosition(line, column, index + patternStart.length()));
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java
index b644b14..79cea2e 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ButtonDetector.java
@@ -249,7 +249,7 @@ public class ButtonDetector extends ResourceXmlDetector {
&& isEnglishResource(context)
&& context.isEnabled(CASE)) {
assert label.equalsIgnoreCase(CANCEL_LABEL);
- context.report(CASE, context.getLocation(element),
+ context.report(CASE, context.getLocation(child),
String.format(
"The standard Android way to capitalize %1$s " +
"is \"Cancel\" (tip: use @android:string/ok instead)",
@@ -266,7 +266,7 @@ public class ButtonDetector extends ResourceXmlDetector {
&& isEnglishResource(context)
&& context.isEnabled(CASE)) {
assert text.equalsIgnoreCase(OK_LABEL);
- context.report(CASE, context.getLocation(element),
+ context.report(CASE, context.getLocation(child),
String.format(
"The standard Android way to capitalize %1$s " +
"is \"OK\" (tip: use @android:string/ok instead)",
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java
index 70e0723..a60e206 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TranslationDetector.java
@@ -422,7 +422,7 @@ public class TranslationDetector extends ResourceXmlDetector {
return;
}
- Location location = context.getLocation(element);
+ Location location = context.getLocation(attribute);
location.setClientData(element);
location.setSecondary(mMissingLocations.get(name));
mMissingLocations.put(name, location);
@@ -433,7 +433,7 @@ public class TranslationDetector extends ResourceXmlDetector {
mExtraLocations.remove(name);
return;
}
- Location location = context.getLocation(element);
+ Location location = context.getLocation(attribute);
location.setClientData(element);
location.setMessage("Also translated here");
location.setSecondary(mExtraLocations.get(name));
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java
index 5ad52b3..5ddc75b 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/TypographyDetector.java
@@ -226,7 +226,7 @@ public class TypographyDetector extends ResourceXmlDetector {
Node child = childNodes.item(i);
if (child.getNodeType() == Node.TEXT_NODE) {
String text = child.getNodeValue();
- checkText(context, element, text);
+ checkText(context, element, child, text);
} else if (child.getNodeType() == Node.ELEMENT_NODE &&
child.getParentNode().getNodeName().equals(TAG_STRING_ARRAY)) {
// String array item children
@@ -235,19 +235,19 @@ public class TypographyDetector extends ResourceXmlDetector {
Node item = items.item(j);
if (item.getNodeType() == Node.TEXT_NODE) {
String text = item.getNodeValue();
- checkText(context, child, text);
+ checkText(context, child, item, text);
}
}
}
}
}
- private void checkText(XmlContext context, Node element, String text) {
+ private void checkText(XmlContext context, Node element, Node textNode, String text) {
if (mCheckEllipsis) {
// Replace ... with ellipsis character?
int ellipsis = text.indexOf("..."); //$NON-NLS-1$
if (ellipsis != -1 && !text.startsWith(".", ellipsis + 3)) { //$NON-NLS-1$
- context.report(ELLIPSIS, element, context.getLocation(element),
+ context.report(ELLIPSIS, element, context.getLocation(textNode),
ELLIPSIS_MESSAGE, null);
}
}
@@ -267,7 +267,7 @@ public class TypographyDetector extends ResourceXmlDetector {
Character.isWhitespace(matcher.group(1).charAt(
matcher.group(1).length() - 1));
if (!isNegativeNumber) {
- context.report(DASHES, element, context.getLocation(element),
+ context.report(DASHES, element, context.getLocation(textNode),
EN_DASH_MESSAGE,
null);
}
@@ -278,7 +278,7 @@ public class TypographyDetector extends ResourceXmlDetector {
// Don't suggest replacing -- or "--" with an m dash since these are sometimes
// used as digit marker strings
if (emdash > 1 && !text.startsWith("-", emdash + 2)) { //$NON-NLS-1$
- context.report(DASHES, element, context.getLocation(element),
+ context.report(DASHES, element, context.getLocation(textNode),
EM_DASH_MESSAGE, null);
}
}
@@ -292,7 +292,7 @@ public class TypographyDetector extends ResourceXmlDetector {
if (quoteEnd != -1 && quoteEnd > quoteStart + 1
&& (quoteEnd < text.length() -1 || quoteStart > 0)
&& SINGLE_QUOTE.matcher(text).matches()) {
- context.report(QUOTES, element, context.getLocation(element),
+ context.report(QUOTES, element, context.getLocation(textNode),
SINGLE_QUOTE_MESSAGE, null);
return;
}
@@ -300,7 +300,7 @@ public class TypographyDetector extends ResourceXmlDetector {
// Check for apostrophes that can be replaced by typographic apostrophes
if (quoteEnd == -1 && quoteStart > 0
&& Character.isLetterOrDigit(text.charAt(quoteStart - 1))) {
- context.report(QUOTES, element, context.getLocation(element),
+ context.report(QUOTES, element, context.getLocation(textNode),
TYPOGRAPHIC_APOSTROPHE_MESSAGE, null);
return;
}
@@ -312,7 +312,7 @@ public class TypographyDetector extends ResourceXmlDetector {
int quoteEnd = text.indexOf('"', quoteStart + 1);
if (quoteEnd != -1 && quoteEnd > quoteStart + 1) {
if (quoteEnd < text.length() -1 || quoteStart > 0) {
- context.report(QUOTES, element, context.getLocation(element),
+ context.report(QUOTES, element, context.getLocation(textNode),
DBL_QUOTES_MESSAGE, null);
return;
}
@@ -322,7 +322,7 @@ public class TypographyDetector extends ResourceXmlDetector {
// Check for grave accent quotations
if (text.indexOf('`') != -1 && GRAVE_QUOTATION.matcher(text).matches()) {
// Are we indenting ``like this'' or `this' ? If so, complain
- context.report(QUOTES, element, context.getLocation(element),
+ context.report(QUOTES, element, context.getLocation(textNode),
GRAVE_QUOTE_MESSAGE, null);
return;
}
@@ -341,19 +341,19 @@ public class TypographyDetector extends ResourceXmlDetector {
String top = matcher.group(1); // Numerator
String bottom = matcher.group(2); // Denominator
if (top.equals("1") && bottom.equals("2")) { //$NON-NLS-1$ //$NON-NLS-2$
- context.report(FRACTIONS, element, context.getLocation(element),
+ context.report(FRACTIONS, element, context.getLocation(textNode),
String.format(FRACTION_MESSAGE, '\u00BD', "&#189;", "1/2"), null);
} else if (top.equals("1") && bottom.equals("4")) { //$NON-NLS-1$ //$NON-NLS-2$
- context.report(FRACTIONS, element, context.getLocation(element),
+ context.report(FRACTIONS, element, context.getLocation(textNode),
String.format(FRACTION_MESSAGE, '\u00BC', "&#188;", "1/4"), null);
} else if (top.equals("3") && bottom.equals("4")) { //$NON-NLS-1$ //$NON-NLS-2$
- context.report(FRACTIONS, element, context.getLocation(element),
+ context.report(FRACTIONS, element, context.getLocation(textNode),
String.format(FRACTION_MESSAGE, '\u00BE', "&#190;", "3/4"), null);
} else if (top.equals("1") && bottom.equals("3")) { //$NON-NLS-1$ //$NON-NLS-2$
- context.report(FRACTIONS, element, context.getLocation(element),
+ context.report(FRACTIONS, element, context.getLocation(textNode),
String.format(FRACTION_MESSAGE, '\u2153', "&#8531;", "1/3"), null);
} else if (top.equals("2") && bottom.equals("3")) { //$NON-NLS-1$ //$NON-NLS-2$
- context.report(FRACTIONS, element, context.getLocation(element),
+ context.report(FRACTIONS, element, context.getLocation(textNode),
String.format(FRACTION_MESSAGE, '\u2154', "&#8532;", "2/3"), null);
}
}
@@ -364,7 +364,7 @@ public class TypographyDetector extends ResourceXmlDetector {
if (text.indexOf('(') != -1
&& (text.contains("(c)") || text.contains("(C)"))) { //$NON-NLS-1$ //$NON-NLS-2$
// Suggest replacing with copyright symbol?
- context.report(OTHER, element, context.getLocation(element),
+ context.report(OTHER, element, context.getLocation(textNode),
COPYRIGHT_MESSAGE, null);
// Replace (R) and TM as well? There are unicode characters for these but they
// are probably not very common within Android app strings.
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
index 2524a78..a593f1f 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
@@ -337,8 +337,9 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec
public void visitElement(@NonNull XmlContext context, @NonNull Element element) {
if (TAG_RESOURCES.equals(element.getTagName())) {
for (Element item : LintUtils.getChildren(element)) {
- String name = item.getAttribute(ATTR_NAME);
- if (name.length() > 0) {
+ Attr nameAttribute = item.getAttributeNode(ATTR_NAME);
+ if (nameAttribute != null) {
+ String name = nameAttribute.getValue();
if (name.indexOf('.') != -1) {
name = name.replace('.', '_');
}
@@ -363,7 +364,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec
mUnused.remove(resource);
return;
}
- recordLocation(resource, context.getLocation(item));
+ recordLocation(resource, context.getLocation(nameAttribute));
}
}
}