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 context.directory.manager; | 5 library context.directory.manager; |
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_server.dart'; | 10 import 'package:analysis_server/src/analysis_server.dart'; |
11 import 'package:analyzer/file_system/file_system.dart'; | 11 import 'package:analyzer/file_system/file_system.dart'; |
| 12 import 'package:analyzer/instrumentation/instrumentation.dart'; |
12 import 'package:analyzer/source/package_map_provider.dart'; | 13 import 'package:analyzer/source/package_map_provider.dart'; |
13 import 'package:analyzer/source/package_map_resolver.dart'; | 14 import 'package:analyzer/source/package_map_resolver.dart'; |
14 import 'package:analyzer/src/generated/engine.dart'; | 15 import 'package:analyzer/src/generated/engine.dart'; |
15 import 'package:analyzer/src/generated/java_io.dart'; | 16 import 'package:analyzer/src/generated/java_io.dart'; |
16 import 'package:analyzer/src/generated/source.dart'; | 17 import 'package:analyzer/src/generated/source.dart'; |
17 import 'package:analyzer/src/generated/source_io.dart'; | 18 import 'package:analyzer/src/generated/source_io.dart'; |
18 import 'package:path/path.dart' as pathos; | 19 import 'package:path/path.dart' as pathos; |
19 import 'package:watcher/watcher.dart'; | 20 import 'package:watcher/watcher.dart'; |
20 | 21 |
21 | 22 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 * and non-folders have been removed. | 80 * and non-folders have been removed. |
80 */ | 81 */ |
81 Map<String, String> normalizedPackageRoots = <String, String>{}; | 82 Map<String, String> normalizedPackageRoots = <String, String>{}; |
82 | 83 |
83 /** | 84 /** |
84 * Provider which is used to determine the mapping from package name to | 85 * Provider which is used to determine the mapping from package name to |
85 * package folder. | 86 * package folder. |
86 */ | 87 */ |
87 final PackageMapProvider _packageMapProvider; | 88 final PackageMapProvider _packageMapProvider; |
88 | 89 |
89 ContextManager(this.resourceProvider, this._packageMapProvider) { | 90 /** |
| 91 * The instrumentation service used to report instrumentation data. |
| 92 */ |
| 93 final InstrumentationService _instrumentationService; |
| 94 |
| 95 ContextManager(this.resourceProvider, this._packageMapProvider, |
| 96 this._instrumentationService) { |
90 pathContext = resourceProvider.pathContext; | 97 pathContext = resourceProvider.pathContext; |
91 } | 98 } |
92 | 99 |
93 /** | 100 /** |
94 * Create and return a new analysis context. | 101 * Create and return a new analysis context. |
95 */ | 102 */ |
96 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver); | 103 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver); |
97 | 104 |
98 /** | 105 /** |
99 * Called when the set of files associated with a context have changed (or | 106 * Called when the set of files associated with a context have changed (or |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 folder, | 360 folder, |
354 pubspecFile, | 361 pubspecFile, |
355 children, | 362 children, |
356 normalizedPackageRoots[folder.path]); | 363 normalizedPackageRoots[folder.path]); |
357 _contexts[folder] = info; | 364 _contexts[folder] = info; |
358 info.changeSubscription = folder.changes.listen((WatchEvent event) { | 365 info.changeSubscription = folder.changes.listen((WatchEvent event) { |
359 _handleWatchEvent(folder, info, event); | 366 _handleWatchEvent(folder, info, event); |
360 }); | 367 }); |
361 UriResolver packageUriResolver = _computePackageUriResolver(folder, info); | 368 UriResolver packageUriResolver = _computePackageUriResolver(folder, info); |
362 info.context = addContext(folder, packageUriResolver); | 369 info.context = addContext(folder, packageUriResolver); |
| 370 info.context.name = folder.path; |
363 return info; | 371 return info; |
364 } | 372 } |
365 | 373 |
366 /** | 374 /** |
367 * Creates a new context associated with [folder]. | 375 * Creates a new context associated with [folder]. |
368 * | 376 * |
369 * If there are subfolders with 'pubspec.yaml' files, separate contexts | 377 * If there are subfolders with 'pubspec.yaml' files, separate contexts |
370 * are created for them, and excluded from the context associated with | 378 * are created for them, and excluded from the context associated with |
371 * [folder]. | 379 * [folder]. |
372 * | 380 * |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 ChangeSet changeSet = new ChangeSet(); | 461 ChangeSet changeSet = new ChangeSet(); |
454 extractedSources.forEach((path, source) { | 462 extractedSources.forEach((path, source) { |
455 oldInfo.sources.remove(path); | 463 oldInfo.sources.remove(path); |
456 changeSet.removedSource(source); | 464 changeSet.removedSource(source); |
457 }); | 465 }); |
458 applyChangesToContext(oldInfo.folder, changeSet); | 466 applyChangesToContext(oldInfo.folder, changeSet); |
459 } | 467 } |
460 } | 468 } |
461 | 469 |
462 void _handleWatchEvent(Folder folder, _ContextInfo info, WatchEvent event) { | 470 void _handleWatchEvent(Folder folder, _ContextInfo info, WatchEvent event) { |
| 471 _instrumentationService.logWatchEvent( |
| 472 folder.path, |
| 473 event.path, |
| 474 event.type.toString()); |
463 String path = event.path; | 475 String path = event.path; |
464 // maybe excluded globally | 476 // maybe excluded globally |
465 if (_isExcluded(path)) { | 477 if (_isExcluded(path)) { |
466 return; | 478 return; |
467 } | 479 } |
468 // maybe excluded from the context, so other context will handle it | 480 // maybe excluded from the context, so other context will handle it |
469 if (info.excludes(path)) { | 481 if (info.excludes(path)) { |
470 return; | 482 return; |
471 } | 483 } |
472 // handle the change | 484 // handle the change |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 return excludes(resource.path); | 714 return excludes(resource.path); |
703 } | 715 } |
704 | 716 |
705 /** | 717 /** |
706 * Returns `true` if [path] is the pubspec file of this context. | 718 * Returns `true` if [path] is the pubspec file of this context. |
707 */ | 719 */ |
708 bool isPubspec(String path) { | 720 bool isPubspec(String path) { |
709 return path == pubspecPath; | 721 return path == pubspecPath; |
710 } | 722 } |
711 } | 723 } |
OLD | NEW |