Skip to content

Commit d4ab3ee

Browse files
authored
Privatize almost all elements in package_builder. (#3580)
1 parent 68e0749 commit d4ab3ee

File tree

1 file changed

+81
-78
lines changed

1 file changed

+81
-78
lines changed

lib/src/model/package_builder.dart

Lines changed: 81 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -42,29 +42,29 @@ abstract class PackageBuilder {
4242

4343
/// A package builder that understands pub package format.
4444
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;
4848

4949
PubPackageBuilder(
50-
this.config,
51-
this.packageMetaProvider,
52-
this.packageConfigProvider, {
50+
this._config,
51+
this._packageMetaProvider,
52+
this._packageConfigProvider, {
5353
@visibleForTesting bool skipUnreachableSdkLibraries = false,
5454
}) : _skipUnreachableSdkLibraries = skipUnreachableSdkLibraries;
5555

5656
@override
5757
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) {
6161
// TODO(devoncarew): We may no longer need to emit this error.
6262
throw DartdocOptionError(
6363
'Top level package requires Flutter but FLUTTER_ROOT environment variable not set');
6464
}
6565
}
6666

67-
var rendererFactory = RendererFactory.forFormat(config.format);
67+
var rendererFactory = RendererFactory.forFormat(_config.format);
6868
runtimeStats.resetAccumulators([
6969
'elementTypeInstantiation',
7070
'modelElementCacheInsertion',
@@ -76,13 +76,13 @@ class PubPackageBuilder implements PackageBuilder {
7676

7777
runtimeStats.startPerfTask('getLibraries');
7878
var newGraph = PackageGraph.uninitialized(
79-
config,
80-
sdk,
81-
hasEmbedderSdkFiles,
79+
_config,
80+
_sdk,
81+
_embedderSdkUris.isNotEmpty,
8282
rendererFactory,
83-
packageMetaProvider,
83+
_packageMetaProvider,
8484
);
85-
await getLibraries(newGraph);
85+
await _getLibraries(newGraph);
8686
runtimeStats.endPerfTask();
8787

8888
logDebug('${DateTime.now()}: Initializing package graph...');
@@ -97,36 +97,37 @@ class PubPackageBuilder implements PackageBuilder {
9797
return newGraph;
9898
}
9999

100-
late final DartSdk sdk = packageMetaProvider.defaultSdk ??
100+
late final DartSdk _sdk = _packageMetaProvider.defaultSdk ??
101101
FolderBasedDartSdk(
102-
resourceProvider, resourceProvider.getFolder(config.sdkDir));
102+
_resourceProvider, _resourceProvider.getFolder(_config.sdkDir));
103103

104-
EmbedderSdk? _embedderSdk;
104+
EmbedderSdk? __embedderSdk;
105105

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);
110110
}
111-
return _embedderSdk;
111+
return __embedderSdk;
112112
}
113113

114-
ResourceProvider get resourceProvider => packageMetaProvider.resourceProvider;
114+
ResourceProvider get _resourceProvider =>
115+
_packageMetaProvider.resourceProvider;
115116

116-
p.Context get pathContext => resourceProvider.pathContext;
117+
p.Context get _pathContext => _resourceProvider.pathContext;
117118

118119
/// Do not call more than once for a given PackageBuilder.
119120
Future<void> _calculatePackageMap() async {
120121
_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));
124125
if (info == null) return;
125126

