aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lint/cli/src/com/android/tools/lint/LombokParser.java4
-rw-r--r--lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java25
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java2
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java12
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/Foo.java.txt7
5 files changed, 48 insertions, 2 deletions
diff --git a/lint/cli/src/com/android/tools/lint/LombokParser.java b/lint/cli/src/com/android/tools/lint/LombokParser.java
index 2c263c6..bc841e2 100644
--- a/lint/cli/src/com/android/tools/lint/LombokParser.java
+++ b/lint/cli/src/com/android/tools/lint/LombokParser.java
@@ -48,6 +48,8 @@ public class LombokParser implements IJavaParser {
// Don't analyze files containing errors
List<ParseProblem> problems = source.getProblems();
if (problems != null && problems.size() > 0) {
+ context.getDriver().setHasParserErrors(true);
+
/* Silently ignore the errors. There are still some bugs in Lombok/Parboiled
* (triggered if you run lint on the AOSP framework directory for example),
* and having these show up as fatal errors when it's really a tool bug
@@ -61,7 +63,7 @@ public class LombokParser implements IJavaParser {
// See http://code.google.com/p/projectlombok/issues/detail?id=313
String message = problem.getMessage();
context.report(
- IssueRegistry.PARSER_ERROR, location,
+ com.android.tools.lint.client.api.IssueRegistry.PARSER_ERROR, location,
message,
null);
diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java
index 352fd1d..068bf2a 100644
--- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java
+++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/LintDriver.java
@@ -129,6 +129,7 @@ public class LintDriver {
private Project[] mCurrentProjects;
private Project mCurrentProject;
private boolean mAbbreviating = true;
+ private boolean mParserErrors;
/**
* Creates a new {@link LintDriver}
@@ -230,6 +231,30 @@ public class LintDriver {
}
/**
+ * Returns whether lint has encountered any files with fatal parser errors
+ * (e.g. broken source code, or even broken parsers)
+ * <p>
+ * This is useful for checks that need to make sure they've seen all data in
+ * order to be conclusive (such as an unused resource check).
+ *
+ * @return true if any files were not properly processed because they
+ * contained parser errors
+ */
+ public boolean hasParserErrors() {
+ return mParserErrors;
+ }
+
+ /**
+ * Sets whether lint has encountered files with fatal parser errors.
+ *
+ * @see #hasParserErrors()
+ * @param hasErrors whether parser errors have been encountered
+ */
+ public void setHasParserErrors(boolean hasErrors) {
+ mParserErrors = hasErrors;
+ }
+
+ /**
* Returns the projects being analyzed
*
* @return the projects being analyzed
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 bcbdd85..3217a09 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
@@ -227,7 +227,7 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec
unused.removeAll(ids);
}
- if (unused.size() > 0) {
+ if (unused.size() > 0 && !context.getDriver().hasParserErrors()) {
mUnused = new HashMap<String, Location>(unused.size());
for (String resource : unused) {
mUnused.put(resource, null);
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
index c21c1b1..4bd5a88 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
@@ -252,4 +252,16 @@ public class UnusedResourceDetectorTest extends AbstractCheckTest {
checkLint(Arrays.asList(master, library)));
}
+
+ public void testCornerCase() throws Exception {
+ // See http://code.google.com/p/projectlombok/issues/detail?id=415
+ mEnableIds = true;
+ assertEquals(
+ "No warnings.",
+
+ lintProject(
+ "res/layout/accessibility.xml",
+ "src/test/pkg/Foo.java.txt=>src/test/pkg/Foo.java",
+ "AndroidManifest.xml"));
+ }
}
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/Foo.java.txt b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/Foo.java.txt
new file mode 100644
index 0000000..6e16a72
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/Foo.java.txt
@@ -0,0 +1,7 @@
+// http://code.google.com/p/projectlombok/issues/detail?id=415
+package test.pkg;
+public class X {
+ public void X(Y parent) {
+ parent.new Z(parent.getW()).execute();
+ }
+}