OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library dart2js.library_loader; | 5 library dart2js.library_loader; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'common/names.dart' show Uris; | 9 import 'common/names.dart' show Uris; |
10 import 'common/tasks.dart' show CompilerTask, GenericTask; | 10 import 'common/tasks.dart' show CompilerTask, Measurer; |
11 import 'common.dart'; | 11 import 'common.dart'; |
12 import 'compiler.dart' show Compiler; | |
13 import 'elements/elements.dart' | 12 import 'elements/elements.dart' |
14 show | 13 show |
15 CompilationUnitElement, | 14 CompilationUnitElement, |
16 Element, | 15 Element, |
17 ImportElement, | 16 ImportElement, |
18 ExportElement, | 17 ExportElement, |
19 LibraryElement; | 18 LibraryElement; |
20 import 'elements/modelx.dart' | 19 import 'elements/modelx.dart' |
21 show | 20 show |
22 CompilationUnitElementX, | 21 CompilationUnitElementX, |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 * 'sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart'. This is done | 107 * 'sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart'. This is done |
109 * through a [ResolvedUriTranslator] provided from the compiler. The translator | 108 * through a [ResolvedUriTranslator] provided from the compiler. The translator |
110 * checks whether a library by that name exists and in case of internal | 109 * checks whether a library by that name exists and in case of internal |
111 * libraries whether access is granted. | 110 * libraries whether access is granted. |
112 * | 111 * |
113 * ## Resource URI ## | 112 * ## Resource URI ## |
114 * | 113 * |
115 * A 'resource URI' is an absolute URI with a scheme supported by the input | 114 * A 'resource URI' is an absolute URI with a scheme supported by the input |
116 * provider. For the standard implementation this means a URI with the 'file' | 115 * provider. For the standard implementation this means a URI with the 'file' |
117 * scheme. Readable URIs are converted into resource URIs as part of the | 116 * scheme. Readable URIs are converted into resource URIs as part of the |
118 * [Compiler.readScript] method. In the standard implementation the package URIs | 117 * [ScriptLoader.readScript] method. In the standard implementation the package |
119 * are converted to file URIs using the package root URI provided on the | 118 * URIs are converted to file URIs using the package root URI provided on the |
120 * command line as base. If the package root URI is | 119 * command line as base. If the package root URI is |
121 * 'file:///current/working/dir/' then the package URI 'package:foo/bar.dart' | 120 * 'file:///current/working/dir/' then the package URI 'package:foo/bar.dart' |
122 * will be resolved to the resource URI | 121 * will be resolved to the resource URI |
123 * 'file:///current/working/dir/foo/bar.dart'. | 122 * 'file:///current/working/dir/foo/bar.dart'. |
124 * | 123 * |
125 * The distinction between readable URI and resource URI is necessary to ensure | 124 * The distinction between readable URI and resource URI is necessary to ensure |
126 * that these imports | 125 * that these imports |
127 * | 126 * |
128 * import 'package:foo.dart' as a; | 127 * import 'package:foo.dart' as a; |
129 * import 'packages/foo.dart' as b; | 128 * import 'packages/foo.dart' as b; |
130 * | 129 * |
131 * do _not_ resolve to the same library when the package root URI happens to | 130 * do _not_ resolve to the same library when the package root URI happens to |
132 * point to the 'packages' folder. | 131 * point to the 'packages' folder. |
133 * | 132 * |
134 */ | 133 */ |
135 abstract class LibraryLoaderTask implements CompilerTask { | 134 abstract class LibraryLoaderTask implements CompilerTask { |
136 factory LibraryLoaderTask( | 135 factory LibraryLoaderTask( |
137 Compiler compiler, | |
138 ResolvedUriTranslator uriTranslator, | 136 ResolvedUriTranslator uriTranslator, |
139 ScriptLoader scriptLoader, | 137 ScriptLoader scriptLoader, |
140 ElementScanner scriptScanner, | 138 ElementScanner scriptScanner, |
141 LibraryDeserializer deserializer, | 139 LibraryDeserializer deserializer, |
142 LibraryLoaderListener listener, | 140 LibraryLoaderListener listener, |
143 Environment environment) = _LibraryLoaderTask; | 141 Environment environment, |
| 142 DiagnosticReporter reporter, |
| 143 Measurer measurer) = _LibraryLoaderTask; |
144 | 144 |
145 /// Returns all libraries that have been loaded. | 145 /// Returns all libraries that have been loaded. |
146 Iterable<LibraryElement> get libraries; | 146 Iterable<LibraryElement> get libraries; |
147 | 147 |
148 /// Looks up the library with the [canonicalUri]. | 148 /// Looks up the library with the [canonicalUri]. |
149 LibraryElement lookupLibrary(Uri canonicalUri); | 149 LibraryElement lookupLibrary(Uri canonicalUri); |
150 | 150 |
151 /// Loads the library specified by the [resolvedUri] and returns its | 151 /// Loads the library specified by the [resolvedUri] and returns its |
152 /// [LibraryElement]. | 152 /// [LibraryElement]. |
153 /// | 153 /// |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 final LibraryDeserializer deserializer; | 290 final LibraryDeserializer deserializer; |
291 | 291 |
292 /// Hooks to inform others about progress done by this loader. | 292 /// Hooks to inform others about progress done by this loader. |
293 // TODO(sigmund): move away from this. | 293 // TODO(sigmund): move away from this. |
294 final LibraryLoaderListener listener; | 294 final LibraryLoaderListener listener; |
295 | 295 |
296 /// Definitions provided via the `-D` command line flags. Used to resolve | 296 /// Definitions provided via the `-D` command line flags. Used to resolve |
297 /// conditional imports. | 297 /// conditional imports. |
298 final Environment environment; | 298 final Environment environment; |
299 | 299 |
300 final Compiler compiler; | 300 final DiagnosticReporter reporter; |
301 DiagnosticReporter get reporter => compiler.reporter; | |
302 | 301 |
303 _LibraryLoaderTask(Compiler compiler, this.uriTranslator, this.scriptLoader, | 302 _LibraryLoaderTask(this.uriTranslator, this.scriptLoader, |
304 this.scanner, this.deserializer, this.listener, this.environment) | 303 this.scanner, this.deserializer, this.listener, this.environment, |
305 : compiler = compiler, | 304 this.reporter, Measurer measurer) |
306 super(compiler.measurer); | 305 : super(measurer); |
307 | 306 |
308 String get name => 'LibraryLoader'; | 307 String get name => 'LibraryLoader'; |
309 | 308 |
310 final Map<Uri, LibraryElement> libraryCanonicalUriMap = | 309 final Map<Uri, LibraryElement> libraryCanonicalUriMap = |
311 new Map<Uri, LibraryElement>(); | 310 new Map<Uri, LibraryElement>(); |
312 final Map<Uri, LibraryElement> libraryResourceUriMap = | 311 final Map<Uri, LibraryElement> libraryResourceUriMap = |
313 new Map<Uri, LibraryElement>(); | 312 new Map<Uri, LibraryElement>(); |
314 final Map<String, LibraryElement> libraryNames = | 313 final Map<String, LibraryElement> libraryNames = |
315 new Map<String, LibraryElement>(); | 314 new Map<String, LibraryElement>(); |
316 | 315 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 | 378 |
380 Future<Null> resetLibraries( | 379 Future<Null> resetLibraries( |
381 Future<Iterable<LibraryElement>> reuseLibraries( | 380 Future<Iterable<LibraryElement>> reuseLibraries( |
382 Iterable<LibraryElement> libraries)) { | 381 Iterable<LibraryElement> libraries)) { |
383 assert(currentHandler == null); | 382 assert(currentHandler == null); |
384 return measureSubtask(_reuseLibrarySubtaskName, () { | 383 return measureSubtask(_reuseLibrarySubtaskName, () { |
385 return new Future<Iterable<LibraryElement>>(() { | 384 return new Future<Iterable<LibraryElement>>(() { |
386 // Wrap in Future to shield against errors in user code. | 385 // Wrap in Future to shield against errors in user code. |
387 return reuseLibraries(libraryCanonicalUriMap.values); | 386 return reuseLibraries(libraryCanonicalUriMap.values); |
388 }).catchError((exception, StackTrace trace) { | 387 }).catchError((exception, StackTrace trace) { |
389 compiler.reportCrashInUserCode( | 388 reporter.onCrashInUserCode( |
390 'Uncaught exception in reuseLibraries', exception, trace); | 389 'Uncaught exception in reuseLibraries', exception, trace); |
391 throw exception; // Async rethrow. | 390 throw exception; // Async rethrow. |
392 }).then((Iterable<LibraryElement> reusedLibraries) { | 391 }).then((Iterable<LibraryElement> reusedLibraries) { |
393 measure(() { | 392 measure(() { |
394 resetImplementation(reusedLibraries); | 393 resetImplementation(reusedLibraries); |
395 }); | 394 }); |
396 }); | 395 }); |
397 }); | 396 }); |
398 } | 397 } |
399 | 398 |
(...skipping 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1504 Future onLibrariesLoaded(LoadedLibraries results); | 1503 Future onLibrariesLoaded(LoadedLibraries results); |
1505 | 1504 |
1506 /// Called whenever a library element is created. | 1505 /// Called whenever a library element is created. |
1507 void onLibraryCreated(LibraryElement library); | 1506 void onLibraryCreated(LibraryElement library); |
1508 | 1507 |
1509 /// Called whenever a library is scanned from a script file. | 1508 /// Called whenever a library is scanned from a script file. |
1510 Future onLibraryScanned(LibraryElement library, LibraryLoader loader); | 1509 Future onLibraryScanned(LibraryElement library, LibraryLoader loader); |
1511 } | 1510 } |
1512 | 1511 |
1513 const _reuseLibrarySubtaskName = "Reuse library"; | 1512 const _reuseLibrarySubtaskName = "Reuse library"; |
OLD | NEW |