| Index: pkg/compiler/lib/src/elements/modelx.dart
|
| diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
|
| index 8c203208f1c17e8df32d66080f01f33be435cd2d..c576f8d0e59ca10b15793688dabbf8af8b1e46d8 100644
|
| --- a/pkg/compiler/lib/src/elements/modelx.dart
|
| +++ b/pkg/compiler/lib/src/elements/modelx.dart
|
| @@ -251,8 +251,6 @@ abstract class ElementX extends Element with ElementCommon {
|
|
|
| bool get isAbstract => modifiers.isAbstract;
|
|
|
| - void diagnose(Element context, DiagnosticListener listener) {}
|
| -
|
| bool get hasTreeElements => analyzableElement.hasTreeElements;
|
|
|
| TreeElements get treeElements => analyzableElement.treeElements;
|
| @@ -475,14 +473,16 @@ class WarnOnUseElementX extends ElementX implements WarnOnUseElement {
|
| if (warning != null) {
|
| Spannable spannable = warning.spannable;
|
| if (spannable == null) spannable = usageSpannable;
|
| - listener.reportWarning(
|
| + DiagnosticMessage warningMessage = listener.createMessage(
|
| spannable, warning.messageKind, warning.messageArguments);
|
| - }
|
| - if (info != null) {
|
| - Spannable spannable = info.spannable;
|
| - if (spannable == null) spannable = usageSpannable;
|
| - listener.reportInfo(
|
| - spannable, info.messageKind, info.messageArguments);
|
| + List<DiagnosticMessage> infos = <DiagnosticMessage>[];
|
| + if (info != null) {
|
| + Spannable spannable = info.spannable;
|
| + if (spannable == null) spannable = usageSpannable;
|
| + infos.add(listener.createMessage(
|
| + spannable, info.messageKind, info.messageArguments));
|
| + }
|
| + listener.reportWarning(warningMessage, infos);
|
| }
|
| if (unwrapped.isWarnOnUse) {
|
| unwrapped = unwrapped.unwrap(listener, usageSpannable);
|
| @@ -534,6 +534,11 @@ abstract class AmbiguousElementX extends ElementX implements AmbiguousElement {
|
| return set;
|
| }
|
|
|
| + List<DiagnosticMessage> computeInfos(Element context,
|
| + DiagnosticListener listener) {
|
| + return const <DiagnosticMessage>[];
|
| + }
|
| +
|
| accept(ElementVisitor visitor, arg) {
|
| return visitor.visitAmbiguousElement(this, arg);
|
| }
|
| @@ -552,21 +557,25 @@ class AmbiguousImportX extends AmbiguousElementX {
|
| : super(messageKind, messageArguments, enclosingElement, existingElement,
|
| newElement);
|
|
|
| - void diagnose(Element context, DiagnosticListener listener) {
|
| + List<DiagnosticMessage> computeInfos(
|
| + Element context,
|
| + DiagnosticListener listener) {
|
| + List<DiagnosticMessage> infos = <DiagnosticMessage>[];
|
| Setlet ambiguousElements = flatten();
|
| MessageKind code = (ambiguousElements.length == 1)
|
| ? MessageKind.AMBIGUOUS_REEXPORT : MessageKind.AMBIGUOUS_LOCATION;
|
| LibraryElementX importer = context.library;
|
| for (Element element in ambiguousElements) {
|
| - var arguments = {'name': element.name};
|
| - listener.reportInfo(element, code, arguments);
|
| + Map arguments = {'name': element.name};
|
| + infos.add(listener.createMessage(element, code, arguments));
|
| listener.withCurrentElement(importer, () {
|
| for (ImportElement import in importer.importers.getImports(element)) {
|
| - listener.reportInfo(
|
| - import, MessageKind.IMPORTED_HERE, arguments);
|
| + infos.add(listener.createMessage(
|
| + import, MessageKind.IMPORTED_HERE, arguments));
|
| }
|
| });
|
| }
|
| + return infos;
|
| }
|
| }
|
|
|
| @@ -600,9 +609,16 @@ class ScopeX {
|
| Element existing = contents.putIfAbsent(name, () => element);
|
| if (!identical(existing, element)) {
|
| listener.reportError(
|
| - element, MessageKind.DUPLICATE_DEFINITION, {'name': name});
|
| - listener.reportInfo(existing,
|
| - MessageKind.EXISTING_DEFINITION, {'name': name});
|
| + listener.createMessage(
|
| + element,
|
| + MessageKind.DUPLICATE_DEFINITION,
|
| + {'name': name}),
|
| + <DiagnosticMessage>[
|
| + listener.createMessage(
|
| + existing,
|
| + MessageKind.EXISTING_DEFINITION,
|
| + {'name': name}),
|
| + ]);
|
| }
|
| }
|
| }
|
| @@ -624,11 +640,17 @@ class ScopeX {
|
| Element existing,
|
| DiagnosticListener listener) {
|
| void reportError(Element other) {
|
| - listener.reportError(accessor,
|
| - MessageKind.DUPLICATE_DEFINITION,
|
| - {'name': accessor.name});
|
| - listener.reportInfo(
|
| - other, MessageKind.EXISTING_DEFINITION, {'name': accessor.name});
|
| + listener.reportError(
|
| + listener.createMessage(
|
| + accessor,
|
| + MessageKind.DUPLICATE_DEFINITION,
|
| + {'name': accessor.name}),
|
| + <DiagnosticMessage>[
|
| + listener.createMessage(
|
| + other,
|
| + MessageKind.EXISTING_DEFINITION,
|
| + {'name': accessor.name}),
|
| + ]);
|
|
|
| contents[accessor.name] = new DuplicatedElementX(
|
| MessageKind.DUPLICATE_DEFINITION, {'name': accessor.name},
|
| @@ -722,15 +744,17 @@ class CompilationUnitElementX extends ElementX
|
| LibraryElementX library = enclosingElement;
|
| if (library.entryCompilationUnit == this) {
|
| partTag = tag;
|
| - listener.reportError(tag, MessageKind.IMPORT_PART_OF);
|
| + listener.reportErrorMessage(
|
| + tag, MessageKind.IMPORT_PART_OF);
|
| return;
|
| }
|
| if (!localMembers.isEmpty) {
|
| - listener.reportError(tag, MessageKind.BEFORE_TOP_LEVEL);
|
| + listener.reportErrorMessage(
|
| + tag, MessageKind.BEFORE_TOP_LEVEL);
|
| return;
|
| }
|
| if (partTag != null) {
|
| - listener.reportWarning(tag, MessageKind.DUPLICATED_PART_OF);
|
| + listener.reportWarningMessage(tag, MessageKind.DUPLICATED_PART_OF);
|
| return;
|
| }
|
| partTag = tag;
|
| @@ -739,16 +763,22 @@ class CompilationUnitElementX extends ElementX
|
| if (libraryTag != null) {
|
| String expectedName = libraryTag.name.toString();
|
| if (expectedName != actualName) {
|
| - listener.reportWarning(tag.name,
|
| + listener.reportWarningMessage(
|
| + tag.name,
|
| MessageKind.LIBRARY_NAME_MISMATCH,
|
| {'libraryName': expectedName});
|
| }
|
| } else {
|
| - listener.reportWarning(library,
|
| - MessageKind.MISSING_LIBRARY_NAME,
|
| - {'libraryName': actualName});
|
| - listener.reportInfo(tag.name,
|
| - MessageKind.THIS_IS_THE_PART_OF_TAG);
|
| + listener.reportWarning(
|
| + listener.createMessage(
|
| + library,
|
| + MessageKind.MISSING_LIBRARY_NAME,
|
| + {'libraryName': actualName}),
|
| + <DiagnosticMessage>[
|
| + listener.createMessage(
|
| + tag.name,
|
| + MessageKind.THIS_IS_THE_PART_OF_TAG),
|
| + ]);
|
| }
|
| }
|
|
|
| @@ -2623,7 +2653,8 @@ abstract class ClassElementX extends BaseClassElementX {
|
|
|
| void addToScope(Element element, DiagnosticListener listener) {
|
| if (element.isField && element.name == name) {
|
| - listener.reportError(element, MessageKind.MEMBER_USES_CLASS_NAME);
|
| + listener.reportErrorMessage(
|
| + element, MessageKind.MEMBER_USES_CLASS_NAME);
|
| }
|
| localScope.add(element, listener);
|
| }
|
|
|