| Index: pkg/compiler/lib/src/library_loader.dart
|
| diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
|
| index 08aaf90026c5ce8f652b022d4a0a96f60fc9b642..442c95700c89a4801d4d0f63bff87ecae1db4e9a 100644
|
| --- a/pkg/compiler/lib/src/library_loader.dart
|
| +++ b/pkg/compiler/lib/src/library_loader.dart
|
| @@ -358,7 +358,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| currentHandler = new LibraryDependencyHandler(this);
|
| return createLibrary(currentHandler, null, resolvedUri)
|
| .then((LibraryElement library) {
|
| - return compiler.withCurrentElement(library, () {
|
| + return reporter.withCurrentElement(library, () {
|
| return measure(() {
|
| currentHandler.computeExports();
|
| LoadedLibraries loadedLibraries =
|
| @@ -388,14 +388,14 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| Uri base = library.entryCompilationUnit.script.readableUri;
|
|
|
| return Future.forEach(library.tags, (LibraryTag tag) {
|
| - return compiler.withCurrentElement(library, () {
|
| + return reporter.withCurrentElement(library, () {
|
|
|
| Uri computeUri(LibraryDependency node) {
|
| String tagUriString = node.uri.dartString.slowToString();
|
| try {
|
| return Uri.parse(tagUriString);
|
| } on FormatException {
|
| - compiler.reportErrorMessage(
|
| + reporter.reportErrorMessage(
|
| node.uri,
|
| MessageKind.INVALID_URI, {'uri': tagUriString});
|
| return null;
|
| @@ -411,7 +411,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| // TODO(johnniwinther): Create imports during parsing.
|
| ImportElementX import =
|
| new ImportElementX(library.entryCompilationUnit, tag, uri);
|
| - tagState.checkTag(TagState.IMPORT_OR_EXPORT, import.node, compiler);
|
| + tagState.checkTag(TagState.IMPORT_OR_EXPORT, import.node, reporter);
|
| if (import.uri == Uris.dart_core) {
|
| importsDartCore = true;
|
| }
|
| @@ -426,11 +426,11 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| // TODO(johnniwinther): Create exports during parsing.
|
| ExportElementX export =
|
| new ExportElementX(library.entryCompilationUnit, tag, uri);
|
| - tagState.checkTag(TagState.IMPORT_OR_EXPORT, export.node, compiler);
|
| + tagState.checkTag(TagState.IMPORT_OR_EXPORT, export.node, reporter);
|
| library.addExportDeclaration(export);
|
| libraryDependencies.addLast(export);
|
| } else if (tag.isLibraryName) {
|
| - tagState.checkTag(TagState.LIBRARY, tag, compiler);
|
| + tagState.checkTag(TagState.LIBRARY, tag, reporter);
|
| if (library.libraryTag == null) {
|
| // Use the first if there are multiple (which is reported as an
|
| // error in [TagState.checkTag]).
|
| @@ -440,16 +440,16 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| Part part = tag;
|
| StringNode uri = part.uri;
|
| Uri resolvedUri = base.resolve(uri.dartString.slowToString());
|
| - tagState.checkTag(TagState.PART, part, compiler);
|
| + tagState.checkTag(TagState.PART, part, reporter);
|
| return scanPart(part, resolvedUri, library);
|
| } else {
|
| - compiler.internalError(tag, "Unhandled library tag.");
|
| + reporter.internalError(tag, "Unhandled library tag.");
|
| }
|
| });
|
| }).then((_) {
|
| return compiler.onLibraryScanned(library, handler);
|
| }).then((_) {
|
| - return compiler.withCurrentElement(library, () {
|
| + return reporter.withCurrentElement(library, () {
|
| checkDuplicatedLibraryName(library);
|
|
|
| // Import dart:core if not already imported.
|
| @@ -466,7 +466,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| }).then((_) {
|
| return Future.forEach(libraryDependencies.toList(),
|
| (LibraryDependencyElementX libraryDependency) {
|
| - return compiler.withCurrentElement(library, () {
|
| + return reporter.withCurrentElement(library, () {
|
| return registerLibraryFromImportExport(
|
| handler, library, libraryDependency);
|
| });
|
| @@ -481,8 +481,8 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| libraryResourceUriMap.putIfAbsent(resourceUri, () => library);
|
| if (!identical(existing, library)) {
|
| if (library.hasLibraryName) {
|
| - compiler.withCurrentElement(library, () {
|
| - compiler.reportWarningMessage(
|
| + reporter.withCurrentElement(library, () {
|
| + reporter.reportWarningMessage(
|
| library,
|
| MessageKind.DUPLICATED_LIBRARY_RESOURCE,
|
| {'libraryName': library.libraryName,
|
| @@ -491,7 +491,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| 'canonicalUri2': existing.canonicalUri});
|
| });
|
| } else {
|
| - compiler.reportHintMessage(
|
| + reporter.reportHintMessage(
|
| library,
|
| MessageKind.DUPLICATED_RESOURCE,
|
| {'resourceUri': resourceUri,
|
| @@ -502,14 +502,14 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| String name = library.libraryOrScriptName;
|
| existing = libraryNames.putIfAbsent(name, () => library);
|
| if (!identical(existing, library)) {
|
| - compiler.withCurrentElement(library, () {
|
| - compiler.reportWarningMessage(
|
| + reporter.withCurrentElement(library, () {
|
| + reporter.reportWarningMessage(
|
| library,
|
| MessageKind.DUPLICATED_LIBRARY_NAME,
|
| {'libraryName': name});
|
| });
|
| - compiler.withCurrentElement(existing, () {
|
| - compiler.reportWarningMessage(
|
| + reporter.withCurrentElement(existing, () {
|
| + reporter.reportWarningMessage(
|
| existing,
|
| MessageKind.DUPLICATED_LIBRARY_NAME,
|
| {'libraryName': name});
|
| @@ -526,17 +526,17 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| if (!resolvedUri.isAbsolute) throw new ArgumentError(resolvedUri);
|
| Uri readableUri = compiler.translateResolvedUri(library, resolvedUri, part);
|
| if (readableUri == null) return new Future.value();
|
| - return compiler.withCurrentElement(library, () {
|
| + return reporter.withCurrentElement(library, () {
|
| return compiler.readScript(part, readableUri).
|
| then((Script sourceScript) {
|
| if (sourceScript == null) return;
|
|
|
| CompilationUnitElementX unit =
|
| new CompilationUnitElementX(sourceScript, library);
|
| - compiler.withCurrentElement(unit, () {
|
| + reporter.withCurrentElement(unit, () {
|
| compiler.scanner.scan(unit);
|
| if (unit.partTag == null && !sourceScript.isSynthesized) {
|
| - compiler.reportErrorMessage(
|
| + reporter.reportErrorMessage(
|
| unit, MessageKind.MISSING_PART_OF_TAG);
|
| }
|
| });
|
| @@ -559,7 +559,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| return createLibrary(handler, library, resolvedUri, libraryDependency)
|
| .then((LibraryElement loadedLibrary) {
|
| if (loadedLibrary == null) return;
|
| - compiler.withCurrentElement(library, () {
|
| + reporter.withCurrentElement(library, () {
|
| libraryDependency.libraryDependency = loadedLibrary;
|
| handler.registerDependency(
|
| library, libraryDependency, loadedLibrary);
|
| @@ -612,13 +612,13 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| readableUri = resolvedUri;
|
| readScript = compiler.synthesizeScript;
|
| }
|
| - return compiler.withCurrentElement(importingLibrary, () {
|
| + return reporter.withCurrentElement(importingLibrary, () {
|
| return readScript(node, readableUri).then((Script script) {
|
| if (script == null) return null;
|
| LibraryElement element =
|
| createLibrarySync(handler, script, resolvedUri);
|
| return processLibraryTags(handler, element).then((_) {
|
| - compiler.withCurrentElement(element, () {
|
| + reporter.withCurrentElement(element, () {
|
| handler.registerLibraryExports(element);
|
| });
|
| return element;
|
| @@ -632,7 +632,7 @@ class _LibraryLoaderTask extends CompilerTask implements LibraryLoaderTask {
|
| Script script,
|
| Uri resolvedUri) {
|
| LibraryElement element = new LibraryElementX(script, resolvedUri);
|
| - return compiler.withCurrentElement(element, () {
|
| + return reporter.withCurrentElement(element, () {
|
| if (handler != null) {
|
| handler.registerNewLibrary(element);
|
| libraryCanonicalUriMap[resolvedUri] = element;
|
| @@ -679,7 +679,7 @@ class TagState {
|
|
|
| /// If [value] is less than [tagState] complain. Regardless, update
|
| /// [tagState] using transition function for state machine.
|
| - void checkTag(int value, LibraryTag tag, DiagnosticListener listener) {
|
| + void checkTag(int value, LibraryTag tag, DiagnosticReporter reporter) {
|
| if (tagState > value) {
|
| MessageKind kind;
|
| switch (value) {
|
| @@ -697,14 +697,14 @@ class TagState {
|
| } else if (tag.isExport) {
|
| kind = MessageKind.EXPORT_BEFORE_PARTS;
|
| } else {
|
| - listener.internalError(tag, "Expected import or export.");
|
| + reporter.internalError(tag, "Expected import or export.");
|
| }
|
| break;
|
|
|
| default:
|
| - listener.internalError(tag, "Unexpected order of library tags.");
|
| + reporter.internalError(tag, "Unexpected order of library tags.");
|
| }
|
| - listener.reportErrorMessage(tag, kind);
|
| + reporter.reportErrorMessage(tag, kind);
|
| }
|
| tagState = NEXT[value];
|
| if (value == LIBRARY) {
|
| @@ -725,7 +725,8 @@ class ImportLink {
|
| /**
|
| * Imports the library into the [importingLibrary].
|
| */
|
| - void importLibrary(Compiler compiler, LibraryElementX importingLibrary) {
|
| + void importLibrary(DiagnosticReporter reporter,
|
| + LibraryElementX importingLibrary) {
|
| assert(invariant(importingLibrary,
|
| importedLibrary.exportsHandled,
|
| message: 'Exports not handled on $importedLibrary'));
|
| @@ -745,22 +746,22 @@ class ImportLink {
|
| } else {
|
| prefixElement = existingElement;
|
| }
|
| - importingLibrary.addToScope(prefixElement, compiler);
|
| + importingLibrary.addToScope(prefixElement, reporter);
|
| importedLibrary.forEachExport((Element element) {
|
| if (combinatorFilter.exclude(element)) return;
|
| - prefixElement.addImport(element, import, compiler);
|
| + prefixElement.addImport(element, import, reporter);
|
| });
|
| import.prefix = prefixElement;
|
| if (prefixElement.isDeferred) {
|
| prefixElement.addImport(
|
| new DeferredLoaderGetterElementX(prefixElement),
|
| - import, compiler);
|
| + import, reporter);
|
| }
|
| } else {
|
| importedLibrary.forEachExport((Element element) {
|
| - compiler.withCurrentElement(importingLibrary, () {
|
| + reporter.withCurrentElement(importingLibrary, () {
|
| if (combinatorFilter.exclude(element)) return;
|
| - importingLibrary.addImport(element, import, compiler);
|
| + importingLibrary.addImport(element, import, reporter);
|
| });
|
| });
|
| }
|
| @@ -885,7 +886,7 @@ class LibraryDependencyNode {
|
| ///
|
| /// Additionally, check that all names in the show/hide combinators are in the
|
| /// export scope of [exportedLibraryElement].
|
| - void registerHandledExports(DiagnosticListener listener,
|
| + void registerHandledExports(DiagnosticReporter reporter,
|
| LibraryElement exportedLibraryElement,
|
| ExportElementX export,
|
| CombinatorFilter filter) {
|
| @@ -898,8 +899,8 @@ class LibraryDependencyNode {
|
| pendingExportMap[exportedElement] = exports.prepend(export);
|
| }
|
| });
|
| - listener.withCurrentElement(library, () {
|
| - checkLibraryDependency(listener, export.node, exportedLibraryElement);
|
| + reporter.withCurrentElement(library, () {
|
| + checkLibraryDependency(reporter, export.node, exportedLibraryElement);
|
| });
|
| }
|
|
|
| @@ -913,9 +914,9 @@ class LibraryDependencyNode {
|
| /**
|
| * Registers the imports of the node library.
|
| */
|
| - void registerImports(Compiler compiler) {
|
| + void registerImports(DiagnosticReporter reporter) {
|
| for (ImportLink link in imports) {
|
| - link.importLibrary(compiler, library);
|
| + link.importLibrary(reporter, library);
|
| }
|
| }
|
|
|
| @@ -933,8 +934,10 @@ class LibraryDependencyNode {
|
| * Adds [element] to the export scope for this node. If the [element] name
|
| * is a duplicate, an error element is inserted into the export scope.
|
| */
|
| - Element addElementToExportScope(Compiler compiler, Element element,
|
| - Link<ExportElement> exports) {
|
| + Element addElementToExportScope(
|
| + DiagnosticReporter reporter,
|
| + Element element,
|
| + Link<ExportElement> exports) {
|
| String name = element.name;
|
| DiagnosticMessage error;
|
| List<DiagnosticMessage> infos = <DiagnosticMessage>[];
|
| @@ -945,15 +948,15 @@ class LibraryDependencyNode {
|
| assert(invariant(library, !duplicateExports.isEmpty,
|
| message: "No export for $duplicate from ${duplicate.library} "
|
| "in $library."));
|
| - compiler.withCurrentElement(library, () {
|
| + reporter.withCurrentElement(library, () {
|
| for (ExportElement export in duplicateExports) {
|
| if (error == null) {
|
| - error = compiler.createMessage(
|
| + error = reporter.createMessage(
|
| export,
|
| MessageKind.DUPLICATE_EXPORT,
|
| {'name': name});
|
| } else {
|
| - infos.add(compiler.createMessage(
|
| + infos.add(reporter.createMessage(
|
| export,
|
| MessageKind.DUPLICATE_EXPORT_CONT,
|
| {'name': name}));
|
| @@ -968,7 +971,7 @@ class LibraryDependencyNode {
|
| assert(invariant(library, !duplicateExports.isEmpty,
|
| message: "No export for $duplicate from ${duplicate.library} "
|
| "in $library."));
|
| - infos.add(compiler.createMessage(
|
| + infos.add(reporter.createMessage(
|
| duplicate,
|
| MessageKind.DUPLICATE_EXPORT_DECL,
|
| {'name': name, 'uriString': duplicateExports.head.uri}));
|
| @@ -1001,7 +1004,7 @@ class LibraryDependencyNode {
|
| exporters[element] = exports;
|
| }
|
| if (error != null) {
|
| - compiler.reportError(error, infos);
|
| + reporter.reportError(error, infos);
|
| }
|
| return element;
|
| }
|
| @@ -1040,32 +1043,33 @@ class LibraryDependencyNode {
|
|
|
| /// Check that all names in the show/hide combinators of imports and exports
|
| /// are in the export scope of the imported/exported libraries.
|
| - void checkCombinators(DiagnosticListener listener) {
|
| - listener.withCurrentElement(library, () {
|
| + void checkCombinators(DiagnosticReporter reporter) {
|
| + reporter.withCurrentElement(library, () {
|
| for (ImportLink importLink in imports) {
|
| checkLibraryDependency(
|
| - listener, importLink.import.node, importLink.importedLibrary);
|
| + reporter, importLink.import.node, importLink.importedLibrary);
|
| }
|
| });
|
| for (ExportLink exportLink in dependencies) {
|
| - listener.withCurrentElement(exportLink.exportNode.library, () {
|
| - checkLibraryDependency(listener, exportLink.export.node, library);
|
| + reporter.withCurrentElement(exportLink.exportNode.library, () {
|
| + checkLibraryDependency(reporter, exportLink.export.node, library);
|
| });
|
| }
|
| }
|
|
|
| /// Check that all names in the show/hide combinators of [tag] are in the
|
| /// export scope of [library].
|
| - void checkLibraryDependency(DiagnosticListener listener,
|
| - LibraryDependency tag,
|
| - LibraryElement library) {
|
| + void checkLibraryDependency(
|
| + DiagnosticReporter reporter,
|
| + LibraryDependency tag,
|
| + LibraryElement library) {
|
| if (tag == null || tag.combinators == null) return;
|
| for (Combinator combinator in tag.combinators) {
|
| for (Identifier identifier in combinator.identifiers) {
|
| String name = identifier.source;
|
| Element element = library.findExported(name);
|
| if (element == null) {
|
| - listener.reportHintMessage(
|
| + reporter.reportHintMessage(
|
| identifier,
|
| combinator.isHide
|
| ? MessageKind.EMPTY_HIDE : MessageKind.EMPTY_SHOW,
|
| @@ -1102,6 +1106,8 @@ class LibraryDependencyHandler implements LibraryLoader {
|
|
|
| Compiler get compiler => task.compiler;
|
|
|
| + DiagnosticReporter get reporter => task.reporter;
|
| +
|
| /// The libraries loaded with this handler.
|
| Iterable<LibraryElement> get loadedLibraries => nodeMap.keys;
|
|
|
| @@ -1130,7 +1136,7 @@ class LibraryDependencyHandler implements LibraryLoader {
|
| tasks.forEach((LibraryDependencyNode node,
|
| Map<Element, Link<ExportElement>> pendingExports) {
|
| pendingExports.forEach((Element element, Link<ExportElement> exports) {
|
| - element = node.addElementToExportScope(compiler, element, exports);
|
| + element = node.addElementToExportScope(reporter, element, exports);
|
| if (node.propagateElement(element)) {
|
| changed = true;
|
| }
|
| @@ -1147,11 +1153,11 @@ class LibraryDependencyHandler implements LibraryLoader {
|
|
|
| // Setup import scopes.
|
| nodeMap.forEach((LibraryElement library, LibraryDependencyNode node) {
|
| - node.registerImports(compiler);
|
| + node.registerImports(reporter);
|
| });
|
|
|
| nodeMap.forEach((LibraryElement library, LibraryDependencyNode node) {
|
| - node.checkCombinators(compiler);
|
| + node.checkCombinators(reporter);
|
| });
|
| }
|
|
|
| @@ -1168,7 +1174,7 @@ class LibraryDependencyHandler implements LibraryLoader {
|
| CombinatorFilter combinatorFilter =
|
| new CombinatorFilter.fromTag(libraryDependency.node);
|
| exportingNode.registerHandledExports(
|
| - compiler, loadedLibrary, libraryDependency, combinatorFilter);
|
| + reporter, loadedLibrary, libraryDependency, combinatorFilter);
|
| return;
|
| }
|
| LibraryDependencyNode exportedNode = nodeMap[loadedLibrary];
|
|
|