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