| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library analysis.server; | 5 library analysis.server; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analysis_server/src/analysis_logger.dart'; | 10 import 'package:analysis_server/src/analysis_logger.dart'; |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 */ | 165 */ |
| 166 Map<AnalysisContext, Completer<AnalysisDoneReason>> contextAnalysisDoneComplet
ers = | 166 Map<AnalysisContext, Completer<AnalysisDoneReason>> contextAnalysisDoneComplet
ers = |
| 167 new HashMap<AnalysisContext, Completer<AnalysisDoneReason>>(); | 167 new HashMap<AnalysisContext, Completer<AnalysisDoneReason>>(); |
| 168 | 168 |
| 169 /** | 169 /** |
| 170 * The option possibly set from the server initialization which disables error
notifications. | 170 * The option possibly set from the server initialization which disables error
notifications. |
| 171 */ | 171 */ |
| 172 bool _noErrorNotification; | 172 bool _noErrorNotification; |
| 173 | 173 |
| 174 /** | 174 /** |
| 175 * The [Completer] that completes when analysis is complete. |
| 176 */ |
| 177 Completer _onAnalysisCompleteCompleter; |
| 178 |
| 179 /** |
| 175 * The controller that is notified when analysis is started. | 180 * The controller that is notified when analysis is started. |
| 176 */ | 181 */ |
| 177 StreamController<AnalysisContext> _onAnalysisStartedController; | 182 StreamController<AnalysisContext> _onAnalysisStartedController; |
| 178 | 183 |
| 179 /** | 184 /** |
| 180 * The controller that is notified when analysis is complete. | |
| 181 */ | |
| 182 StreamController _onAnalysisCompleteController; | |
| 183 | |
| 184 /** | |
| 185 * The controller that is notified when a single file has been analyzed. | 185 * The controller that is notified when a single file has been analyzed. |
| 186 */ | 186 */ |
| 187 StreamController<ChangeNotice> _onFileAnalyzedController; | 187 StreamController<ChangeNotice> _onFileAnalyzedController; |
| 188 | 188 |
| 189 /** | 189 /** |
| 190 * The controller used to notify others when priority sources change. | 190 * The controller used to notify others when priority sources change. |
| 191 */ | 191 */ |
| 192 StreamController<PriorityChangeEvent> _onPriorityChangeController; | 192 StreamController<PriorityChangeEvent> _onPriorityChangeController; |
| 193 | 193 |
| 194 /** | 194 /** |
| (...skipping 29 matching lines...) Expand all Loading... |
| 224 contextDirectoryManager = | 224 contextDirectoryManager = |
| 225 new ServerContextManager(this, resourceProvider, packageMapProvider); | 225 new ServerContextManager(this, resourceProvider, packageMapProvider); |
| 226 contextDirectoryManager.defaultOptions.incremental = true; | 226 contextDirectoryManager.defaultOptions.incremental = true; |
| 227 contextDirectoryManager.defaultOptions.incrementalApi = | 227 contextDirectoryManager.defaultOptions.incrementalApi = |
| 228 analysisServerOptions.enableIncrementalResolutionApi; | 228 analysisServerOptions.enableIncrementalResolutionApi; |
| 229 contextDirectoryManager.defaultOptions.incrementalValidation = | 229 contextDirectoryManager.defaultOptions.incrementalValidation = |
| 230 analysisServerOptions.enableIncrementalResolutionValidation; | 230 analysisServerOptions.enableIncrementalResolutionValidation; |
| 231 _noErrorNotification = analysisServerOptions.noErrorNotification; | 231 _noErrorNotification = analysisServerOptions.noErrorNotification; |
| 232 AnalysisEngine.instance.logger = new AnalysisLogger(); | 232 AnalysisEngine.instance.logger = new AnalysisLogger(); |
| 233 _onAnalysisStartedController = new StreamController.broadcast(); | 233 _onAnalysisStartedController = new StreamController.broadcast(); |
| 234 _onAnalysisCompleteController = new StreamController.broadcast(); | |
| 235 _onFileAnalyzedController = new StreamController.broadcast(); | 234 _onFileAnalyzedController = new StreamController.broadcast(); |
| 236 _onPriorityChangeController = | 235 _onPriorityChangeController = |
| 237 new StreamController<PriorityChangeEvent>.broadcast(); | 236 new StreamController<PriorityChangeEvent>.broadcast(); |
| 238 running = true; | 237 running = true; |
| 239 Notification notification = new ServerConnectedParams().toNotification(); | 238 Notification notification = new ServerConnectedParams().toNotification(); |
| 240 channel.sendNotification(notification); | 239 channel.sendNotification(notification); |
| 241 channel.listen(handleRequest, onDone: done, onError: error); | 240 channel.listen(handleRequest, onDone: done, onError: error); |
| 242 } | 241 } |
| 243 | 242 |
| 244 /** | 243 /** |
| 245 * The stream that is notified when analysis is complete. | 244 * The [Future] that completes when analysis is complete. |
| 246 */ | 245 */ |
| 247 Stream get onAnalysisComplete => _onAnalysisCompleteController.stream; | 246 Future get onAnalysisComplete { |
| 247 if (isAnalysisComplete()) { |
| 248 return new Future.value(); |
| 249 } |
| 250 if (_onAnalysisCompleteCompleter == null) { |
| 251 _onAnalysisCompleteCompleter = new Completer(); |
| 252 } |
| 253 return _onAnalysisCompleteCompleter.future; |
| 254 } |
| 248 | 255 |
| 249 /** | 256 /** |
| 250 * The stream that is notified when analysis of a context is started. | 257 * The stream that is notified when analysis of a context is started. |
| 251 */ | 258 */ |
| 252 Stream<AnalysisContext> get onAnalysisStarted { | 259 Stream<AnalysisContext> get onAnalysisStarted { |
| 253 return _onAnalysisStartedController.stream; | 260 return _onAnalysisStartedController.stream; |
| 254 } | 261 } |
| 255 | 262 |
| 256 /** | 263 /** |
| 257 * The stream that is notified when contexts are added or removed. | 264 * The stream that is notified when contexts are added or removed. |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 'Unexpected exception during analysis', | 632 'Unexpected exception during analysis', |
| 626 new CaughtException(exception, stackTrace)); | 633 new CaughtException(exception, stackTrace)); |
| 627 } | 634 } |
| 628 sendServerErrorNotification(exception, stackTrace, fatal: true); | 635 sendServerErrorNotification(exception, stackTrace, fatal: true); |
| 629 shutdown(); | 636 shutdown(); |
| 630 } finally { | 637 } finally { |
| 631 if (!operationQueue.isEmpty) { | 638 if (!operationQueue.isEmpty) { |
| 632 _schedulePerformOperation(); | 639 _schedulePerformOperation(); |
| 633 } else { | 640 } else { |
| 634 sendStatusNotification(null); | 641 sendStatusNotification(null); |
| 635 _onAnalysisCompleteController.add(null); | 642 if (_onAnalysisCompleteCompleter != null) { |
| 643 _onAnalysisCompleteCompleter.complete(); |
| 644 _onAnalysisCompleteCompleter = null; |
| 645 } |
| 636 } | 646 } |
| 637 } | 647 } |
| 638 } | 648 } |
| 639 | 649 |
| 640 /** | 650 /** |
| 641 * Trigger reanalysis of all files from disk. | 651 * Trigger reanalysis of all files from disk. |
| 642 */ | 652 */ |
| 643 void reanalyze() { | 653 void reanalyze() { |
| 644 // Clear any operations that are pending. | 654 // Clear any operations that are pending. |
| 645 operationQueue.clear(); | 655 operationQueue.clear(); |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 * [packageUriResolver]. | 1119 * [packageUriResolver]. |
| 1110 */ | 1120 */ |
| 1111 SourceFactory _createSourceFactory(UriResolver packageUriResolver) { | 1121 SourceFactory _createSourceFactory(UriResolver packageUriResolver) { |
| 1112 List<UriResolver> resolvers = <UriResolver>[ | 1122 List<UriResolver> resolvers = <UriResolver>[ |
| 1113 new DartUriResolver(analysisServer.defaultSdk), | 1123 new DartUriResolver(analysisServer.defaultSdk), |
| 1114 new ResourceUriResolver(resourceProvider), | 1124 new ResourceUriResolver(resourceProvider), |
| 1115 packageUriResolver]; | 1125 packageUriResolver]; |
| 1116 return new SourceFactory(resolvers); | 1126 return new SourceFactory(resolvers); |
| 1117 } | 1127 } |
| 1118 } | 1128 } |
| OLD | NEW |