Index: pkg/analyzer/lib/src/dart/analysis/driver.dart |
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart |
index b01894771a07a1420283a7a2b322160cf8afaffe..5d92e0725beaedfe1ad44cd83ab3d18ce1eb19f2 100644 |
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart |
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart |
@@ -108,15 +108,20 @@ class AnalysisDriver { |
PackageBundle _sdkBundle; |
/** |
- * The mapping from the files for which analysis was requested using |
- * [getResult] to the [Completer]s to report the result. |
+ * The set of explicitly analyzed files. |
*/ |
- final _requestedFiles = <String, List<Completer<AnalysisResult>>>{}; |
+ final _explicitFiles = new LinkedHashSet<String>(); |
/** |
- * The set of explicitly analyzed files. |
+ * The set of priority files, that should be analyzed sooner. |
*/ |
- final _explicitFiles = new LinkedHashSet<String>(); |
+ final _priorityFiles = new LinkedHashSet<String>(); |
+ |
+ /** |
+ * The mapping from the files for which analysis was requested using |
+ * [getResult] to the [Completer]s to report the result. |
+ */ |
+ final _requestedFiles = <String, List<Completer<AnalysisResult>>>{}; |
/** |
* The set of files were reported as changed through [changeFile] and not |
@@ -176,7 +181,9 @@ class AnalysisDriver { |
* between priority files, nor between priority and non-priority files. |
*/ |
void set priorityFiles(List<String> priorityPaths) { |
- // TODO(scheglov) implement |
+ _priorityFiles.clear(); |
+ _priorityFiles.addAll(priorityPaths); |
+ _hasWork.notify(); |
} |
/** |
@@ -220,7 +227,27 @@ class AnalysisDriver { |
continue; |
} |
- // Analyze the first file in the general queue. |
+ // TODO(scheglov) analyze requested files |
+ |
+ // Analyze a priority file. |
+ if (_priorityFiles.isNotEmpty) { |
+ bool analyzed = false; |
+ for (String path in _priorityFiles) { |
+ if (_filesToAnalyze.remove(path)) { |
+ _File file = _fileForPath(path); |
+ AnalysisResult result = _computeAnalysisResult(file); |
+ yield result; |
+ break; |
Paul Berry
2016/10/31 16:51:40
Do need to set `analyzed = true` here? Otherwise
scheglov
2016/10/31 17:38:52
Yes, you are right, we need to set `analyzed = tru
|
+ } |
+ } |
+ // Repeat the processing loop. |
+ if (analyzed) { |
+ _hasWork.notify(); |
+ continue; |
+ } |
+ } |
+ |
+ // Analyze a general file. |
if (_filesToAnalyze.isNotEmpty) { |
String path = _removeFirst(_filesToAnalyze); |
_File file = _fileForPath(path); |
@@ -235,7 +262,6 @@ class AnalysisDriver { |
analysisSection.exit(); |
analysisSection = null; |
} |
- // TODO(scheglov) implement |
} finally { |
print('The stream was cancelled.'); |
} |