Merge "Improve the Device menu"
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MissingClassDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MissingClassDetector.java
index dac3b82..d4f4e95 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/MissingClassDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/MissingClassDetector.java
@@ -209,8 +209,9 @@
 
     @Override
     public void afterCheckProject(@NonNull Context context) {
-        if (!context.getProject().isLibrary() && mReferencedClasses != null &&
-                !mReferencedClasses.isEmpty()) {
+        if (!context.getProject().isLibrary()
+                && mReferencedClasses != null && !mReferencedClasses.isEmpty()
+                && context.getDriver().getScope().contains(Scope.CLASS_FILE)) {
             List<String> classes = new ArrayList<String>(mReferencedClasses.keySet());
             Collections.sort(classes);
             for (String owner : classes) {
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/AbstractCheckTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/AbstractCheckTest.java
index 8469644..8b06c4d 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/AbstractCheckTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/AbstractCheckTest.java
@@ -31,6 +31,7 @@
 import com.android.tools.lint.detector.api.Issue;
 import com.android.tools.lint.detector.api.Location;
 import com.android.tools.lint.detector.api.Project;
+import com.android.tools.lint.detector.api.Scope;
 import com.android.tools.lint.detector.api.Severity;
 import com.google.common.io.Files;
 import com.google.common.io.InputSupplier;
@@ -46,6 +47,7 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.List;
 
 import junit.framework.TestCase;
@@ -304,6 +306,10 @@
         return result;
     }
 
+    protected EnumSet<Scope> getLintScope(List<File> file) {
+        return null;
+    }
+
     public class TestLintClient extends Main {
         private StringWriter mWriter = new StringWriter();
 
@@ -313,7 +319,7 @@
 
         public String analyze(List<File> files) throws Exception {
             mDriver = new LintDriver(new CustomIssueRegistry(), this);
-            mDriver.analyze(files, null /* scope */);
+            mDriver.analyze(files, getLintScope(files));
 
             Collections.sort(mWarnings);
 
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/MissingClassDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/MissingClassDetectorTest.java
index d8f18b6..cda68a1 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/MissingClassDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/MissingClassDetectorTest.java
@@ -17,18 +17,29 @@
 package com.android.tools.lint.checks;
 
 import com.android.tools.lint.detector.api.Detector;
+import com.android.tools.lint.detector.api.Scope;
 
 import java.io.File;
 import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.List;
 
 @SuppressWarnings("javadoc")
 public class MissingClassDetectorTest extends AbstractCheckTest {
+    private EnumSet<Scope> mScopes;
+
     @Override
     protected Detector getDetector() {
         return new MissingClassDetector();
     }
 
+    @Override
+    protected EnumSet<Scope> getLintScope(List<File> file) {
+        return mScopes;
+    }
+
     public void test() throws Exception {
+        mScopes = null;
         assertEquals(
             "AndroidManifest.xml:13: Error: Class referenced in the manifest, test.pkg.TestProvider, was not found in the project or the libraries [MissingRegistered]\n" +
             "        <activity android:name=\".TestProvider\" />\n" +
@@ -53,7 +64,19 @@
             ));
     }
 
+    public void testIncrementalInManifest() throws Exception {
+        mScopes = Scope.MANIFEST_SCOPE;
+        assertEquals(
+            "No warnings.",
+
+            lintProject(
+                "bytecode/AndroidManifestWrongRegs.xml=>AndroidManifest.xml",
+                "bytecode/.classpath=>.classpath"
+            ));
+    }
+
     public void testOkClasses() throws Exception {
+        mScopes = null;
         assertEquals(
             "No warnings.",
 
@@ -74,6 +97,7 @@
     }
 
     public void testOkLibraries() throws Exception {
+        mScopes = null;
         assertEquals(
             "No warnings.",
 
@@ -85,6 +109,7 @@
     }
 
     public void testLibraryProjects() throws Exception {
+        mScopes = null;
         File master = getProjectDir("MasterProject",
                 // Master project
                 "bytecode/AndroidManifestWrongRegs.xml=>AndroidManifest.xml",
@@ -115,6 +140,7 @@
     }
 
     public void testInnerClassStatic() throws Exception {
+        mScopes = null;
         assertEquals(
             "src/test/pkg/Foo.java:8: Warning: This inner class should be static (test.pkg.Foo.Baz) [Instantiatable]\n" +
             "    public class Baz extends Activity {\n" +
@@ -132,6 +158,7 @@
     }
 
     public void testInnerClassPublic() throws Exception {
+        mScopes = null;
         assertEquals(
             "src/test/pkg/Foo/Bar.java:6: Warning: The default constructor must be public [Instantiatable]\n" +
             "    private Bar() {\n" +
@@ -147,6 +174,7 @@
     }
 
     public void testInnerClass() throws Exception {
+        mScopes = null;
         assertEquals(
             "AndroidManifest.xml:14: Error: Class referenced in the manifest, test.pkg.Foo.Bar, was not found in the project or the libraries [MissingRegistered]\n" +
             "        <activity\n" +
@@ -164,6 +192,7 @@
     }
 
     public void testInnerClass2() throws Exception {
+        mScopes = null;
         assertEquals(
             "AndroidManifest.xml:14: Error: Class referenced in the manifest, test.pkg.Foo.Bar, was not found in the project or the libraries [MissingRegistered]\n" +
             "        <activity\n" +
@@ -178,6 +207,7 @@
     }
 
     public void testWrongSeparator1() throws Exception {
+        mScopes = null;
         assertEquals(
             "AndroidManifest.xml:14: Error: Class referenced in the manifest, test.pkg.Foo.Bar, was not found in the project or the libraries [MissingRegistered]\n" +
             "        <activity\n" +
@@ -192,6 +222,7 @@
     }
 
     public void testWrongSeparator2() throws Exception {
+        mScopes = null;
         assertEquals(
             "AndroidManifest.xml:14: Error: Class referenced in the manifest, test.pkg.Foo.Bar, was not found in the project or the libraries [MissingRegistered]\n" +
             "        <activity\n" +