Make CoreType test friendly

The classes Future and Stream are exported by dart:core.
By attempting to look up FutureOr in dart:core before dart:async,
we support simple a simple test scenario where there's only one
platform library.

Change-Id: I76627f89957b91fbdb52a7772c177a769c37cecb
Reviewed-on: https://dart-review.googlesource.com/c/90381
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index a9e0f26..5943e16 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1114,6 +1114,8 @@
 import 'dart:_internal';
 import 'dart:async';
 
+export 'dart:async' show Future, Stream;
+
 print(object) {}
 
 class Iterator {}
diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 9df95ca..504eea5 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -204,11 +204,12 @@
   }
 
   Class get futureClass {
-    return _futureClass ??= index.getClass('dart:async', 'Future');
+    return _futureClass ??= index.getClass('dart:core', 'Future');
   }
 
   Class get futureOrClass {
-    return _futureOrClass ??= index.getClass('dart:async', 'FutureOr');
+    return _futureOrClass ??= (index.tryGetClass('dart:core', 'FutureOr') ??
+        index.getClass('dart:async', 'FutureOr'));
   }
 
   Procedure get identicalProcedure {
@@ -316,7 +317,7 @@
   }
 
   Class get streamClass {
-    return _streamClass ??= index.getClass('dart:async', 'Stream');
+    return _streamClass ??= index.getClass('dart:core', 'Stream');
   }
 
   Member get streamIteratorSubscription {
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index 0f5ab16..abebaa4 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -141,6 +141,12 @@
       for (var class_ in library.classes) {
         _classes[class_.name] = new _MemberTable(this, class_);
       }
+      for (Reference reference in library.additionalExports) {
+        NamedNode node = reference.node;
+        if (node is Class) {
+          _classes[node.name] = new _MemberTable(this, node);
+        }
+      }
     }
     return _classes;
   }