| Index: pkg/compiler/lib/src/resolution/class_members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/class_members.dart b/pkg/compiler/lib/src/resolution/class_members.dart
|
| index e0492063162cf7a6f2ef4458ff8acfa9e45398f8..2bcf2dd55e259fd526312c78a02e60d4b98fc2d8 100644
|
| --- a/pkg/compiler/lib/src/resolution/class_members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/class_members.dart
|
| @@ -9,6 +9,8 @@ import '../common/names.dart' show
|
| import '../compiler.dart' show
|
| Compiler;
|
| import '../dart_types.dart';
|
| +import '../diagnostics/diagnostic_listener.dart' show
|
| + DiagnosticMessage;
|
| import '../diagnostics/invariant.dart' show
|
| invariant;
|
| import '../diagnostics/messages.dart' show
|
| @@ -254,7 +256,7 @@ abstract class MembersCreator {
|
| }
|
| reportMessage(
|
| interfaceMember.element, MessageKind.ABSTRACT_METHOD, () {
|
| - compiler.reportWarning(
|
| + compiler.reportWarningMessage(
|
| interfaceMember.element, kind,
|
| {'class': cls.name, 'name': name.text});
|
| });
|
| @@ -266,20 +268,24 @@ abstract class MembersCreator {
|
| Member inherited = interfaceMember.declarations.first;
|
| reportMessage(
|
| interfaceMember, MessageKind.UNIMPLEMENTED_METHOD, () {
|
| - compiler.reportWarning(cls,
|
| + DiagnosticMessage warning = compiler.createMessage(
|
| + cls,
|
| interfaceMember.declarations.length == 1
|
| ? singleKind : multipleKind,
|
| {'class': cls.name,
|
| 'name': name.text,
|
| 'method': interfaceMember,
|
| 'declarer': inherited.declarer});
|
| + List<DiagnosticMessage> infos = <DiagnosticMessage>[];
|
| for (Member inherited in interfaceMember.declarations) {
|
| - compiler.reportInfo(inherited.element,
|
| + infos.add(compiler.createMessage(
|
| + inherited.element,
|
| inherited.isDeclaredByField ?
|
| implicitlyDeclaredKind : explicitlyDeclaredKind,
|
| {'class': inherited.declarer.name,
|
| - 'name': name.text});
|
| + 'name': name.text}));
|
| }
|
| + compiler.reportWarning(warning, infos);
|
| });
|
| }
|
| if (interfaceMember.isSetter) {
|
| @@ -314,7 +320,9 @@ abstract class MembersCreator {
|
| if (compiler.backend.isBackendLibrary(cls.library)) return;
|
|
|
| reportMessage(compiler.functionClass, MessageKind.UNIMPLEMENTED_METHOD, () {
|
| - compiler.reportWarning(cls, MessageKind.UNIMPLEMENTED_METHOD_ONE,
|
| + compiler.reportWarningMessage(
|
| + cls,
|
| + MessageKind.UNIMPLEMENTED_METHOD_ONE,
|
| {'class': cls.name,
|
| 'name': Identifiers.call,
|
| 'method': Identifiers.call,
|
| @@ -338,12 +346,17 @@ abstract class MembersCreator {
|
| reportMessage(superMember, MessageKind.INSTANCE_STATIC_SAME_NAME,
|
| () {
|
| compiler.reportWarning(
|
| - declared.element,
|
| - MessageKind.INSTANCE_STATIC_SAME_NAME,
|
| - {'memberName': declared.name,
|
| - 'className': superclass.name});
|
| - compiler.reportInfo(superMember.element,
|
| - MessageKind.INSTANCE_STATIC_SAME_NAME_CONT);
|
| + compiler.createMessage(
|
| + declared.element,
|
| + MessageKind.INSTANCE_STATIC_SAME_NAME,
|
| + {'memberName': declared.name,
|
| + 'className': superclass.name}),
|
| + <DiagnosticMessage>[
|
| + compiler.createMessage(
|
| + superMember.element,
|
| + MessageKind.INSTANCE_STATIC_SAME_NAME_CONT),
|
| + ]);
|
| +
|
| });
|
| break;
|
| }
|
| @@ -386,22 +399,29 @@ abstract class MembersCreator {
|
| void reportError(MessageKind errorKind, MessageKind infoKind) {
|
| reportMessage(
|
| inherited.element, MessageKind.INVALID_OVERRIDE_METHOD, () {
|
| - compiler.reportError(declared.element, errorKind,
|
| - {'name': declared.name.text,
|
| - 'class': cls.thisType,
|
| - 'inheritedClass': inherited.declarer});
|
| - compiler.reportInfo(inherited.element, infoKind,
|
| - {'name': declared.name.text,
|
| - 'class': inherited.declarer});
|
| + compiler.reportError(
|
| + compiler.createMessage(
|
| + declared.element,
|
| + errorKind,
|
| + {'name': declared.name.text,
|
| + 'class': cls.thisType,
|
| + 'inheritedClass': inherited.declarer}),
|
| + <DiagnosticMessage>[
|
| + compiler.createMessage(
|
| + inherited.element,
|
| + infoKind,
|
| + {'name': declared.name.text,
|
| + 'class': inherited.declarer}),
|
| + ]);
|
| });
|
| }
|
|
|
| if (declared.isDeclaredByField && inherited.isMethod) {
|
| reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD,
|
| - MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
|
| + MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
|
| } else if (declared.isMethod && inherited.isDeclaredByField) {
|
| reportError(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
|
| - MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
|
| + MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
|
| } else if (declared.isGetter && inherited.isMethod) {
|
| reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
|
| MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT);
|
| @@ -415,15 +435,22 @@ abstract class MembersCreator {
|
| MessageKind warningKind,
|
| MessageKind infoKind) {
|
| reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () {
|
| - compiler.reportWarning(declared.element, warningKind,
|
| - {'declaredType': declared.type,
|
| - 'name': declared.name.text,
|
| - 'class': cls.thisType,
|
| - 'inheritedType': inherited.type,
|
| - 'inheritedClass': inherited.declarer});
|
| - compiler.reportInfo(inherited.element, infoKind,
|
| - {'name': declared.name.text,
|
| - 'class': inherited.declarer});
|
| + compiler.reportWarning(
|
| + compiler.createMessage(
|
| + declared.element,
|
| + warningKind,
|
| + {'declaredType': declared.type,
|
| + 'name': declared.name.text,
|
| + 'class': cls.thisType,
|
| + 'inheritedType': inherited.type,
|
| + 'inheritedClass': inherited.declarer}),
|
| + <DiagnosticMessage>[
|
| + compiler.createMessage(
|
| + inherited.element,
|
| + infoKind,
|
| + {'name': declared.name.text,
|
| + 'class': inherited.declarer}),
|
| + ]);
|
| });
|
| }
|
| if (declared.isDeclaredByField) {
|
| @@ -476,11 +503,14 @@ abstract class MembersCreator {
|
| Element contextElement,
|
| MessageKind contextMessage) {
|
| compiler.reportError(
|
| - errorneousElement,
|
| - errorMessage,
|
| - {'memberName': contextElement.name,
|
| - 'className': contextElement.enclosingClass.name});
|
| - compiler.reportInfo(contextElement, contextMessage);
|
| + compiler.createMessage(
|
| + errorneousElement,
|
| + errorMessage,
|
| + {'memberName': contextElement.name,
|
| + 'className': contextElement.enclosingClass.name}),
|
| + <DiagnosticMessage>[
|
| + compiler.createMessage(contextElement, contextMessage),
|
| + ]);
|
| }
|
|
|
| /// Compute all class and interface names by the [name] in [cls].
|
| @@ -683,9 +713,11 @@ class InterfaceMembersCreator extends MembersCreator {
|
| () => new Setlet<Member>()).add(inherited);
|
| }
|
| if (someAreGetters && !allAreGetters) {
|
| - compiler.reportWarning(cls,
|
| - MessageKind.INHERIT_GETTER_AND_METHOD,
|
| - {'class': thisType, 'name': name.text });
|
| + DiagnosticMessage warning = compiler.createMessage(
|
| + cls,
|
| + MessageKind.INHERIT_GETTER_AND_METHOD,
|
| + {'class': thisType, 'name': name.text });
|
| + List<DiagnosticMessage> infos = <DiagnosticMessage>[];
|
| for (Member inherited in inheritedMembers) {
|
| MessageKind kind;
|
| if (inherited.isMethod) {
|
| @@ -700,9 +732,12 @@ class InterfaceMembersCreator extends MembersCreator {
|
| kind = MessageKind.INHERITED_EXPLICIT_GETTER;
|
| }
|
| }
|
| - compiler.reportInfo(inherited.element, kind,
|
| - {'class': inherited.declarer, 'name': name.text });
|
| + infos.add(compiler.createMessage(
|
| + inherited.element,
|
| + kind,
|
| + {'class': inherited.declarer, 'name': name.text}));
|
| }
|
| + compiler.reportWarning(warning, infos);
|
| interfaceMembers[name] = new ErroneousMember(inheritedMembers);
|
| } else if (subtypesOfAllInherited.length == 1) {
|
| // All signatures have the same type.
|
|
|