blob: 022314b611a531662221f3010dc0d6ec683e1881 [file] [log] [blame]
// 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 dart2js.test.diagnostic_helper;
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.VERBOSE_INFO]);
}
/// `true` if non-verbose messages has been collected.
bool get hasRegularMessages {
return messages.any((m) => m.kind != api.Diagnostic.VERBOSE_INFO);
}
void clear() {
messages.clear();
}
}