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

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

Issue 1214243005: Hook for overriding the creation of a package resolver (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Finish the thought Created 5 years, 5 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:core' hide Resource; 9 import 'dart:core' hide Resource;
10 10
11 import 'package:analysis_server/src/analysis_server.dart'; 11 import 'package:analysis_server/src/analysis_server.dart';
12 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.d art'; 12 import 'package:analysis_server/src/source/optimizing_pub_package_map_provider.d art';
13 import 'package:analysis_server/uri/resolver_provider.dart';
13 import 'package:analyzer/file_system/file_system.dart'; 14 import 'package:analyzer/file_system/file_system.dart';
14 import 'package:analyzer/instrumentation/instrumentation.dart'; 15 import 'package:analyzer/instrumentation/instrumentation.dart';
15 import 'package:analyzer/source/package_map_resolver.dart'; 16 import 'package:analyzer/source/package_map_resolver.dart';
16 import 'package:analyzer/src/generated/engine.dart'; 17 import 'package:analyzer/src/generated/engine.dart';
17 import 'package:analyzer/src/generated/java_io.dart'; 18 import 'package:analyzer/src/generated/java_io.dart';
18 import 'package:analyzer/src/generated/source.dart'; 19 import 'package:analyzer/src/generated/source.dart';
19 import 'package:analyzer/src/generated/source_io.dart'; 20 import 'package:analyzer/src/generated/source_io.dart';
20 import 'package:path/path.dart' as pathos; 21 import 'package:path/path.dart' as pathos;
21 import 'package:watcher/watcher.dart'; 22 import 'package:watcher/watcher.dart';
22 23
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 */ 74 */
74 Map<String, String> packageRoots = <String, String>{}; 75 Map<String, String> packageRoots = <String, String>{};
75 76
76 /** 77 /**
77 * Same as [packageRoots], except that source folders have been normalized 78 * Same as [packageRoots], except that source folders have been normalized
78 * and non-folders have been removed. 79 * and non-folders have been removed.
79 */ 80 */
80 Map<String, String> normalizedPackageRoots = <String, String>{}; 81 Map<String, String> normalizedPackageRoots = <String, String>{};
81 82
82 /** 83 /**
84 * A function that will return a [UriResolver] that can be used to resolve
85 * `package:` URI's within a given folder, or `null` if we should fall back
86 * to the standard URI resolver.
87 */
88 final ResolverProvider packageResolverProvider;
89
90 /**
83 * Provider which is used to determine the mapping from package name to 91 * Provider which is used to determine the mapping from package name to
84 * package folder. 92 * package folder.
85 */ 93 */
86 final OptimizingPubPackageMapProvider _packageMapProvider; 94 final OptimizingPubPackageMapProvider _packageMapProvider;
87 95
88 /** 96 /**
89 * The instrumentation service used to report instrumentation data. 97 * The instrumentation service used to report instrumentation data.
90 */ 98 */
91 final InstrumentationService _instrumentationService; 99 final InstrumentationService _instrumentationService;
92 100
93 ContextManager(this.resourceProvider, this._packageMapProvider, 101 ContextManager(this.resourceProvider, this.packageResolverProvider,
94 this._instrumentationService) { 102 this._packageMapProvider, this._instrumentationService) {
95 pathContext = resourceProvider.pathContext; 103 pathContext = resourceProvider.pathContext;
96 } 104 }
97 105
98 /** 106 /**
99 * Create and return a new analysis context. 107 * Create and return a new analysis context.
100 */ 108 */
101 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver); 109 AnalysisContext addContext(Folder folder, UriResolver packageUriResolver);
102 110
103 /** 111 /**
104 * Called when the set of files associated with a context have changed (or 112 * Called when the set of files associated with a context have changed (or
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 if (res is Folder) { 432 if (res is Folder) {
425 packageMap[file.getName()] = <Folder>[res]; 433 packageMap[file.getName()] = <Folder>[res];
426 } 434 }
427 } 435 }
428 return new PackageMapUriResolver(resourceProvider, packageMap); 436 return new PackageMapUriResolver(resourceProvider, packageMap);
429 } 437 }
430 //TODO(danrubel) remove this if it will never be called 438 //TODO(danrubel) remove this if it will never be called
431 return new PackageUriResolver([packagesDir]); 439 return new PackageUriResolver([packagesDir]);
432 } else { 440 } else {
433 beginComputePackageMap(); 441 beginComputePackageMap();
442 if (packageResolverProvider != null) {
443 UriResolver resolver = packageResolverProvider(folder);
444 if (resolver != null) {
445 return resolver;
446 }
447 }
434 OptimizingPubPackageMapInfo packageMapInfo; 448 OptimizingPubPackageMapInfo packageMapInfo;
435 ServerPerformanceStatistics.pub.makeCurrentWhile(() { 449 ServerPerformanceStatistics.pub.makeCurrentWhile(() {
436 packageMapInfo = 450 packageMapInfo =
437 _packageMapProvider.computePackageMap(folder, info.packageMapInfo); 451 _packageMapProvider.computePackageMap(folder, info.packageMapInfo);
438 }); 452 });
439 endComputePackageMap(); 453 endComputePackageMap();
440 for (String dependencyPath in packageMapInfo.dependencies) { 454 for (String dependencyPath in packageMapInfo.dependencies) {
441 Resource resource = resourceProvider.getResource(dependencyPath); 455 Resource resource = resourceProvider.getResource(dependencyPath);
442 if (resource is File) { 456 if (resource is File) {
443 StreamSubscription<WatchEvent> subscription; 457 StreamSubscription<WatchEvent> subscription;
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 return excludes(resource.path); 853 return excludes(resource.path);
840 } 854 }
841 855
842 /** 856 /**
843 * Returns `true` if [path] is the pubspec file of this context. 857 * Returns `true` if [path] is the pubspec file of this context.
844 */ 858 */
845 bool isPubspec(String path) { 859 bool isPubspec(String path) {
846 return path == pubspecPath; 860 return path == pubspecPath;
847 } 861 }
848 } 862 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698