| Index: pkg/compiler/lib/src/js_backend/backend.dart | 
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart | 
| index 20e7bb7fdf839aa6d1a6b64885a4506485bc8aec..21bcb938c917ebfaaaec2926563f723dcd7114bb 100644 | 
| --- a/pkg/compiler/lib/src/js_backend/backend.dart | 
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart | 
| @@ -902,7 +902,7 @@ class JavaScriptBackend extends Backend { | 
| cls.ensureResolved(compiler); | 
| cls.forEachMember((ClassElement classElement, Element member) { | 
| if (member.name == Identifiers.call) { | 
| -          compiler.reportError( | 
| +          compiler.reportErrorMessage( | 
| member, | 
| MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS); | 
| return; | 
| @@ -1514,11 +1514,13 @@ class JavaScriptBackend extends Backend { | 
| if (totalMethodCount != preMirrorsMethodCount) { | 
| int mirrorCount = totalMethodCount - preMirrorsMethodCount; | 
| double percentage = (mirrorCount / totalMethodCount) * 100; | 
| -      compiler.reportHint( | 
| +      DiagnosticMessage hint = compiler.createMessage( | 
| compiler.mainApp, MessageKind.MIRROR_BLOAT, | 
| {'count': mirrorCount, | 
| 'total': totalMethodCount, | 
| 'percentage': percentage.round()}); | 
| + | 
| +      List<DiagnosticMessage> infos = <DiagnosticMessage>[]; | 
| for (LibraryElement library in compiler.libraryLoader.libraries) { | 
| if (library.isInternalLibrary) continue; | 
| for (ImportElement import in library.imports) { | 
| @@ -1529,10 +1531,11 @@ class JavaScriptBackend extends Backend { | 
| ? MessageKind.MIRROR_IMPORT | 
| : MessageKind.MIRROR_IMPORT_NO_USAGE; | 
| compiler.withCurrentElement(library, () { | 
| -            compiler.reportInfo(import, kind); | 
| +            infos.add(compiler.createMessage(import, kind)); | 
| }); | 
| } | 
| } | 
| +      compiler.reportHint(hint, infos); | 
| } | 
| return programSize; | 
| } | 
| @@ -2634,7 +2637,8 @@ class JavaScriptBackend extends Backend { | 
| if (cls == forceInlineClass) { | 
| hasForceInline = true; | 
| if (VERBOSE_OPTIMIZER_HINTS) { | 
| -          compiler.reportHint(element, | 
| +          compiler.reportHintMessage( | 
| +              element, | 
| MessageKind.GENERIC, | 
| {'text': "Must inline"}); | 
| } | 
| @@ -2642,7 +2646,8 @@ class JavaScriptBackend extends Backend { | 
| } else if (cls == noInlineClass) { | 
| hasNoInline = true; | 
| if (VERBOSE_OPTIMIZER_HINTS) { | 
| -          compiler.reportHint(element, | 
| +          compiler.reportHintMessage( | 
| +              element, | 
| MessageKind.GENERIC, | 
| {'text': "Cannot inline"}); | 
| } | 
| @@ -2655,7 +2660,8 @@ class JavaScriptBackend extends Backend { | 
| " or static functions"); | 
| } | 
| if (VERBOSE_OPTIMIZER_HINTS) { | 
| -          compiler.reportHint(element, | 
| +          compiler.reportHintMessage( | 
| +              element, | 
| MessageKind.GENERIC, | 
| {'text': "Cannot throw"}); | 
| } | 
| @@ -2663,7 +2669,8 @@ class JavaScriptBackend extends Backend { | 
| } else if (cls == noSideEffectsClass) { | 
| hasNoSideEffects = true; | 
| if (VERBOSE_OPTIMIZER_HINTS) { | 
| -          compiler.reportHint(element, | 
| +          compiler.reportHintMessage( | 
| +              element, | 
| MessageKind.GENERIC, | 
| {'text': "Has no side effects"}); | 
| } | 
| @@ -2769,7 +2776,7 @@ class JavaScriptBackend extends Backend { | 
| @override | 
| bool enableCodegenWithErrorsIfSupported(Spannable node) { | 
| if (compiler.useCpsIr) { | 
| -      compiler.reportHint( | 
| +      compiler.reportHintMessage( | 
| node, | 
| MessageKind.GENERIC, | 
| {'text': "Generation of code with compile time errors is currently " | 
|  |