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;
}