126127
for (var package in info.packages) {
127128
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);
130131
if (resource is Folder) {
131132
_packageMap[package.name] = [resource];
132133
}
@@ -137,11 +138,11 @@ class PubPackageBuilder implements PackageBuilder {
137138

138139
late final AnalysisContextCollection _contextCollection =
139140
AnalysisContextCollectionImpl(
140-
includedPaths: [config.inputDir],
141+
includedPaths: [_config.inputDir],
141142
// TODO(jcollins-g): should we pass excluded directories here instead of
142143
// handling it ourselves?
143-
resourceProvider: resourceProvider,
144-
sdkPath: config.sdkDir,
144+
resourceProvider: _resourceProvider,
145+
sdkPath: _config.sdkDir,
145146
updateAnalysisOptions2: ({
146147
required AnalysisOptionsImpl analysisOptions,
147148
required ContextRoot contextRoot,
@@ -152,18 +153,18 @@ class PubPackageBuilder implements PackageBuilder {
152153
..lint = false,
153154
);
154155

155-
/// The SDK files we should parse.
156156
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,
159159
];
160160

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+
///
162163
/// If [filePath] is not a library, returns null.
163-
Future<DartDocResolvedLibrary?> processLibrary(String filePath) async {
164+
Future<DartDocResolvedLibrary?> _resolveLibrary(String filePath) async {
164165
logDebug('Resolving $filePath...');
165166

166-
var analysisContext = _contextCollection.contextFor(config.inputDir);
167+
var analysisContext = _contextCollection.contextFor(_config.inputDir);
167168
// Allow dart source files with inappropriate suffixes (#1897).
168169
final library =
169170
await analysisContext.currentSession.getResolvedLibrary(filePath);
@@ -174,7 +175,8 @@ class PubPackageBuilder implements PackageBuilder {
174175
}
175176

176177
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)!,
178180
};
179181

180182
/// Whether to skip unreachable libraries when gathering all of the libraries
@@ -238,7 +240,7 @@ class PubPackageBuilder implements PackageBuilder {
238240
}
239241
processedFiles.add(file);
240242
logProgress(file);
241-
var resolvedLibrary = await processLibrary(file);
243+
var resolvedLibrary = await _resolveLibrary(file);
242244
if (resolvedLibrary == null) {
243245
_knownParts.add(file);
244246
continue;
@@ -285,7 +287,7 @@ class PubPackageBuilder implements PackageBuilder {
285287

286288
/// Whether [libraryElement] should be included in the libraries-to-document.
287289
bool _shouldIncludeLibrary(LibraryElement libraryElement) =>
288-
config.include.isEmpty || config.include.contains(libraryElement.name);
290+
_config.include.isEmpty || _config.include.contains(libraryElement.name);
289291

290292
/// Returns all top level library files in the 'lib/' directory of the given
291293
/// package root directory.
@@ -301,10 +303,10 @@ class PubPackageBuilder implements PackageBuilder {
301303
var packageDirs = {basePackageDir};
302304

303305
if (includeDependencies) {
304-
var packageConfig = (await packageConfigProvider
305-
.findPackageConfig(resourceProvider.getFolder(basePackageDir)))!;
306+
var packageConfig = (await _packageConfigProvider
307+
.findPackageConfig(_resourceProvider.getFolder(basePackageDir)))!;
306308
for (var package in packageConfig.packages) {
307-
if (filterExcludes && config.exclude.contains(package.name)) {
309+
if (filterExcludes && _config.exclude.contains(package.name)) {
308310
continue;
309311
}
310312
packageDirs.add(_pathContext.dirname(
@@ -351,7 +353,7 @@ class PubPackageBuilder implements PackageBuilder {
351353
String directory, Set<String> listedDirectories) sync* {
352354
// Avoid recursive symlinks.
353355
var resolvedPath =
354-
resourceProvider.getFolder(directory).resolveSymbolicLinksSync().path;
356+
_resourceProvider.getFolder(directory).resolveSymbolicLinksSync().path;
355357
if (listedDirectories.contains(resolvedPath)) {
356358
return;
357359
}
@@ -362,7 +364,7 @@ class PubPackageBuilder implements PackageBuilder {
362364
};
363365

364366
for (var resource
365-
in _packageDirList(resourceProvider.getFolder(directory))) {
367+
in _packageDirList(_resourceProvider.getFolder(directory))) {
366368
// Skip hidden files and directories.
367369
if (_pathContext.basename(resource.path).startsWith('.')) {
368370
continue;
@@ -386,52 +388,55 @@ class PubPackageBuilder implements PackageBuilder {
386388
List<String> _includedExternalsFrom(Iterable<String> files) => [
387389
for (var file in files)
388390
...DartdocOptionContext.fromContext(
389-
config,
390-
config.resourceProvider.getFile(file),
391-
config.resourceProvider,
391+
_config,
392+
_config.resourceProvider.getFile(file),
393+
_config.resourceProvider,
392394
).includeExternal,
393395
];
394396

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
397404
? _sdkFilesToDocument
398405
: await _findFilesToDocumentInPackage(
399-
config.inputDir,
400-
includeDependencies: config.autoIncludeDependencies,
406+
_config.inputDir,
407+
includeDependencies: _config.autoIncludeDependencies,
401408
filterExcludes: true,
402409
).toList();
403410
files = [...files, ..._includedExternalsFrom(files)];
404411
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,
408415
};
409416
}
410417

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+
];
421424

422425
Iterable<String> get _embedderSdkUris {
423-
if (config.topLevelPackageMeta.isSdk) return const [];
426+
if (_config.topLevelPackageMeta.isSdk) return const [];
424427

425-
return embedderSdk?.urlMappings.keys ?? const [];
428+
return _embedderSdk?.urlMappings.keys ?? const [];
426429
}
427430

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;
430435
var findSpecialsSdk = switch (embedderSdk) {
431436
EmbedderSdk(:var urlMappings) when urlMappings.isNotEmpty => embedderSdk,
432-
_ => sdk,
437+
_ => _sdk,
433438
};
434-
var files = await _getFiles();
439+
var files = await _getFilesToDocument();
435440
var specialFiles = specialLibraryFiles(findSpecialsSdk);
436441

437442
logDebug('${DateTime.now()}: Discovering Dart libraries...');
@@ -453,20 +458,18 @@ class PubPackageBuilder implements PackageBuilder {
453458
/// Throws an exception if any configured-to-be-included files were not found
454459
/// while gathering libraries.
455460
void _checkForMissingIncludedFiles(Set<LibraryElement> foundLibraries) {
456-
if (config.include.isNotEmpty) {
461+
if (_config.include.isNotEmpty) {
457462
var knownLibraryNames = foundLibraries.map((l) => l.name);
458-
var notFound = config.include
463+
var notFound = _config.include
459464
.difference(Set.of(knownLibraryNames))
460-
.difference(config.exclude);
465+
.difference(_config.exclude);
461466
if (notFound.isNotEmpty) {
462467
throw StateError('Did not find: [${notFound.join(', ')}] in '
463468
'known libraries: [${knownLibraryNames.join(', ')}]');
464469
}
465470
}
466471
}
467472

468-
p.Context get _pathContext => resourceProvider.pathContext;
469-
470473
/// Returns the children of [directory], or returns only the 'lib/'
471474
/// directory in [directory] if [directory] is determined to be a package
472475
/// root.

0 commit comments

Comments
 (0)