| Index: tests/compiler/dart2js/analyze_helper.dart
|
| diff --git a/tests/compiler/dart2js/analyze_helper.dart b/tests/compiler/dart2js/analyze_helper.dart
|
| index ef6439d255971cb883d28a4c7a55dc2e4450360d..41dc321a00e730b628f69bcc3e03bd43e8251e68 100644
|
| --- a/tests/compiler/dart2js/analyze_helper.dart
|
| +++ b/tests/compiler/dart2js/analyze_helper.dart
|
| @@ -10,7 +10,8 @@ import 'package:compiler/compiler.dart' as api;
|
| import 'package:compiler/src/apiimpl.dart';
|
| import 'package:compiler/src/commandline_options.dart';
|
| import 'package:compiler/src/diagnostics/messages.dart' show
|
| - Message;
|
| + Message,
|
| + MessageKind;
|
| import 'package:compiler/src/filenames.dart';
|
| import 'package:compiler/src/source_file_provider.dart';
|
| import 'package:compiler/src/util/uri_extras.dart';
|
| @@ -33,15 +34,16 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| bool hasErrors = false;
|
| bool lastWasWhitelisted = false;
|
|
|
| - Map<String, Map<String, int>> whiteListMap
|
| - = new Map<String, Map<String, int>>();
|
| + Map<String, Map<dynamic/*String|MessageKind*/, int>> whiteListMap
|
| + = new Map<String, Map<dynamic/*String|MessageKind*/, int>>();
|
|
|
| - CollectingDiagnosticHandler(Map<String, List<String>> whiteList,
|
| - SourceFileProvider provider)
|
| + CollectingDiagnosticHandler(
|
| + Map<String, List/*<String|MessageKind>*/> whiteList,
|
| + SourceFileProvider provider)
|
| : super(provider) {
|
| - whiteList.forEach((String file, List<String> messageParts) {
|
| - var useMap = new Map<String,int>();
|
| - for (String messagePart in messageParts) {
|
| + whiteList.forEach((String file, List/*<String|MessageKind>*/ messageParts) {
|
| + var useMap = new Map<dynamic/*String|MessageKind*/, int>();
|
| + for (var messagePart in messageParts) {
|
| useMap[messagePart] = 0;
|
| }
|
| whiteListMap[file] = useMap;
|
| @@ -57,7 +59,7 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| bool checkWhiteListUse() {
|
| bool allUsed = true;
|
| for (String file in whiteListMap.keys) {
|
| - for (String messagePart in whiteListMap[file].keys) {
|
| + for (var messagePart in whiteListMap[file].keys) {
|
| if (whiteListMap[file][messagePart] == 0) {
|
| print("Whitelisting '$messagePart' is unused in '$file'. "
|
| "Remove the whitelisting from the whitelist map.");
|
| @@ -70,7 +72,7 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
|
|
| void reportWhiteListUse() {
|
| for (String file in whiteListMap.keys) {
|
| - for (String messagePart in whiteListMap[file].keys) {
|
| + for (var messagePart in whiteListMap[file].keys) {
|
| int useCount = whiteListMap[file][messagePart];
|
| print("Whitelisted message '$messagePart' suppressed $useCount "
|
| "time(s) in '$file'.");
|
| @@ -78,15 +80,22 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| }
|
| }
|
|
|
| - bool checkWhiteList(Uri uri, String message) {
|
| + bool checkWhiteList(Uri uri, Message message, String text) {
|
| if (uri == null) {
|
| return false;
|
| }
|
| String path = uri.path;
|
| for (String file in whiteListMap.keys) {
|
| if (path.contains(file)) {
|
| - for (String messagePart in whiteListMap[file].keys) {
|
| - if (message.contains(messagePart)) {
|
| + for (var messagePart in whiteListMap[file].keys) {
|
| + bool found = false;
|
| + if (messagePart is String) {
|
| + found = text.contains(messagePart);
|
| + } else {
|
| + assert(messagePart is MessageKind);
|
| + found = message.kind == messagePart;
|
| + }
|
| + if (found) {
|
| whiteListMap[file][messagePart]++;
|
| return true;
|
| }
|
| @@ -100,7 +109,7 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| void report(Message message, Uri uri, int begin, int end, String text,
|
| api.Diagnostic kind) {
|
| if (kind == api.Diagnostic.WARNING) {
|
| - if (checkWhiteList(uri, text)) {
|
| + if (checkWhiteList(uri, message, text)) {
|
| // Suppress whitelisted warnings.
|
| lastWasWhitelisted = true;
|
| return;
|
| @@ -108,7 +117,7 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| hasWarnings = true;
|
| }
|
| if (kind == api.Diagnostic.HINT) {
|
| - if (checkWhiteList(uri, text)) {
|
| + if (checkWhiteList(uri, message, text)) {
|
| // Suppress whitelisted hints.
|
| lastWasWhitelisted = true;
|
| return;
|
| @@ -116,7 +125,7 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| hasHint = true;
|
| }
|
| if (kind == api.Diagnostic.ERROR) {
|
| - if (checkWhiteList(uri, text)) {
|
| + if (checkWhiteList(uri, message, text)) {
|
| // Suppress whitelisted errors.
|
| lastWasWhitelisted = true;
|
| return;
|
| @@ -134,11 +143,22 @@ class CollectingDiagnosticHandler extends FormattingDiagnosticHandler {
|
| typedef bool CheckResults(CompilerImpl compiler,
|
| CollectingDiagnosticHandler handler);
|
|
|
| +enum AnalysisMode {
|
| + /// Analyze all declarations in all libraries in one go.
|
| + ALL,
|
| + /// Analyze all declarations in the main library.
|
| + MAIN,
|
| + /// Analyze all declarations in the given URIs one at a time. This mode can
|
| + /// handle URIs for parts (i.e. skips these).
|
| + URI,
|
| + /// Analyze all declarations reachable from the entry point.
|
| + TREE_SHAKING,
|
| +}
|
| +
|
| Future analyze(List<Uri> uriList,
|
| - Map<String, List<String>> whiteList,
|
| - {bool analyzeAll: true,
|
| - bool analyzeMain: false,
|
| - CheckResults checkResults}) {
|
| + Map<String, List/*<String|MessageKind>*/> whiteList,
|
| + {AnalysisMode mode: AnalysisMode.ALL,
|
| + CheckResults checkResults}) async {
|
| String testFileName =
|
| relativize(Uri.base, Platform.script, Platform.isWindows);
|
|
|
| @@ -159,8 +179,17 @@ Future analyze(List<Uri> uriList,
|
| var handler = new CollectingDiagnosticHandler(whiteList, provider);
|
| var options = <String>[Flags.analyzeOnly, '--categories=Client,Server',
|
| Flags.showPackageWarnings];
|
| - if (analyzeAll) options.add(Flags.analyzeAll);
|
| - if (analyzeMain) options.add(Flags.analyzeMain);
|
| + switch (mode) {
|
| + case AnalysisMode.URI:
|
| + case AnalysisMode.MAIN:
|
| + options.add(Flags.analyzeMain);
|
| + break;
|
| + case AnalysisMode.ALL:
|
| + options.add(Flags.analyzeAll);
|
| + break;
|
| + case AnalysisMode.TREE_SHAKING:
|
| + break;
|
| + }
|
| var compiler = new CompilerImpl(
|
| provider,
|
| null,
|
| @@ -179,22 +208,25 @@ Future analyze(List<Uri> uriList,
|
| ===
|
| """;
|
|
|
| - void onCompletion(_) {
|
| - bool result;
|
| - if (checkResults != null) {
|
| - result = checkResults(compiler, handler);
|
| - } else {
|
| - result = handler.checkResults();
|
| - }
|
| - if (!result) {
|
| - print(MESSAGE);
|
| - exit(1);
|
| + if (mode == AnalysisMode.URI) {
|
| + for (Uri uri in uriList) {
|
| + await compiler.analyzeUri(uri);
|
| }
|
| - }
|
| - if (analyzeAll || analyzeMain) {
|
| + } else if (mode != AnalysisMode.TREE_SHAKING) {
|
| compiler.librariesToAnalyzeWhenRun = uriList;
|
| - return compiler.run(null).then(onCompletion);
|
| + await compiler.run(null);
|
| } else {
|
| - return compiler.run(uriList.single).then(onCompletion);
|
| + await compiler.run(uriList.single);
|
| + }
|
| +
|
| + bool result;
|
| + if (checkResults != null) {
|
| + result = checkResults(compiler, handler);
|
| + } else {
|
| + result = handler.checkResults();
|
| + }
|
| + if (!result) {
|
| + print(MESSAGE);
|
| + exit(1);
|
| }
|
| }
|
|
|