| Index: runtime/vm/dart_api_impl.cc
|
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
|
| index 343f5979e5eb58182c2db3e23f8a40b3ce59e176..e1c2acacbdeb27286fb118e1a10d79ad1abb2ffd 100644
|
| --- a/runtime/vm/dart_api_impl.cc
|
| +++ b/runtime/vm/dart_api_impl.cc
|
| @@ -5718,6 +5718,42 @@ DART_EXPORT Dart_Handle Dart_LibraryImportLibrary(Dart_Handle library,
|
| }
|
|
|
|
|
| +DART_EXPORT Dart_Handle Dart_GetImportsOfScheme(Dart_Handle scheme) {
|
| + DARTSCOPE(Thread::Current());
|
| + Isolate* I = T->isolate();
|
| + const String& scheme_vm = Api::UnwrapStringHandle(Z, scheme);
|
| + if (scheme_vm.IsNull()) {
|
| + RETURN_TYPE_ERROR(Z, scheme, String);
|
| + }
|
| +
|
| + const GrowableObjectArray& libraries =
|
| + GrowableObjectArray::Handle(Z, I->object_store()->libraries());
|
| + const GrowableObjectArray& result =
|
| + GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
|
| + Library& importer = Library::Handle(Z);
|
| + Array& imports = Array::Handle(Z);
|
| + Namespace& ns = Namespace::Handle(Z);
|
| + Library& importee = Library::Handle(Z);
|
| + String& importee_uri = String::Handle(Z);
|
| + for (intptr_t i = 0; i < libraries.Length(); i++) {
|
| + importer ^= libraries.At(i);
|
| + imports = importer.imports();
|
| + for (intptr_t j = 0; j < imports.Length(); j++) {
|
| + ns ^= imports.At(j);
|
| + if (ns.IsNull()) continue;
|
| + importee = ns.library();
|
| + importee_uri = importee.url();
|
| + if (importee_uri.StartsWith(scheme_vm)) {
|
| + result.Add(importer);
|
| + result.Add(importee);
|
| + }
|
| + }
|
| + }
|
| +
|
| + return Api::NewHandle(T, Array::MakeArray(result));
|
| +}
|
| +
|
| +
|
| DART_EXPORT Dart_Handle Dart_LoadSource(Dart_Handle library,
|
| Dart_Handle url,
|
| Dart_Handle resolved_url,
|
|
|