@@ -21,15 +21,17 @@ import 'package:analyzer/src/generated/source_io.dart';
2121import 'package:analyzer/src/source/package_map_resolver.dart' ;
2222import 'package:dartdoc/src/dartdoc_options.dart' ;
2323import 'package:dartdoc/src/logging.dart' ;
24- import 'package:dartdoc/src/model/model.dart' ;
24+ import 'package:dartdoc/src/model/model.dart' hide Package ;
2525import 'package:dartdoc/src/quiver.dart' as quiver;
2626import 'package:dartdoc/src/package_config_provider.dart' ;
2727import 'package:dartdoc/src/package_meta.dart'
2828 show PackageMeta, PackageMetaProvider;
2929import 'package:dartdoc/src/render/renderer_factory.dart' ;
3030import 'package:dartdoc/src/special_elements.dart' ;
3131import 'package:meta/meta.dart' ;
32+ // TODO(jcollins-g): do not directly import path, use ResourceProvider instead
3233import 'package:path/path.dart' as path;
34+ import 'package:pub_semver/pub_semver.dart' ;
3335
3436/// Everything you need to instantiate a PackageGraph object for documenting.
3537abstract class PackageBuilder {
@@ -98,6 +100,8 @@ class PubPackageBuilder implements PackageBuilder {
98100
99101 ResourceProvider get resourceProvider => packageMetaProvider.resourceProvider;
100102
103+ /* late final */ Packages packages;
104+
101105 Future <void > _calculatePackageMap () async {
102106 assert (_packageMap == null );
103107 _packageMap = < String , List <Folder >> {};
@@ -106,8 +110,27 @@ class PubPackageBuilder implements PackageBuilder {
106110 .findPackageConfig (resourceProvider.getFolder (cwd.path));
107111 if (info == null ) return ;
108112
113+ var rpc = resourceProvider.pathContext;
114+ // This complicated expression transforms a list of [package_config.Package]
115+ // into [analyzer.Packages]. It's a bit confusing because [info.packages]
116+ // is actually the list of [package_config.Package] objects, rather than
117+ // the [Packages] object we need.
118+ packages = Packages (Map .fromEntries (info.packages.map ((p) => MapEntry <
119+ String , Package >(
120+ p.name,
121+ Package (
122+ name: p.name,
123+ rootFolder:
124+ resourceProvider.getFolder (rpc.normalize (rpc.fromUri (p.root))),
125+ languageVersion: p.languageVersion != null
126+ ? Version (p.languageVersion.major, p.languageVersion.minor, 0 )
127+ : null ,
128+ libFolder: resourceProvider.getFolder (
129+ rpc.normalize (rpc.fromUri (p.packageUriRoot)),
130+ ))))));
131+
109132 for (var package in info.packages) {
110- var packagePath = path .normalize (path .fromUri (package.packageUriRoot));
133+ var packagePath = rpc .normalize (rpc .fromUri (package.packageUriRoot));
111134 var resource = resourceProvider.getResource (packagePath);
112135 if (resource is Folder ) {
113136 _packageMap[package.name] = [resource];
@@ -154,7 +177,6 @@ class PubPackageBuilder implements PackageBuilder {
154177 }
155178
156179 AnalysisDriver _driver;
157-
158180 AnalysisDriver get driver {
159181 if (_driver == null ) {
160182 var log = PerformanceLog (null );
@@ -163,13 +185,11 @@ class PubPackageBuilder implements PackageBuilder {
163185 ..hint = false
164186 // TODO(jcollins-g): pass in an ExperimentStatus instead?
165187 ..contextFeatures = FeatureSet .fromEnableFlags (config.enableExperiment);
166-
167- // TODO(jcollins-g): Make use of currently not existing API for managing
168- // many AnalysisDrivers
188+ // TODO(jcollins-g): make use of AnalysisContextCollection()
169189 // TODO(jcollins-g): make use of DartProject isApi()
170190 _driver = AnalysisDriver (scheduler, log, resourceProvider,
171191 MemoryByteStore (), FileContentOverlay (), null , sourceFactory, options,
172- packages: Packages .empty );
192+ packages: packages );
173193 driver.results.listen ((_) => logProgress ('' ));
174194 driver.exceptions.listen ((_) {});
175195 scheduler.start ();
0 commit comments