@@ -9,15 +9,18 @@ import 'dart:collection';
9
9
import 'dart:convert' ;
10
10
import 'dart:core' ;
11
11
12
+ import 'package:analysis_server/src/analysis_server.dart' ;
12
13
import 'package:analyzer/exception/exception.dart' ;
13
14
import 'package:analyzer/file_system/file_system.dart' ;
14
15
import 'package:analyzer/instrumentation/instrumentation.dart' ;
15
16
import 'package:analyzer/plugin/options.dart' ;
16
17
import 'package:analyzer/plugin/resolver_provider.dart' ;
17
18
import 'package:analyzer/source/analysis_options_provider.dart' ;
18
19
import 'package:analyzer/source/config.dart' ;
20
+ import 'package:analyzer/source/package_map_provider.dart' ;
19
21
import 'package:analyzer/source/package_map_resolver.dart' ;
20
22
import 'package:analyzer/source/path_filter.dart' ;
23
+ import 'package:analyzer/source/pub_package_map_provider.dart' ;
21
24
import 'package:analyzer/source/sdk_ext.dart' ;
22
25
import 'package:analyzer/src/context/builder.dart' ;
23
26
import 'package:analyzer/src/context/context.dart' as context;
@@ -330,6 +333,12 @@ abstract class ContextManagerCallbacks {
330
333
*/
331
334
void applyChangesToContext (Folder contextFolder, ChangeSet changeSet);
332
335
336
+ /**
337
+ * Signals that the context manager has started to compute a package map (if
338
+ * [computing] is `true` ) or has finished (if [computing] is `false` ).
339
+ */
340
+ void computingPackageMap (bool computing);
341
+
333
342
/**
334
343
* Create and return a context builder that can be used to create a context
335
344
* for the files in the given [folder] when analyzed using the given [options] .
@@ -446,8 +455,12 @@ class ContextManagerImpl implements ContextManager {
446
455
final ResolverProvider packageResolverProvider;
447
456
448
457
/**
449
- * Provider of analysis options.
458
+ * Provider which is used to determine the mapping from package name to
459
+ * package folder.
450
460
*/
461
+ final PubPackageMapProvider _packageMapProvider;
462
+
463
+ /// Provider of analysis options.
451
464
AnalysisOptionsProvider analysisOptionsProvider =
452
465
new AnalysisOptionsProvider ();
453
466
@@ -493,6 +506,7 @@ class ContextManagerImpl implements ContextManager {
493
506
this .resourceProvider,
494
507
this .sdkManager,
495
508
this .packageResolverProvider,
509
+ this ._packageMapProvider,
496
510
this .analyzedFilesGlobs,
497
511
this ._instrumentationService,
498
512
this .defaultContextOptions) {
@@ -969,19 +983,35 @@ class ContextManagerImpl implements ContextManager {
969
983
// resolve packages.
970
984
return new NoPackageFolderDisposition (packageRoot: packageRoot);
971
985
} else {
972
- // Try .packages first.
973
- if (absolutePathContext.basename (packagespecFile.path) ==
974
- PACKAGE_SPEC_NAME ) {
975
- Packages packages = _readPackagespec (packagespecFile);
976
- return new PackagesFileDisposition (packages);
977
- }
978
- if (packageResolverProvider != null ) {
979
- UriResolver resolver = packageResolverProvider (folder);
980
- if (resolver != null ) {
981
- return new CustomPackageResolverDisposition (resolver);
986
+ PackageMapInfo packageMapInfo;
987
+ callbacks.computingPackageMap (true );
988
+ try {
989
+ // Try .packages first.
990
+ if (absolutePathContext.basename (packagespecFile.path) ==
991
+ PACKAGE_SPEC_NAME ) {
992
+ Packages packages = _readPackagespec (packagespecFile);
993
+ return new PackagesFileDisposition (packages);
982
994
}
995
+ if (packageResolverProvider != null ) {
996
+ UriResolver resolver = packageResolverProvider (folder);
997
+ if (resolver != null ) {
998
+ return new CustomPackageResolverDisposition (resolver);
999
+ }
1000
+ }
1001
+
1002
+ ServerPerformanceStatistics .pub.makeCurrentWhile (() {
1003
+ packageMapInfo = _packageMapProvider.computePackageMap (folder);
1004
+ });
1005
+ } finally {
1006
+ callbacks.computingPackageMap (false );
1007
+ }
1008
+ for (String dependencyPath in packageMapInfo.dependencies) {
1009
+ addDependency (dependencyPath);
1010
+ }
1011
+ if (packageMapInfo.packageMap == null ) {
1012
+ return new NoPackageFolderDisposition ();
983
1013
}
984
- return new NoPackageFolderDisposition ( );
1014
+ return new PackageMapDisposition (packageMapInfo.packageMap );
985
1015
}
986
1016
}
987
1017
0 commit comments