@@ -42,29 +42,29 @@ abstract class PackageBuilder {
42
42
43
43
/// A package builder that understands pub package format.
44
44
class PubPackageBuilder implements PackageBuilder {
45
- final DartdocOptionContext config ;
46
- final PackageMetaProvider packageMetaProvider ;
47
- final PackageConfigProvider packageConfigProvider ;
45
+ final DartdocOptionContext _config ;
46
+ final PackageMetaProvider _packageMetaProvider ;
47
+ final PackageConfigProvider _packageConfigProvider ;
48
48
49
49
PubPackageBuilder (
50
- this .config ,
51
- this .packageMetaProvider ,
52
- this .packageConfigProvider , {
50
+ this ._config ,
51
+ this ._packageMetaProvider ,
52
+ this ._packageConfigProvider , {
53
53
@visibleForTesting bool skipUnreachableSdkLibraries = false ,
54
54
}) : _skipUnreachableSdkLibraries = skipUnreachableSdkLibraries;
55
55
56
56
@override
57
57
Future <PackageGraph > buildPackageGraph () async {
58
- if (! config .sdkDocs) {
59
- if (config .topLevelPackageMeta.requiresFlutter &&
60
- config .flutterRoot == null ) {
58
+ if (! _config .sdkDocs) {
59
+ if (_config .topLevelPackageMeta.requiresFlutter &&
60
+ _config .flutterRoot == null ) {
61
61
// TODO(devoncarew): We may no longer need to emit this error.
62
62
throw DartdocOptionError (
63
63
'Top level package requires Flutter but FLUTTER_ROOT environment variable not set' );
64
64
}
65
65
}
66
66
67
- var rendererFactory = RendererFactory .forFormat (config .format);
67
+ var rendererFactory = RendererFactory .forFormat (_config .format);
68
68
runtimeStats.resetAccumulators ([
69
69
'elementTypeInstantiation' ,
70
70
'modelElementCacheInsertion' ,
@@ -76,13 +76,13 @@ class PubPackageBuilder implements PackageBuilder {
76
76
77
77
runtimeStats.startPerfTask ('getLibraries' );
78
78
var newGraph = PackageGraph .uninitialized (
79
- config ,
80
- sdk ,
81
- hasEmbedderSdkFiles ,
79
+ _config ,
80
+ _sdk ,
81
+ _embedderSdkUris.isNotEmpty ,
82
82
rendererFactory,
83
- packageMetaProvider ,
83
+ _packageMetaProvider ,
84
84
);
85
- await getLibraries (newGraph);
85
+ await _getLibraries (newGraph);
86
86
runtimeStats.endPerfTask ();
87
87
88
88
logDebug ('${DateTime .now ()}: Initializing package graph...' );
@@ -97,36 +97,37 @@ class PubPackageBuilder implements PackageBuilder {
97
97
return newGraph;
98
98
}
99
99
100
- late final DartSdk sdk = packageMetaProvider .defaultSdk ??
100
+ late final DartSdk _sdk = _packageMetaProvider .defaultSdk ??
101
101
FolderBasedDartSdk (
102
- resourceProvider, resourceProvider .getFolder (config .sdkDir));
102
+ _resourceProvider, _resourceProvider .getFolder (_config .sdkDir));
103
103
104
- EmbedderSdk ? _embedderSdk ;
104
+ EmbedderSdk ? __embedderSdk ;
105
105
106
- EmbedderSdk ? get embedderSdk {
107
- if (_embedderSdk == null && ! config .topLevelPackageMeta.isSdk) {
108
- _embedderSdk = EmbedderSdk (
109
- resourceProvider , EmbedderYamlLocator (_packageMap).embedderYamls);
106
+ EmbedderSdk ? get _embedderSdk {
107
+ if (__embedderSdk == null && ! _config .topLevelPackageMeta.isSdk) {
108
+ __embedderSdk = EmbedderSdk (
109
+ _resourceProvider , EmbedderYamlLocator (_packageMap).embedderYamls);
110
110
}
111
- return _embedderSdk ;
111
+ return __embedderSdk ;
112
112
}
113
113
114
- ResourceProvider get resourceProvider => packageMetaProvider.resourceProvider;
114
+ ResourceProvider get _resourceProvider =>
115
+ _packageMetaProvider.resourceProvider;
115
116
116
- p.Context get pathContext => resourceProvider .pathContext;
117
+ p.Context get _pathContext => _resourceProvider .pathContext;
117
118
118
119
/// Do not call more than once for a given PackageBuilder.
119
120
Future <void > _calculatePackageMap () async {
120
121
_packageMap = < String , List <Folder >> {};
121
- var cwd = resourceProvider .getResource (config .inputDir) as Folder ;
122
- var info = await packageConfigProvider
123
- .findPackageConfig (resourceProvider .getFolder (cwd.path));
122
+ var cwd = _resourceProvider .getResource (_config .inputDir) as Folder ;
123
+ var info = await _packageConfigProvider
124
+ .findPackageConfig (_resourceProvider .getFolder (cwd.path));
124
125
if (info == null ) return ;
125
126
126
127
for (var package in info.packages) {
127
128
var packagePath =
128
- pathContext .normalize (pathContext .fromUri (package.packageUriRoot));
129
- var resource = resourceProvider .getResource (packagePath);
129
+ _pathContext .normalize (_pathContext .fromUri (package.packageUriRoot));
130
+ var resource = _resourceProvider .getResource (packagePath);
130
131
if (resource is Folder ) {
131
132
_packageMap[package.name] = [resource];
132
133
}
@@ -137,11 +138,11 @@ class PubPackageBuilder implements PackageBuilder {
137
138
138
139
late final AnalysisContextCollection _contextCollection =
139
140
AnalysisContextCollectionImpl (
140
- includedPaths: [config .inputDir],
141
+ includedPaths: [_config .inputDir],
141
142
// TODO(jcollins-g): should we pass excluded directories here instead of
142
143
// handling it ourselves?
143
- resourceProvider: resourceProvider ,
144
- sdkPath: config .sdkDir,
144
+ resourceProvider: _resourceProvider ,
145
+ sdkPath: _config .sdkDir,
145
146
updateAnalysisOptions2: ({
146
147
required AnalysisOptionsImpl analysisOptions,
147
148
required ContextRoot contextRoot,
@@ -152,18 +153,18 @@ class PubPackageBuilder implements PackageBuilder {
152
153
..lint = false ,
153
154
);
154
155
155
- /// The SDK files we should parse.
156
156
List <String > get _sdkFilesToDocument => [
157
- for (var sdkLib in sdk .sdkLibraries)
158
- sdk .mapDartUri (sdkLib.shortName)! .fullName,
157
+ for (var sdkLib in _sdk .sdkLibraries)
158
+ _sdk .mapDartUri (sdkLib.shortName)! .fullName,
159
159
];
160
160
161
- /// Parses a single library at [filePath] using the current analysis driver.
161
+ /// Resolves a single library at [filePath] using the current analysis driver.
162
+ ///
162
163
/// If [filePath] is not a library, returns null.
163
- Future <DartDocResolvedLibrary ?> processLibrary (String filePath) async {
164
+ Future <DartDocResolvedLibrary ?> _resolveLibrary (String filePath) async {
164
165
logDebug ('Resolving $filePath ...' );
165
166
166
- var analysisContext = _contextCollection.contextFor (config .inputDir);
167
+ var analysisContext = _contextCollection.contextFor (_config .inputDir);
167
168
// Allow dart source files with inappropriate suffixes (#1897).
168
169
final library =
169
170
await analysisContext.currentSession.getResolvedLibrary (filePath);
@@ -174,7 +175,8 @@ class PubPackageBuilder implements PackageBuilder {
174
175
}
175
176
176
177
Set <PackageMeta > _packageMetasForFiles (Iterable <String > files) => {
177
- for (var filename in files) packageMetaProvider.fromFilename (filename)! ,
178
+ for (var filename in files)
179
+ _packageMetaProvider.fromFilename (filename)! ,
178
180
};
179
181
180
182
/// Whether to skip unreachable libraries when gathering all of the libraries
@@ -238,7 +240,7 @@ class PubPackageBuilder implements PackageBuilder {
238
240
}
239
241
processedFiles.add (file);
240
242
logProgress (file);
241
- var resolvedLibrary = await processLibrary (file);
243
+ var resolvedLibrary = await _resolveLibrary (file);
242
244
if (resolvedLibrary == null ) {
243
245
_knownParts.add (file);
244
246
continue ;
@@ -285,7 +287,7 @@ class PubPackageBuilder implements PackageBuilder {
285
287
286
288
/// Whether [libraryElement] should be included in the libraries-to-document.
287
289
bool _shouldIncludeLibrary (LibraryElement libraryElement) =>
288
- config .include.isEmpty || config .include.contains (libraryElement.name);
290
+ _config .include.isEmpty || _config .include.contains (libraryElement.name);
289
291
290
292
/// Returns all top level library files in the 'lib/' directory of the given
291
293
/// package root directory.
@@ -301,10 +303,10 @@ class PubPackageBuilder implements PackageBuilder {
301
303
var packageDirs = {basePackageDir};
302
304
303
305
if (includeDependencies) {
304
- var packageConfig = (await packageConfigProvider
305
- .findPackageConfig (resourceProvider .getFolder (basePackageDir)))! ;
306
+ var packageConfig = (await _packageConfigProvider
307
+ .findPackageConfig (_resourceProvider .getFolder (basePackageDir)))! ;
306
308
for (var package in packageConfig.packages) {
307
- if (filterExcludes && config .exclude.contains (package.name)) {
309
+ if (filterExcludes && _config .exclude.contains (package.name)) {
308
310
continue ;
309
311
}
310
312
packageDirs.add (_pathContext.dirname (
@@ -351,7 +353,7 @@ class PubPackageBuilder implements PackageBuilder {
351
353
String directory, Set <String > listedDirectories) sync * {
352
354
// Avoid recursive symlinks.
353
355
var resolvedPath =
354
- resourceProvider .getFolder (directory).resolveSymbolicLinksSync ().path;
356
+ _resourceProvider .getFolder (directory).resolveSymbolicLinksSync ().path;
355
357
if (listedDirectories.contains (resolvedPath)) {
356
358
return ;
357
359
}
@@ -362,7 +364,7 @@ class PubPackageBuilder implements PackageBuilder {
362
364
};
363
365
364
366
for (var resource
365
- in _packageDirList (resourceProvider .getFolder (directory))) {
367
+ in _packageDirList (_resourceProvider .getFolder (directory))) {
366
368
// Skip hidden files and directories.
367
369
if (_pathContext.basename (resource.path).startsWith ('.' )) {
368
370
continue ;
@@ -386,52 +388,55 @@ class PubPackageBuilder implements PackageBuilder {
386
388
List <String > _includedExternalsFrom (Iterable <String > files) => [
387
389
for (var file in files)
388
390
...DartdocOptionContext .fromContext (
389
- config ,
390
- config .resourceProvider.getFile (file),
391
- config .resourceProvider,
391
+ _config ,
392
+ _config .resourceProvider.getFile (file),
393
+ _config .resourceProvider,
392
394
).includeExternal,
393
395
];
394
396
395
- Future <Set <String >> _getFiles () async {
396
- var files = config.topLevelPackageMeta.isSdk
397
+ /// Returns the set of files that may contain elements that need to be
398
+ /// documented.
399
+ ///
400
+ /// This takes into account the 'auto-include-dependencies' option, the
401
+ /// 'exclude' option, and the 'include-external' option.
402
+ Future <Set <String >> _getFilesToDocument () async {
403
+ var files = _config.topLevelPackageMeta.isSdk
397
404
? _sdkFilesToDocument
398
405
: await _findFilesToDocumentInPackage (
399
- config .inputDir,
400
- includeDependencies: config .autoIncludeDependencies,
406
+ _config .inputDir,
407
+ includeDependencies: _config .autoIncludeDependencies,
401
408
filterExcludes: true ,
402
409
).toList ();
403
410
files = [...files, ..._includedExternalsFrom (files)];
404
411
return {
405
- ...files. map ((s) => resourceProvider.pathContext
406
- .absolute (resourceProvider .getFile (s).path)),
407
- ...getEmbedderSdkFiles () ,
412
+ ...files
413
+ .map ((s) => _pathContext. absolute (_resourceProvider .getFile (s).path)),
414
+ ..._embedderSdkFiles ,
408
415
};
409
416
}
410
417
411
- Iterable <String > getEmbedderSdkFiles () {
412
- return [
413
- for (var dartUri in _embedderSdkUris)
414
- resourceProvider.pathContext.absolute (resourceProvider
415
- .getFile (embedderSdk! .mapDartUri (dartUri)! .fullName)
416
- .path),
417
- ];
418
- }
419
-
420
- bool get hasEmbedderSdkFiles => _embedderSdkUris.isNotEmpty;
418
+ Iterable <String > get _embedderSdkFiles => [
419
+ for (var dartUri in _embedderSdkUris)
420
+ _pathContext.absolute (_resourceProvider
421
+ .getFile (_embedderSdk! .mapDartUri (dartUri)! .fullName)
422
+ .path),
423
+ ];
421
424
422
425
Iterable <String > get _embedderSdkUris {
423
- if (config .topLevelPackageMeta.isSdk) return const [];
426
+ if (_config .topLevelPackageMeta.isSdk) return const [];
424
427
425
- return embedderSdk ? .urlMappings.keys ?? const [];
428
+ return _embedderSdk ? .urlMappings.keys ?? const [];
426
429
}
427
430
428
- Future <void > getLibraries (PackageGraph uninitializedPackageGraph) async {
429
- var embedderSdk = this .embedderSdk;
431
+ /// Adds all libraries with documentable elements to
432
+ /// [uninitializedPackageGraph] .
433
+ Future <void > _getLibraries (PackageGraph uninitializedPackageGraph) async {
434
+ var embedderSdk = _embedderSdk;
430
435
var findSpecialsSdk = switch (embedderSdk) {
431
436
EmbedderSdk (: var urlMappings) when urlMappings.isNotEmpty => embedderSdk,
432
- _ => sdk ,
437
+ _ => _sdk ,
433
438
};
434
- var files = await _getFiles ();
439
+ var files = await _getFilesToDocument ();
435
440
var specialFiles = specialLibraryFiles (findSpecialsSdk);
436
441
437
442
logDebug ('${DateTime .now ()}: Discovering Dart libraries...' );
@@ -453,20 +458,18 @@ class PubPackageBuilder implements PackageBuilder {
453
458
/// Throws an exception if any configured-to-be-included files were not found
454
459
/// while gathering libraries.
455
460
void _checkForMissingIncludedFiles (Set <LibraryElement > foundLibraries) {
456
- if (config .include.isNotEmpty) {
461
+ if (_config .include.isNotEmpty) {
457
462
var knownLibraryNames = foundLibraries.map ((l) => l.name);
458
- var notFound = config .include
463
+ var notFound = _config .include
459
464
.difference (Set .of (knownLibraryNames))
460
- .difference (config .exclude);
465
+ .difference (_config .exclude);
461
466
if (notFound.isNotEmpty) {
462
467
throw StateError ('Did not find: [${notFound .join (', ' )}] in '
463
468
'known libraries: [${knownLibraryNames .join (', ' )}]' );
464
469
}
465
470
}
466
471
}
467
472
468
- p.Context get _pathContext => resourceProvider.pathContext;
469
-
470
473
/// Returns the children of [directory] , or returns only the 'lib/'
471
474
/// directory in [directory] if [directory] is determined to be a package
472
475
/// root.
0 commit comments