Discover all SDK libraries.

R=brianwilkerson@google.com

Change-Id: Icfd881400179fc2c224945d5f013e2137b3d5fdf
Reviewed-on: https://dart-review.googlesource.com/58041
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 62b19d3..9dd6142 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -2284,11 +2284,18 @@
    * task should continue to be run.
    */
   void perform() {
-    // Prepare the iterator of package/lib folders.
     if (folderIterator == null) {
-      // Always discover added files.
       files.addAll(driver.addedFiles);
 
+      // Discover SDK libraries.
+      var dartSdk = driver._sourceFactory.dartSdk;
+      if (dartSdk != null) {
+        for (var sdkLibrary in dartSdk.sdkLibraries) {
+          files.add(sdkLibrary.path);
+        }
+      }
+
+      // Discover files in package/lib folders.
       var packageMap = driver._sourceFactory.packageMap;
       if (packageMap != null) {
         folderIterator = packageMap.values.expand((f) => f).iterator;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index da10edf..c442c84 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1108,7 +1108,7 @@
     expect(session2, isNot(session1));
   }
 
-  test_discoverAvailableFiles() async {
+  test_discoverAvailableFiles_packages() async {
     var t = _p('/test/lib/test.dart');
     var a1 = _p('/aaa/lib/a1.dart');
     var a2 = _p('/aaa/lib/src/a2.dart');
@@ -1140,6 +1140,21 @@
     await driver.discoverAvailableFiles();
   }
 
+  test_discoverAvailableFiles_sdk() async {
+    await driver.discoverAvailableFiles();
+
+    void assertHasDartUri(String uri) {
+      var file = sdk.mapDartUri(uri).fullName;
+      expect(driver.knownFiles, contains(file));
+    }
+
+    assertHasDartUri('dart:async');
+    assertHasDartUri('dart:collection');
+    assertHasDartUri('dart:convert');
+    assertHasDartUri('dart:core');
+    assertHasDartUri('dart:math');
+  }
+
   test_errors_uriDoesNotExist_export() async {
     addTestFile(r'''
 export 'foo.dart';