Index: pkg/analyzer_cli/lib/src/analyzer_impl.dart |
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart |
index f33706ca909a31c79c9a16ef59e2da544890cac8..22654ef5621b016c012f46d8e1ec994529fbf086 100644 |
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart |
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart |
@@ -4,6 +4,7 @@ |
library analyzer_cli.src.analyzer_impl; |
+import 'dart:async'; |
import 'dart:collection'; |
import 'dart:io'; |
@@ -37,6 +38,7 @@ class AnalyzerImpl { |
final CommandLineOptions options; |
final int startTime; |
+ final AnalysisOptions analysisOptions; |
final AnalysisContext context; |
/// Accumulated analysis statistics. |
@@ -61,8 +63,8 @@ class AnalyzerImpl { |
/// specified the "--package-warnings" option. |
String _selfPackageName; |
- AnalyzerImpl(this.context, this.librarySource, this.options, this.stats, |
- this.startTime); |
+ AnalyzerImpl(this.analysisOptions, this.context, this.librarySource, |
+ this.options, this.stats, this.startTime); |
/// Returns the maximal [ErrorSeverity] of the recorded errors. |
ErrorSeverity get maxErrorSeverity { |
@@ -111,24 +113,27 @@ class AnalyzerImpl { |
} |
} |
- /// Treats the [sourcePath] as the top level library and analyzes it using a |
- /// synchronous algorithm over the analysis engine. If [printMode] is `0`, |
- /// then no error or performance information is printed. If [printMode] is `1`, |
- /// then both will be printed. If [printMode] is `2`, then only performance |
- /// information will be printed, and it will be marked as being for a cold VM. |
- ErrorSeverity analyzeSync({int printMode: 1}) { |
+ /// Treats the [sourcePath] as the top level library and analyzes it using |
+ /// the analysis engine. If [printMode] is `0`, then no error or performance |
+ /// information is printed. If [printMode] is `1`, then both will be printed. |
+ /// If [printMode] is `2`, then only performance information will be printed, |
+ /// and it will be marked as being for a cold VM. |
+ Future<ErrorSeverity> analyze({int printMode: 1}) async { |
setupForAnalysis(); |
- return _analyzeSync(printMode); |
+ return await _analyze(printMode); |
} |
/// Fills [errorInfos] using [sources]. |
- void prepareErrors() { |
- return _prepareErrorsTag.makeCurrentWhile(() { |
+ Future<Null> prepareErrors() async { |
+ PerformanceTag previous = _prepareErrorsTag.makeCurrent(); |
+ try { |
for (Source source in sources) { |
context.computeErrors(source); |
errorInfos.add(context.getErrors(source)); |
} |
- }); |
+ } finally { |
+ previous.makeCurrent(); |
+ } |
} |
/// Fills [sources]. |
@@ -148,8 +153,7 @@ class AnalyzerImpl { |
} |
} |
- /// The sync version of analysis. |
- ErrorSeverity _analyzeSync(int printMode) { |
+ Future<ErrorSeverity> _analyze(int printMode) async { |
// Don't try to analyze parts. |
if (context.computeKindOf(librarySource) == SourceKind.PART) { |
stderr.writeln("Only libraries can be analyzed."); |
@@ -157,9 +161,9 @@ class AnalyzerImpl { |
"${librarySource.fullName} is a part and can not be analyzed."); |
return ErrorSeverity.ERROR; |
} |
- var libraryElement = _resolveLibrary(); |
+ LibraryElement libraryElement = await _resolveLibrary(); |
prepareSources(libraryElement); |
- prepareErrors(); |
+ await prepareErrors(); |
// Print errors and performance numbers. |
if (printMode == 1) { |
@@ -240,12 +244,15 @@ class AnalyzerImpl { |
} |
ProcessedSeverity _processError(AnalysisError error) => |
- processError(error, options, context); |
+ processError(error, options, analysisOptions); |
- LibraryElement _resolveLibrary() { |
- return _resolveLibraryTag.makeCurrentWhile(() { |
+ Future<LibraryElement> _resolveLibrary() async { |
+ PerformanceTag previous = _resolveLibraryTag.makeCurrent(); |
+ try { |
return context.computeLibraryElement(librarySource); |
- }); |
+ } finally { |
+ previous.makeCurrent(); |
+ } |
} |
/// Compute the severity of the error; however: |
@@ -255,10 +262,10 @@ class AnalyzerImpl { |
/// * if [options.lintsAreFatal] is true, escalate lints to errors. |
static ErrorSeverity computeSeverity( |
AnalysisError error, CommandLineOptions options, |
- [AnalysisContext context]) { |
- if (context != null) { |
+ [AnalysisOptions analysisOptions]) { |
+ if (analysisOptions != null) { |
ErrorProcessor processor = |
- ErrorProcessor.getProcessor(context.analysisOptions, error); |
+ ErrorProcessor.getProcessor(analysisOptions, error); |
// If there is a processor for this error, defer to it. |
if (processor != null) { |
return processor.severity; |
@@ -296,8 +303,8 @@ class AnalyzerImpl { |
/// Check various configuration options to get a desired severity for this |
/// [error] (or `null` if it's to be suppressed). |
static ProcessedSeverity processError(AnalysisError error, |
- CommandLineOptions options, AnalysisContext context) { |
- ErrorSeverity severity = computeSeverity(error, options, context); |
+ CommandLineOptions options, AnalysisOptions analysisOptions) { |
+ ErrorSeverity severity = computeSeverity(error, options, analysisOptions); |
bool isOverridden = false; |
// Skip TODOs categorically (unless escalated to ERROR or HINT.) |