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

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

Issue 1257913002: Improve package root tests. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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
« no previous file with comments | « no previous file | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 768 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 } catch (e, s) { 779 } catch (e, s) {
780 // Ignore packages that do not exist 780 // Ignore packages that do not exist
781 _instrumentationService.logException(e, s); 781 _instrumentationService.logException(e, s);
782 continue; 782 continue;
783 } 783 }
784 Resource res = resourceProvider.getResource(path); 784 Resource res = resourceProvider.getResource(path);
785 if (res is Folder) { 785 if (res is Folder) {
786 packageMap[file.getName()] = <Folder>[res]; 786 packageMap[file.getName()] = <Folder>[res];
787 } 787 }
788 } 788 }
789 return new PackageMapDisposition(packageMap); 789 return new PackageMapDisposition(packageMap,
790 packageRoot: info.packageRoot);
790 } 791 }
791 // The package root does not exist (or is not a folder). Since 792 // The package root does not exist (or is not a folder). Since
792 // [setRoots] ignores any package roots that don't exist (or aren't 793 // [setRoots] ignores any package roots that don't exist (or aren't
793 // folders), the only way we should be able to get here is due to a race 794 // folders), the only way we should be able to get here is due to a race
794 // condition. In any case, the package root folder is gone, so we can't 795 // condition. In any case, the package root folder is gone, so we can't
795 // resolve packages. 796 // resolve packages.
796 return new NoPackageFolderDisposition(); 797 return new NoPackageFolderDisposition(packageRoot: info.packageRoot);
797 } else { 798 } else {
798 callbacks.beginComputePackageMap(); 799 callbacks.beginComputePackageMap();
799 if (packageResolverProvider != null) { 800 if (packageResolverProvider != null) {
800 UriResolver resolver = packageResolverProvider(folder); 801 UriResolver resolver = packageResolverProvider(folder);
801 if (resolver != null) { 802 if (resolver != null) {
802 return new CustomPackageResolverDisposition(resolver); 803 return new CustomPackageResolverDisposition(resolver);
803 } 804 }
804 } 805 }
805 PackageMapInfo packageMapInfo; 806 PackageMapInfo packageMapInfo;
806 ServerPerformanceStatistics.pub.makeCurrentWhile(() { 807 ServerPerformanceStatistics.pub.makeCurrentWhile(() {
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1262 */ 1263 */
1263 class CustomPackageResolverDisposition extends FolderDisposition { 1264 class CustomPackageResolverDisposition extends FolderDisposition {
1264 /** 1265 /**
1265 * The [UriResolver] that should be used to resolve package URIs. 1266 * The [UriResolver] that should be used to resolve package URIs.
1266 */ 1267 */
1267 UriResolver resolver; 1268 UriResolver resolver;
1268 1269
1269 CustomPackageResolverDisposition(this.resolver); 1270 CustomPackageResolverDisposition(this.resolver);
1270 1271
1271 @override 1272 @override
1273 String get packageRoot => null;
1274
1275 @override
1272 Packages get packages => null; 1276 Packages get packages => null;
1273 1277
1274 @override 1278 @override
1275 Iterable<UriResolver> createPackageUriResolvers( 1279 Iterable<UriResolver> createPackageUriResolvers(
1276 ResourceProvider resourceProvider) => <UriResolver>[resolver]; 1280 ResourceProvider resourceProvider) => <UriResolver>[resolver];
1277 } 1281 }
1278 1282
1279 /** 1283 /**
1280 * An instance of the class [FolderDisposition] represents the information 1284 * An instance of the class [FolderDisposition] represents the information
1281 * gathered by the [ContextManagerImpl] to determine how to create an 1285 * gathered by the [ContextManagerImpl] to determine how to create an
1282 * [AnalysisContext] for a given folder. 1286 * [AnalysisContext] for a given folder.
1283 * 1287 *
1284 * Note: [ContextManagerImpl] may use equality testing and hash codes to 1288 * Note: [ContextManagerImpl] may use equality testing and hash codes to
1285 * determine when two folders should share the same context, so derived classes 1289 * determine when two folders should share the same context, so derived classes
1286 * may need to override operator== and hashCode() if object identity is 1290 * may need to override operator== and hashCode() if object identity is
1287 * insufficient. 1291 * insufficient.
1288 * 1292 *
1289 * TODO(paulberry): consider adding a flag to indicate that it is not necessary 1293 * TODO(paulberry): consider adding a flag to indicate that it is not necessary
1290 * to recurse into the given folder looking for additional contexts to create 1294 * to recurse into the given folder looking for additional contexts to create
1291 * or files to analyze (this could help avoid unnecessarily weighing down the 1295 * or files to analyze (this could help avoid unnecessarily weighing down the
1292 * system with file watchers). 1296 * system with file watchers).
1293 */ 1297 */
1294 abstract class FolderDisposition { 1298 abstract class FolderDisposition {
1295 /** 1299 /**
1300 * If this [FolderDisposition] was created based on a package root
1301 * folder, the absolute path to that folder. Otherwise `null`.
1302 */
1303 String get packageRoot;
1304
1305 /**
1296 * If contexts governed by this [FolderDisposition] should resolve packages 1306 * If contexts governed by this [FolderDisposition] should resolve packages
1297 * using the ".packages" file mechanism (DEP 5), retrieve the [Packages] 1307 * using the ".packages" file mechanism (DEP 5), retrieve the [Packages]
1298 * object that resulted from parsing the ".packages" file. 1308 * object that resulted from parsing the ".packages" file.
1299 */ 1309 */
1300 Packages get packages; 1310 Packages get packages;
1301 1311
1302 /** 1312 /**
1303 * Create all the [UriResolver]s which should be used to resolve packages in 1313 * Create all the [UriResolver]s which should be used to resolve packages in
1304 * contexts governed by this [FolderDisposition]. 1314 * contexts governed by this [FolderDisposition].
1305 * 1315 *
1306 * [resourceProvider] is provided since it is needed to construct most 1316 * [resourceProvider] is provided since it is needed to construct most
1307 * [UriResolver]s. 1317 * [UriResolver]s.
1308 */ 1318 */
1309 Iterable<UriResolver> createPackageUriResolvers( 1319 Iterable<UriResolver> createPackageUriResolvers(
1310 ResourceProvider resourceProvider); 1320 ResourceProvider resourceProvider);
1311 } 1321 }
1312 1322
1313 /** 1323 /**
1314 * Concrete [FolderDisposition] object indicating that the context for a given 1324 * Concrete [FolderDisposition] object indicating that the context for a given
1315 * folder should not resolve "package:" URIs at all. 1325 * folder should not resolve "package:" URIs at all.
1316 *
1317 * TODO(paulberry): consider making this a singleton object (which would cause
1318 * all folders that don't resolve "package:" URIs to share the same context).
1319 */ 1326 */
1320 class NoPackageFolderDisposition extends FolderDisposition { 1327 class NoPackageFolderDisposition extends FolderDisposition {
1321 @override 1328 @override
1329 final String packageRoot;
1330
1331 NoPackageFolderDisposition({this.packageRoot});
1332
1333 @override
1322 Packages get packages => null; 1334 Packages get packages => null;
1323 1335
1324 @override 1336 @override
1325 Iterable<UriResolver> createPackageUriResolvers( 1337 Iterable<UriResolver> createPackageUriResolvers(
1326 ResourceProvider resourceProvider) => const <UriResolver>[]; 1338 ResourceProvider resourceProvider) => const <UriResolver>[];
1327 } 1339 }
1328 1340
1329 /** 1341 /**
1330 * Concrete [FolderDisposition] object indicating that the context for a given 1342 * Concrete [FolderDisposition] object indicating that the context for a given
1331 * folder should resolve packages using a package map. 1343 * folder should resolve packages using a package map.
1332 */ 1344 */
1333 class PackageMapDisposition extends FolderDisposition { 1345 class PackageMapDisposition extends FolderDisposition {
1334 final Map<String, List<Folder>> packageMap; 1346 final Map<String, List<Folder>> packageMap;
1335 1347
1336 PackageMapDisposition(this.packageMap); 1348 @override
1349 final String packageRoot;
1350
1351 PackageMapDisposition(this.packageMap, {this.packageRoot});
1337 1352
1338 @override 1353 @override
1339 Packages get packages => null; 1354 Packages get packages => null;
1340 1355
1341 @override 1356 @override
1342 Iterable<UriResolver> createPackageUriResolvers( 1357 Iterable<UriResolver> createPackageUriResolvers(
1343 ResourceProvider resourceProvider) => 1358 ResourceProvider resourceProvider) =>
1344 <UriResolver>[new PackageMapUriResolver(resourceProvider, packageMap)]; 1359 <UriResolver>[new PackageMapUriResolver(resourceProvider, packageMap)];
1345 } 1360 }
1346 1361
1347 /** 1362 /**
1348 * Concrete [FolderDisposition] object indicating that the context for a given 1363 * Concrete [FolderDisposition] object indicating that the context for a given
1349 * folder should resolve packages using a ".packages" file. 1364 * folder should resolve packages using a ".packages" file.
1350 */ 1365 */
1351 class PackagesFileDisposition extends FolderDisposition { 1366 class PackagesFileDisposition extends FolderDisposition {
1352 @override 1367 @override
1353 final Packages packages; 1368 final Packages packages;
1354 1369
1355 PackagesFileDisposition(this.packages) {} 1370 PackagesFileDisposition(this.packages) {}
1356 1371
1357 @override 1372 @override
1373 String get packageRoot => null;
1374
1375 @override
1358 Iterable<UriResolver> createPackageUriResolvers( 1376 Iterable<UriResolver> createPackageUriResolvers(
1359 ResourceProvider resourceProvider) => const <UriResolver>[]; 1377 ResourceProvider resourceProvider) => const <UriResolver>[];
1360 } 1378 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/test/context_manager_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698