blob: a770071c8988d0f89c6a316fbac207a44dbe0a22 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of dart.async;
/**
* Indicates that loading of [libraryName] is deferred.
*
* Applies to library imports, when used as metadata.
*
* Example usage:
*
* @lazy
* import 'foo.dart' as foo;
*
* const lazy = const DeferredLibrary('com.example.foo');
*
* void main() {
* foo.method(); // Throws a NoSuchMethodError, foo is not loaded yet.
* lazy.load().then(onFooLoaded);
* }
*
* void onFooLoaded(_) {
* foo.method();
* }
*/
class DeferredLibrary {
final String libraryName;
final String uri;
const DeferredLibrary(this.libraryName, {this.uri});
/**
* Ensure that [libraryName] has been loaded.
*
* If the library fails to load, the Future will complete with a
* DeferredLoadException.
*/
external Future<Null> load();
}
/**
* Thrown when a deferred library fails to load.
*/
class DeferredLoadException implements Exception {
DeferredLoadException(String this._s);
String toString() => "DeferredLoadException: '$_s'";
final String _s;
}