@@ -21,15 +21,17 @@ import 'package:analyzer/src/generated/source_io.dart';
21
21
import 'package:analyzer/src/source/package_map_resolver.dart' ;
22
22
import 'package:dartdoc/src/dartdoc_options.dart' ;
23
23
import 'package:dartdoc/src/logging.dart' ;
24
- import 'package:dartdoc/src/model/model.dart' ;
24
+ import 'package:dartdoc/src/model/model.dart' hide Package ;
25
25
import 'package:dartdoc/src/quiver.dart' as quiver;
26
26
import 'package:dartdoc/src/package_config_provider.dart' ;
27
27
import 'package:dartdoc/src/package_meta.dart'
28
28
show PackageMeta, PackageMetaProvider;
29
29
import 'package:dartdoc/src/render/renderer_factory.dart' ;
30
30
import 'package:dartdoc/src/special_elements.dart' ;
31
31
import 'package:meta/meta.dart' ;
32
+ // TODO(jcollins-g): do not directly import path, use ResourceProvider instead
32
33
import 'package:path/path.dart' as path;
34
+ import 'package:pub_semver/pub_semver.dart' ;
33
35
34
36
/// Everything you need to instantiate a PackageGraph object for documenting.
35
37
abstract class PackageBuilder {
@@ -98,6 +100,8 @@ class PubPackageBuilder implements PackageBuilder {
98
100
99
101
ResourceProvider get resourceProvider => packageMetaProvider.resourceProvider;
100
102
103
+ /* late final */ Packages packages;
104
+
101
105
Future <void > _calculatePackageMap () async {
102
106
assert (_packageMap == null );
103
107
_packageMap = < String , List <Folder >> {};
@@ -106,8 +110,27 @@ class PubPackageBuilder implements PackageBuilder {
106
110
.findPackageConfig (resourceProvider.getFolder (cwd.path));
107
111
if (info == null ) return ;
108
112
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
+
109
132
for (var package in info.packages) {
110
- var packagePath = path .normalize (path .fromUri (package.packageUriRoot));
133
+ var packagePath = rpc .normalize (rpc .fromUri (package.packageUriRoot));
111
134
var resource = resourceProvider.getResource (packagePath);
112
135
if (resource is Folder ) {
113
136
_packageMap[package.name] = [resource];
@@ -154,7 +177,6 @@ class PubPackageBuilder implements PackageBuilder {
154
177
}
155
178
156
179
AnalysisDriver _driver;
157
-
158
180
AnalysisDriver get driver {
159
181
if (_driver == null ) {
160
182
var log = PerformanceLog (null );
@@ -163,13 +185,11 @@ class PubPackageBuilder implements PackageBuilder {
163
185
..hint = false
164
186
// TODO(jcollins-g): pass in an ExperimentStatus instead?
165
187
..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()
169
189
// TODO(jcollins-g): make use of DartProject isApi()
170
190
_driver = AnalysisDriver (scheduler, log, resourceProvider,
171
191
MemoryByteStore (), FileContentOverlay (), null , sourceFactory, options,
172
- packages: Packages .empty );
192
+ packages: packages );
173
193
driver.results.listen ((_) => logProgress ('' ));
174
194
driver.exceptions.listen ((_) {});
175
195
scheduler.start ();
0 commit comments