diff options
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(); + } +} |