Index: pkg/analyzer_cli/lib/src/driver.dart |
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart |
index 67ca0b07db6d234d589708faf17662f0e827daee..ed2895b1f650eea4b42412eda30593cc2312f714 100644 |
--- a/pkg/analyzer_cli/lib/src/driver.dart |
+++ b/pkg/analyzer_cli/lib/src/driver.dart |
@@ -68,7 +68,7 @@ bool containsLintRuleEntry(Map<String, YamlNode> options) { |
return linterNode is YamlMap && linterNode.containsKey('rules'); |
} |
-typedef ErrorSeverity _BatchRunnerHandler(List<String> args); |
+typedef Future<ErrorSeverity> _BatchRunnerHandler(List<String> args); |
class Driver implements CommandLineStarter { |
static final PerformanceTag _analyzeAllTag = |
@@ -114,7 +114,7 @@ class Driver implements CommandLineStarter { |
} |
@override |
- void start(List<String> args) { |
+ Future<Null> start(List<String> args) async { |
if (_context != null) { |
throw new StateError("start() can only be called once"); |
} |
@@ -140,7 +140,7 @@ class Driver implements CommandLineStarter { |
return _analyzeAll(options); |
}); |
} else { |
- ErrorSeverity severity = _analyzeAll(options); |
+ ErrorSeverity severity = await _analyzeAll(options); |
// In case of error propagate exit code. |
if (severity == ErrorSeverity.ERROR) { |
io.exitCode = severity.ordinal; |
@@ -158,14 +158,17 @@ class Driver implements CommandLineStarter { |
} |
} |
- ErrorSeverity _analyzeAll(CommandLineOptions options) { |
- return _analyzeAllTag.makeCurrentWhile(() { |
- return _analyzeAllImpl(options); |
- }); |
+ Future<ErrorSeverity> _analyzeAll(CommandLineOptions options) async { |
+ PerformanceTag previous = _analyzeAllTag.makeCurrent(); |
+ try { |
+ return await _analyzeAllImpl(options); |
+ } finally { |
+ previous.makeCurrent(); |
+ } |
} |
/// Perform analysis according to the given [options]. |
- ErrorSeverity _analyzeAllImpl(CommandLineOptions options) { |
+ Future<ErrorSeverity> _analyzeAllImpl(CommandLineOptions options) async { |
if (!options.machineFormat) { |
outSink.writeln("Analyzing ${options.sourceFiles}..."); |
} |
@@ -217,7 +220,7 @@ class Driver implements CommandLineStarter { |
parts.add(source); |
continue; |
} |
- ErrorSeverity status = _runAnalyzer(source, options); |
+ ErrorSeverity status = await _runAnalyzer(source, options); |
allResult = allResult.max(status); |
libUris.add(source.uri); |
} |
@@ -536,6 +539,7 @@ class Driver implements CommandLineStarter { |
}); |
_context.sourceFactory = sourceFactory; |
+ |
if (sdkBundle != null) { |
_context.resultProvider = |
new InputPackagesResultProvider(_context, summaryDataStore); |
@@ -633,11 +637,12 @@ class Driver implements CommandLineStarter { |
} |
/// Analyze a single source. |
- ErrorSeverity _runAnalyzer(Source source, CommandLineOptions options) { |
+ Future<ErrorSeverity> _runAnalyzer( |
+ Source source, CommandLineOptions options) async { |
int startTime = currentTimeMillis(); |
- AnalyzerImpl analyzer = |
- new AnalyzerImpl(_context, source, options, stats, startTime); |
- var errorSeverity = analyzer.analyzeSync(); |
+ AnalyzerImpl analyzer = new AnalyzerImpl( |
+ _context.analysisOptions, _context, source, options, stats, startTime); |
+ ErrorSeverity errorSeverity = await analyzer.analyze(); |
if (errorSeverity == ErrorSeverity.ERROR) { |
io.exitCode = errorSeverity.ordinal; |
} |
@@ -809,7 +814,7 @@ class _BatchRunner { |
// Read line from stdin. |
Stream cmdLine = |
io.stdin.transform(UTF8.decoder).transform(new LineSplitter()); |
- cmdLine.listen((String line) { |
+ cmdLine.listen((String line) async { |
// Maybe finish. |
if (line.isEmpty) { |
var time = stopwatch.elapsedMilliseconds; |
@@ -827,7 +832,7 @@ class _BatchRunner { |
// Analyze single set of arguments. |
try { |
totalTests++; |
- ErrorSeverity result = handler(args); |
+ ErrorSeverity result = await handler(args); |
bool resultPass = result != ErrorSeverity.ERROR; |
if (!resultPass) { |
testsFailed++; |