| Index: pkg/analysis_server/lib/src/analysis_server.dart
|
| diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
|
| index bf7ee7307c22c2c3404a14abec42a980a405a63a..5c73edf239025614800aa9382c38f4fbcf233696 100644
|
| --- a/pkg/analysis_server/lib/src/analysis_server.dart
|
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart
|
| @@ -322,6 +322,16 @@ class AnalysisServer {
|
| ByteStore byteStore;
|
|
|
| /**
|
| + * The set of the files that are currently priority.
|
| + */
|
| + final Set<String> priorityFiles = new Set<String>();
|
| +
|
| + /**
|
| + * The cached results units for [priorityFiles].
|
| + */
|
| + final Map<String, nd.AnalysisResult> priorityFileResults = {};
|
| +
|
| + /**
|
| * Initialize a newly created server to receive requests from and send
|
| * responses to the given [channel].
|
| *
|
| @@ -574,6 +584,18 @@ class AnalysisServer {
|
| return null;
|
| }
|
|
|
| + /**
|
| + * Return the analysis result for the file with the given [path].
|
| + */
|
| + Future<nd.AnalysisResult> getAnalysisResult(String path) async {
|
| + nd.AnalysisResult result = priorityFileResults[path];
|
| + if (result != null) {
|
| + return result;
|
| + }
|
| + nd.AnalysisDriver driver = getAnalysisDriver(path);
|
| + return driver.getResult(path);
|
| + }
|
| +
|
| CompilationUnitElement getCompilationUnitElement(String file) {
|
| ContextSourcePair pair = getContextSourcePair(file);
|
| if (pair == null) {
|
| @@ -1231,6 +1253,13 @@ class AnalysisServer {
|
| */
|
| void setPriorityFiles(String requestId, List<String> files) {
|
| if (options.enableNewAnalysisDriver) {
|
| + // Flush results for files that are not priority anymore.
|
| + priorityFiles
|
| + .difference(files.toSet())
|
| + .forEach(priorityFileResults.remove);
|
| + priorityFiles.clear();
|
| + priorityFiles.addAll(files);
|
| + // Set priority files in drivers.
|
| driverMap.values.forEach((driver) {
|
| driver.priorityFiles = files;
|
| });
|
| @@ -1357,6 +1386,8 @@ class AnalysisServer {
|
| void updateContent(String id, Map<String, dynamic> changes) {
|
| if (options.enableNewAnalysisDriver) {
|
| changes.forEach((file, change) {
|
| + priorityFileResults.remove(file);
|
| +
|
| // Prepare the new contents.
|
| String oldContents = fileContentOverlay[file];
|
| String newContents;
|
| @@ -1728,6 +1759,9 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks {
|
| // TODO(scheglov) send server status
|
| });
|
| analysisDriver.results.listen((result) {
|
| + if (analysisServer.priorityFiles.contains(result.path)) {
|
| + analysisServer.priorityFileResults[result.path] = result;
|
| + }
|
| new_sendErrorNotification(analysisServer, result);
|
| CompilationUnit unit = result.unit;
|
| if (unit != null) {
|
|
|