| // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library; |
| |
| import 'package:compiler/compiler_api.dart' |
| as api |
| show CompilerDiagnostics, Diagnostic; |
| import 'package:compiler/src/diagnostics/messages.dart' |
| show Message, MessageKind; |
| |
| class CollectedMessage { |
| final Message? message; |
| final Uri? uri; |
| final int? begin; |
| final int? end; |
| final String text; |
| final api.Diagnostic kind; |
| |
| CollectedMessage( |
| this.message, |
| this.uri, |
| this.begin, |
| this.end, |
| this.text, |
| this.kind, |
| ); |
| |
| MessageKind? get messageKind => message?.kind; |
| |
| @override |
| String toString() { |
| return '${message != null ? message!.kind : ''}' |
| ':$uri:$begin:$end:$text:$kind'; |
| } |
| } |
| |
| class DiagnosticCollector implements api.CompilerDiagnostics { |
| List<CollectedMessage> messages = <CollectedMessage>[]; |
| |
| @override |
| void report( |
| covariant Message? message, |
| Uri? uri, |
| int? begin, |
| int? end, |
| String text, |
| api.Diagnostic kind, |
| ) { |
| messages.add(CollectedMessage(message, uri, begin, end, text, kind)); |
| } |
| |
| Iterable<CollectedMessage> filterMessagesByKinds(List<api.Diagnostic> kinds) { |
| return messages.where( |
| (CollectedMessage message) => kinds.contains(message.kind), |
| ); |
| } |
| |
| Iterable<CollectedMessage> get errors { |
| return filterMessagesByKinds([api.Diagnostic.error]); |
| } |
| |
| Iterable<CollectedMessage> get warnings { |
| return filterMessagesByKinds([api.Diagnostic.warning]); |
| } |
| |
| Iterable<CollectedMessage> get hints { |
| return filterMessagesByKinds([api.Diagnostic.hint]); |
| } |
| |
| Iterable<CollectedMessage> get infos { |
| return filterMessagesByKinds([api.Diagnostic.info]); |
| } |
| |
| Iterable<CollectedMessage> get crashes { |
| return filterMessagesByKinds([api.Diagnostic.crash]); |
| } |
| |
| Iterable<CollectedMessage> get contexts { |
| return filterMessagesByKinds([api.Diagnostic.context]); |
| } |
| |
| Iterable<CollectedMessage> get verboseInfos { |
| return filterMessagesByKinds([api.Diagnostic.verboseInfo]); |
| } |
| |
| /// `true` if non-verbose messages has been collected. |
| bool get hasRegularMessages { |
| return messages.any((m) => m.kind != api.Diagnostic.verboseInfo); |
| } |
| |
| void clear() { |
| messages.clear(); |
| } |
| } |