Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: pkg/analysis_server/lib/src/context_manager.dart

Issue 1750763002: Partially revert notification of package map computation (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 import 'dart:convert'; 9 import 'dart:convert';
10 import 'dart:core' hide Resource; 10 import 'dart:core' hide Resource;
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 */ 243 */
244 List<String> get excludedPaths; 244 List<String> get excludedPaths;
245 245
246 /** 246 /**
247 * Return the list of included paths (folders and files) most recently passed 247 * Return the list of included paths (folders and files) most recently passed
248 * to [setRoots]. 248 * to [setRoots].
249 */ 249 */
250 List<String> get includedPaths; 250 List<String> get includedPaths;
251 251
252 /** 252 /**
253 * The stream that is notified when we are starting or ending the computation
254 * of a package map. A value of `true` is added when the computation starts
255 * and a value of `false` is added when the computation ends.
256 */
257 Stream<bool> get onComputingPackageMap;
258
259 /**
260 * Return a list of all of the contexts reachable from the given 253 * Return a list of all of the contexts reachable from the given
261 * [analysisRoot] (the context associated with [analysisRoot] and all of its 254 * [analysisRoot] (the context associated with [analysisRoot] and all of its
262 * descendants). 255 * descendants).
263 */ 256 */
264 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot); 257 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot);
265 258
266 /** 259 /**
267 * Return the [AnalysisContext] for the "innermost" context whose associated 260 * Return the [AnalysisContext] for the "innermost" context whose associated
268 * folder is or contains the given path. ("innermost" refers to the nesting 261 * folder is or contains the given path. ("innermost" refers to the nesting
269 * of contexts, so if there is a context for path /foo and a context for 262 * of contexts, so if there is a context for path /foo and a context for
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 Folder folder, AnalysisOptions options, FolderDisposition disposition); 315 Folder folder, AnalysisOptions options, FolderDisposition disposition);
323 316
324 /** 317 /**
325 * Called when the set of files associated with a context have changed (or 318 * Called when the set of files associated with a context have changed (or
326 * some of those files have been modified). [changeSet] is the set of 319 * some of those files have been modified). [changeSet] is the set of
327 * changes that need to be applied to the context. 320 * changes that need to be applied to the context.
328 */ 321 */
329 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet); 322 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet);
330 323
331 /** 324 /**
325 * Signals that the context manager has started to compute a package map (if
326 * [computing] is `true`) or has finished (if [computing] is `false`).
327 */
328 void computingPackageMap(bool computing);
329
330 /**
332 * Remove the context associated with the given [folder]. [flushedFiles] is 331 * Remove the context associated with the given [folder]. [flushedFiles] is
333 * a list of the files which will be "orphaned" by removing this context 332 * a list of the files which will be "orphaned" by removing this context
334 * (they will no longer be analyzed by any context). 333 * (they will no longer be analyzed by any context).
335 */ 334 */
336 void removeContext(Folder folder, List<String> flushedFiles); 335 void removeContext(Folder folder, List<String> flushedFiles);
337 336
338 /** 337 /**
339 * Return `true` if the given [file] should be analyzed. 338 * Return `true` if the given [file] should be analyzed.
340 */ 339 */
341 bool shouldFileBeAnalyzed(File file); 340 bool shouldFileBeAnalyzed(File file);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 @override 453 @override
455 ContextManagerCallbacks callbacks; 454 ContextManagerCallbacks callbacks;
456 455
457 /** 456 /**
458 * Virtual [ContextInfo] which acts as the ancestor of all other 457 * Virtual [ContextInfo] which acts as the ancestor of all other
459 * [ContextInfo]s. 458 * [ContextInfo]s.
460 */ 459 */
461 final ContextInfo rootInfo = new ContextInfo._root(); 460 final ContextInfo rootInfo = new ContextInfo._root();
462 461
463 /** 462 /**
464 * The controller that is notified when we are starting or ending the
465 * computation of a package map.
466 */
467 StreamController<bool> _onComputingPackageMapController;
468
469 /**
470 * Stream subscription we are using to watch each analysis root directory for 463 * Stream subscription we are using to watch each analysis root directory for
471 * changes. 464 * changes.
472 */ 465 */
473 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions = 466 final Map<Folder, StreamSubscription<WatchEvent>> changeSubscriptions =
474 <Folder, StreamSubscription<WatchEvent>>{}; 467 <Folder, StreamSubscription<WatchEvent>>{};
475 468
476 ContextManagerImpl( 469 ContextManagerImpl(
477 this.resourceProvider, 470 this.resourceProvider,
478 this.packageResolverProvider, 471 this.packageResolverProvider,
479 this.embeddedUriResolverProvider, 472 this.embeddedUriResolverProvider,
480 this._packageMapProvider, 473 this._packageMapProvider,
481 this._instrumentationService, 474 this._instrumentationService,
482 this.defaultContextOptions) { 475 this.defaultContextOptions) {
483 absolutePathContext = resourceProvider.absolutePathContext; 476 absolutePathContext = resourceProvider.absolutePathContext;
484 pathContext = resourceProvider.pathContext; 477 pathContext = resourceProvider.pathContext;
485 _onComputingPackageMapController = new StreamController.broadcast();
486 } 478 }
487 479
488 @override 480 @override
489 Stream<bool> get onComputingPackageMap {
490 return _onComputingPackageMapController.stream;
491 }
492
493 @override
494 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot) { 481 List<AnalysisContext> contextsInAnalysisRoot(Folder analysisRoot) {
495 List<AnalysisContext> contexts = <AnalysisContext>[]; 482 List<AnalysisContext> contexts = <AnalysisContext>[];
496 ContextInfo innermostContainingInfo = 483 ContextInfo innermostContainingInfo =
497 _getInnermostContextInfoFor(analysisRoot.path); 484 _getInnermostContextInfoFor(analysisRoot.path);
498 void addContextAndDescendants(ContextInfo info) { 485 void addContextAndDescendants(ContextInfo info) {
499 contexts.add(info.context); 486 contexts.add(info.context);
500 info.children.forEach(addContextAndDescendants); 487 info.children.forEach(addContextAndDescendants);
501 } 488 }
502 if (innermostContainingInfo != null) { 489 if (innermostContainingInfo != null) {
503 if (analysisRoot == innermostContainingInfo.folder) { 490 if (analysisRoot == innermostContainingInfo.folder) {
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 } 978 }
992 } 979 }
993 // The package root does not exist (or is not a folder). Since 980 // The package root does not exist (or is not a folder). Since
994 // [setRoots] ignores any package roots that don't exist (or aren't 981 // [setRoots] ignores any package roots that don't exist (or aren't
995 // folders), the only way we should be able to get here is due to a race 982 // folders), the only way we should be able to get here is due to a race
996 // condition. In any case, the package root folder is gone, so we can't 983 // condition. In any case, the package root folder is gone, so we can't
997 // resolve packages. 984 // resolve packages.
998 return new NoPackageFolderDisposition(packageRoot: packageRoot); 985 return new NoPackageFolderDisposition(packageRoot: packageRoot);
999 } else { 986 } else {
1000 PackageMapInfo packageMapInfo; 987 PackageMapInfo packageMapInfo;
1001 _onComputingPackageMapController.add(true); 988 callbacks.computingPackageMap(true);
1002 try { 989 try {
1003 // Try .packages first. 990 // Try .packages first.
1004 if (absolutePathContext.basename(packagespecFile.path) == 991 if (absolutePathContext.basename(packagespecFile.path) ==
1005 PACKAGE_SPEC_NAME) { 992 PACKAGE_SPEC_NAME) {
1006 Packages packages = _readPackagespec(packagespecFile); 993 Packages packages = _readPackagespec(packagespecFile);
1007 return new PackagesFileDisposition(packages); 994 return new PackagesFileDisposition(packages);
1008 } 995 }
1009 if (packageResolverProvider != null) { 996 if (packageResolverProvider != null) {
1010 UriResolver resolver = packageResolverProvider(folder); 997 UriResolver resolver = packageResolverProvider(folder);
1011 if (resolver != null) { 998 if (resolver != null) {
1012 return new CustomPackageResolverDisposition(resolver); 999 return new CustomPackageResolverDisposition(resolver);
1013 } 1000 }
1014 } 1001 }
1015 1002
1016 ServerPerformanceStatistics.pub.makeCurrentWhile(() { 1003 ServerPerformanceStatistics.pub.makeCurrentWhile(() {
1017 packageMapInfo = _packageMapProvider.computePackageMap(folder); 1004 packageMapInfo = _packageMapProvider.computePackageMap(folder);
1018 }); 1005 });
1019 } finally { 1006 } finally {
1020 _onComputingPackageMapController.add(false); 1007 callbacks.computingPackageMap(false);
1021 } 1008 }
1022 for (String dependencyPath in packageMapInfo.dependencies) { 1009 for (String dependencyPath in packageMapInfo.dependencies) {
1023 addDependency(dependencyPath); 1010 addDependency(dependencyPath);
1024 } 1011 }
1025 if (packageMapInfo.packageMap == null) { 1012 if (packageMapInfo.packageMap == null) {
1026 return new NoPackageFolderDisposition(); 1013 return new NoPackageFolderDisposition();
1027 } 1014 }
1028 return new PackageMapDisposition(packageMapInfo.packageMap); 1015 return new PackageMapDisposition(packageMapInfo.packageMap);
1029 } 1016 }
1030 } 1017 }
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 ResourceProvider resourceProvider) { 1666 ResourceProvider resourceProvider) {
1680 if (packages != null) { 1667 if (packages != null) {
1681 // Construct package map for the SdkExtUriResolver. 1668 // Construct package map for the SdkExtUriResolver.
1682 Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider); 1669 Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider);
1683 return <UriResolver>[new SdkExtUriResolver(packageMap)]; 1670 return <UriResolver>[new SdkExtUriResolver(packageMap)];
1684 } else { 1671 } else {
1685 return const <UriResolver>[]; 1672 return const <UriResolver>[];
1686 } 1673 }
1687 } 1674 }
1688 } 1675 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698