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 import 'dart:core'; | 9 import 'dart:core'; |
10 import 'dart:io' as io; | 10 import 'dart:io' as io; |
(...skipping 12 matching lines...) Expand all Loading... |
23 import 'package:analysis_server/src/services/index/index.dart'; | 23 import 'package:analysis_server/src/services/index/index.dart'; |
24 import 'package:analysis_server/src/services/search/search_engine.dart'; | 24 import 'package:analysis_server/src/services/search/search_engine.dart'; |
25 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; | 25 import 'package:analysis_server/src/services/search/search_engine_internal.dart'
; |
26 import 'package:analysis_server/src/single_context_manager.dart'; | 26 import 'package:analysis_server/src/single_context_manager.dart'; |
27 import 'package:analyzer/dart/ast/ast.dart'; | 27 import 'package:analyzer/dart/ast/ast.dart'; |
28 import 'package:analyzer/dart/element/element.dart'; | 28 import 'package:analyzer/dart/element/element.dart'; |
29 import 'package:analyzer/exception/exception.dart'; | 29 import 'package:analyzer/exception/exception.dart'; |
30 import 'package:analyzer/file_system/file_system.dart'; | 30 import 'package:analyzer/file_system/file_system.dart'; |
31 import 'package:analyzer/instrumentation/instrumentation.dart'; | 31 import 'package:analyzer/instrumentation/instrumentation.dart'; |
32 import 'package:analyzer/plugin/resolver_provider.dart'; | 32 import 'package:analyzer/plugin/resolver_provider.dart'; |
| 33 import 'package:analyzer/source/pub_package_map_provider.dart'; |
33 import 'package:analyzer/src/context/builder.dart'; | 34 import 'package:analyzer/src/context/builder.dart'; |
34 import 'package:analyzer/src/dart/ast/utilities.dart'; | 35 import 'package:analyzer/src/dart/ast/utilities.dart'; |
35 import 'package:analyzer/src/generated/engine.dart'; | 36 import 'package:analyzer/src/generated/engine.dart'; |
36 import 'package:analyzer/src/generated/sdk.dart'; | 37 import 'package:analyzer/src/generated/sdk.dart'; |
37 import 'package:analyzer/src/generated/source.dart'; | 38 import 'package:analyzer/src/generated/source.dart'; |
38 import 'package:analyzer/src/generated/source_io.dart'; | 39 import 'package:analyzer/src/generated/source_io.dart'; |
39 import 'package:analyzer/src/generated/utilities_general.dart'; | 40 import 'package:analyzer/src/generated/utilities_general.dart'; |
| 41 import 'package:analyzer/src/summary/package_bundle_reader.dart'; |
40 import 'package:analyzer/src/summary/pub_summary.dart'; | 42 import 'package:analyzer/src/summary/pub_summary.dart'; |
41 import 'package:analyzer/src/task/dart.dart'; | 43 import 'package:analyzer/src/task/dart.dart'; |
42 import 'package:analyzer/src/util/glob.dart'; | 44 import 'package:analyzer/src/util/glob.dart'; |
43 import 'package:analyzer/task/dart.dart'; | 45 import 'package:analyzer/task/dart.dart'; |
44 import 'package:plugin/plugin.dart'; | 46 import 'package:plugin/plugin.dart'; |
45 | 47 |
46 typedef void OptionUpdater(AnalysisOptionsImpl options); | 48 typedef void OptionUpdater(AnalysisOptionsImpl options); |
47 | 49 |
48 /** | 50 /** |
49 * Enum representing reasons why analysis might be done for a given file. | 51 * Enum representing reasons why analysis might be done for a given file. |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 * responses to the given [channel]. | 313 * responses to the given [channel]. |
312 * | 314 * |
313 * If [rethrowExceptions] is true, then any exceptions thrown by analysis are | 315 * If [rethrowExceptions] is true, then any exceptions thrown by analysis are |
314 * propagated up the call stack. The default is true to allow analysis | 316 * propagated up the call stack. The default is true to allow analysis |
315 * exceptions to show up in unit tests, but it should be set to false when | 317 * exceptions to show up in unit tests, but it should be set to false when |
316 * running a full analysis server. | 318 * running a full analysis server. |
317 */ | 319 */ |
318 AnalysisServer( | 320 AnalysisServer( |
319 this.channel, | 321 this.channel, |
320 this.resourceProvider, | 322 this.resourceProvider, |
| 323 PubPackageMapProvider packageMapProvider, |
321 Index _index, | 324 Index _index, |
322 this.serverPlugin, | 325 this.serverPlugin, |
323 this.options, | 326 this.options, |
324 this.sdkManager, | 327 this.sdkManager, |
325 this.instrumentationService, | 328 this.instrumentationService, |
326 {ResolverProvider fileResolverProvider: null, | 329 {ResolverProvider fileResolverProvider: null, |
327 ResolverProvider packageResolverProvider: null, | 330 ResolverProvider packageResolverProvider: null, |
328 bool useSingleContextManager: false, | 331 bool useSingleContextManager: false, |
329 this.rethrowExceptions: true}) | 332 this.rethrowExceptions: true}) |
330 : index = _index, | 333 : index = _index, |
331 searchEngine = _index != null ? new SearchEngineImpl(_index) : null { | 334 searchEngine = _index != null ? new SearchEngineImpl(_index) : null { |
332 _performance = performanceDuringStartup; | 335 _performance = performanceDuringStartup; |
333 defaultContextOptions.incremental = true; | 336 defaultContextOptions.incremental = true; |
334 defaultContextOptions.incrementalApi = | 337 defaultContextOptions.incrementalApi = |
335 options.enableIncrementalResolutionApi; | 338 options.enableIncrementalResolutionApi; |
336 defaultContextOptions.incrementalValidation = | 339 defaultContextOptions.incrementalValidation = |
337 options.enableIncrementalResolutionValidation; | 340 options.enableIncrementalResolutionValidation; |
338 defaultContextOptions.finerGrainedInvalidation = | 341 defaultContextOptions.finerGrainedInvalidation = |
339 options.finerGrainedInvalidation; | 342 options.finerGrainedInvalidation; |
340 defaultContextOptions.generateImplicitErrors = false; | 343 defaultContextOptions.generateImplicitErrors = false; |
341 operationQueue = new ServerOperationQueue(); | 344 operationQueue = new ServerOperationQueue(); |
342 if (useSingleContextManager) { | 345 if (useSingleContextManager) { |
343 contextManager = new SingleContextManager(resourceProvider, sdkManager, | 346 contextManager = new SingleContextManager(resourceProvider, sdkManager, |
344 packageResolverProvider, analyzedFilesGlobs, defaultContextOptions); | 347 packageResolverProvider, analyzedFilesGlobs, defaultContextOptions); |
345 } else { | 348 } else { |
346 contextManager = new ContextManagerImpl( | 349 contextManager = new ContextManagerImpl( |
347 resourceProvider, | 350 resourceProvider, |
348 sdkManager, | 351 sdkManager, |
349 packageResolverProvider, | 352 packageResolverProvider, |
| 353 packageMapProvider, |
350 analyzedFilesGlobs, | 354 analyzedFilesGlobs, |
351 instrumentationService, | 355 instrumentationService, |
352 defaultContextOptions); | 356 defaultContextOptions); |
353 } | 357 } |
354 this.fileResolverProvider = fileResolverProvider; | 358 this.fileResolverProvider = fileResolverProvider; |
355 this.packageResolverProvider = packageResolverProvider; | 359 this.packageResolverProvider = packageResolverProvider; |
356 ServerContextManagerCallbacks contextManagerCallbacks = | 360 ServerContextManagerCallbacks contextManagerCallbacks = |
357 new ServerContextManagerCallbacks(this, resourceProvider); | 361 new ServerContextManagerCallbacks(this, resourceProvider); |
358 contextManager.callbacks = contextManagerCallbacks; | 362 contextManager.callbacks = contextManagerCallbacks; |
359 _noErrorNotification = options.noErrorNotification; | 363 _noErrorNotification = options.noErrorNotification; |
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1417 // to be scheduled for this context. | 1421 // to be scheduled for this context. |
1418 } | 1422 } |
1419 // | 1423 // |
1420 // Update the defaults used to create new contexts. | 1424 // Update the defaults used to create new contexts. |
1421 // | 1425 // |
1422 optionUpdaters.forEach((OptionUpdater optionUpdater) { | 1426 optionUpdaters.forEach((OptionUpdater optionUpdater) { |
1423 optionUpdater(defaultContextOptions); | 1427 optionUpdater(defaultContextOptions); |
1424 }); | 1428 }); |
1425 } | 1429 } |
1426 | 1430 |
| 1431 void _computingPackageMap(bool computing) { |
| 1432 if (serverServices.contains(ServerService.STATUS)) { |
| 1433 PubStatus pubStatus = new PubStatus(computing); |
| 1434 ServerStatusParams params = new ServerStatusParams(pub: pubStatus); |
| 1435 sendNotification(params.toNotification()); |
| 1436 } |
| 1437 } |
| 1438 |
1427 /** | 1439 /** |
1428 * Return a set of all contexts whose associated folder is contained within, | 1440 * Return a set of all contexts whose associated folder is contained within, |
1429 * or equal to, one of the resources in the given list of [resources]. | 1441 * or equal to, one of the resources in the given list of [resources]. |
1430 */ | 1442 */ |
1431 Set<AnalysisContext> _getContexts(List<Resource> resources) { | 1443 Set<AnalysisContext> _getContexts(List<Resource> resources) { |
1432 Set<AnalysisContext> contexts = new HashSet<AnalysisContext>(); | 1444 Set<AnalysisContext> contexts = new HashSet<AnalysisContext>(); |
1433 resources.forEach((Resource resource) { | 1445 resources.forEach((Resource resource) { |
1434 if (resource is Folder) { | 1446 if (resource is Folder) { |
1435 contexts.addAll(contextManager.contextsInAnalysisRoot(resource)); | 1447 contexts.addAll(contextManager.contextsInAnalysisRoot(resource)); |
1436 } | 1448 } |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1607 analysisServer.schedulePerformAnalysisOperation(context); | 1619 analysisServer.schedulePerformAnalysisOperation(context); |
1608 List<String> flushedFiles = new List<String>(); | 1620 List<String> flushedFiles = new List<String>(); |
1609 for (Source source in changeSet.removedSources) { | 1621 for (Source source in changeSet.removedSources) { |
1610 flushedFiles.add(source.fullName); | 1622 flushedFiles.add(source.fullName); |
1611 } | 1623 } |
1612 sendAnalysisNotificationFlushResults(analysisServer, flushedFiles); | 1624 sendAnalysisNotificationFlushResults(analysisServer, flushedFiles); |
1613 } | 1625 } |
1614 } | 1626 } |
1615 | 1627 |
1616 @override | 1628 @override |
| 1629 void computingPackageMap(bool computing) => |
| 1630 analysisServer._computingPackageMap(computing); |
| 1631 |
| 1632 @override |
1617 ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options) { | 1633 ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options) { |
1618 String defaultPackageFilePath = null; | 1634 String defaultPackageFilePath = null; |
1619 String defaultPackagesDirectoryPath = null; | 1635 String defaultPackagesDirectoryPath = null; |
1620 String path = (analysisServer.contextManager as ContextManagerImpl) | 1636 String path = (analysisServer.contextManager as ContextManagerImpl) |
1621 .normalizedPackageRoots[folder.path]; | 1637 .normalizedPackageRoots[folder.path]; |
1622 if (path != null) { | 1638 if (path != null) { |
1623 Resource resource = resourceProvider.getResource(path); | 1639 Resource resource = resourceProvider.getResource(path); |
1624 if (resource.exists) { | 1640 if (resource.exists) { |
1625 if (resource is File) { | 1641 if (resource is File) { |
1626 defaultPackageFilePath = path; | 1642 defaultPackageFilePath = path; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1765 /** | 1781 /** |
1766 * The [PerformanceTag] for time spent in server request handlers. | 1782 * The [PerformanceTag] for time spent in server request handlers. |
1767 */ | 1783 */ |
1768 static PerformanceTag serverRequests = new PerformanceTag('serverRequests'); | 1784 static PerformanceTag serverRequests = new PerformanceTag('serverRequests'); |
1769 | 1785 |
1770 /** | 1786 /** |
1771 * The [PerformanceTag] for time spent in split store microtasks. | 1787 * The [PerformanceTag] for time spent in split store microtasks. |
1772 */ | 1788 */ |
1773 static PerformanceTag splitStore = new PerformanceTag('splitStore'); | 1789 static PerformanceTag splitStore = new PerformanceTag('splitStore'); |
1774 } | 1790 } |
OLD | NEW |