Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 class DeferredLoadTask extends CompilerTask { | |
| 6 DeferredLoadTask(Compiler compiler) : super(compiler); | |
| 7 String get name => 'Lazy'; | |
| 8 final Set<LibraryElement> deferredLibraries = new Set<LibraryElement>(); | |
|
kasperl
2013/02/05 08:30:53
I guess this will have to be replaced with some so
ahe
2013/02/05 13:54:22
Correct. Added a TODO.
| |
| 9 | |
| 10 bool isDeferred(Element element) => deferredLibraries.contains(element.getLibr ary()); | |
| 11 | |
| 12 void registerMainApp(LibraryElement mainApp) { | |
| 13 if (mainApp == null) return; | |
| 14 compiler.withCurrentElement(mainApp, () { | |
| 15 deferredLibraries.addAll(new List.from(findDeferredLibraries(mainApp))); | |
| 16 }); | |
| 17 } | |
| 18 | |
| 19 Link<Element> findDeferredLibraries(LibraryElement library) { | |
| 20 Link<Element> link = const Link<Element>(); | |
| 21 for (LibraryTag tag in library.tags) { | |
| 22 for (MetadataAnnotation metadata in tag.metadata) { | |
| 23 metadata.ensureResolved(compiler); | |
| 24 if (metadata.value.type.element == compiler.deferLoadClass) { | |
| 25 ConstructedConstant value = metadata.value; | |
| 26 SourceString expectedName = value.fields[0].toDartString().source; | |
| 27 LibraryElement deferredLibrary = library.getDependency(tag); | |
| 28 link = link.prepend(deferredLibrary); | |
| 29 note(tag, 'Defer loading of $deferredLibrary'); | |
| 30 SourceString actualName = | |
| 31 new SourceString(deferredLibrary.getLibraryOrScriptName()); | |
| 32 if (expectedName != actualName) { | |
| 33 compiler.reportErrorCode( | |
| 34 metadata, | |
| 35 MessageKind.GENERIC, | |
| 36 {'text':'Library name mismatch "${expectedName.slowToString()}" != "${actualName.slowToString()}"'}); | |
| 37 } else { | |
| 38 note(metadata, '${actualName.slowToString()} matches $deferredLibrar y'); | |
| 39 } | |
| 40 } | |
| 41 } | |
| 42 } | |
| 43 return link; | |
| 44 } | |
| 45 | |
| 46 void note(Spannable node, message) { | |
| 47 compiler.reportMessage(compiler.spanFromSpannable(node), | |
| 48 MessageKind.GENERIC.error({'text': message}), | |
| 49 api.Diagnostic.INFO); | |
| 50 } | |
| 51 } | |
| OLD | NEW |