Convert builder.dart to triple-slash comment style

Change-Id: I73e371b073ef2f7448a175b5fdb85bd77d8529a6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132460
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Paul Berry
2020-01-21 15:58:02 +00:00
committed by commit-bot@chromium.org
parent 48aa6470ca
commit 16cb7cee1b
+126 -216
View File
@@ -44,97 +44,71 @@ import 'package:args/args.dart';
import 'package:path/src/context.dart';
import 'package:yaml/yaml.dart';
/**
* A utility class used to build an analysis context for a given directory.
*
* The construction of analysis contexts is as follows:
*
* 1. Determine how package: URI's are to be resolved. This follows the lookup
* algorithm defined by the [package specification][1].
*
* 2. Using the results of step 1, look in each package for an embedder file
* (_embedder.yaml). If one exists then it defines the SDK. If multiple such
* files exist then use the first one found. Otherwise, use the default SDK.
*
* 3. Look for an analysis options file (`analysis_options.yaml` or
* `.analysis_options`) and process the options in the file.
*
* 4. Create a new context. Initialize its source factory based on steps 1, 2
* and 3. Initialize its analysis options from step 4.
*
* [1]: https://github.com/dart-lang/dart_enhancement_proposals/blob/master/Accepted/0005%20-%20Package%20Specification/DEP-pkgspec.md.
*/
/// A utility class used to build an analysis context for a given directory.
///
/// The construction of analysis contexts is as follows:
///
/// 1. Determine how package: URI's are to be resolved. This follows the lookup
/// algorithm defined by the [package specification][1].
///
/// 2. Using the results of step 1, look in each package for an embedder file
/// (_embedder.yaml). If one exists then it defines the SDK. If multiple such
/// files exist then use the first one found. Otherwise, use the default SDK.
///
/// 3. Look for an analysis options file (`analysis_options.yaml` or
/// `.analysis_options`) and process the options in the file.
///
/// 4. Create a new context. Initialize its source factory based on steps 1, 2
/// and 3. Initialize its analysis options from step 4.
///
/// [1]: https://github.com/dart-lang/dart_enhancement_proposals/blob/master/Accepted/0005%20-%20Package%20Specification/DEP-pkgspec.md.
class ContextBuilder {
/**
* A callback for when analysis drivers are created, which takes all the same
* arguments as the dart analysis driver constructor so that plugins may
* create their own drivers with the same tools, in theory. Here as a stopgap
* until the official plugin API is complete
*/
/// A callback for when analysis drivers are created, which takes all the same
/// arguments as the dart analysis driver constructor so that plugins may
/// create their own drivers with the same tools, in theory. Here as a stopgap
/// until the official plugin API is complete
static Function onCreateAnalysisDriver;
/**
* The [ResourceProvider] by which paths are converted into [Resource]s.
*/
/// The [ResourceProvider] by which paths are converted into [Resource]s.
final ResourceProvider resourceProvider;
/**
* The manager used to manage the DartSdk's that have been created so that
* they can be shared across contexts.
*/
/// The manager used to manage the DartSdk's that have been created so that
/// they can be shared across contexts.
final DartSdkManager sdkManager;
/**
* The cache containing the contents of overlaid files. If this builder will
* be used to build analysis drivers, set the [fileContentOverlay] instead.
*/
/// The cache containing the contents of overlaid files. If this builder will
/// be used to build analysis drivers, set the [fileContentOverlay] instead.
final ContentCache contentCache;
/**
* The options used by the context builder.
*/
/// The options used by the context builder.
final ContextBuilderOptions builderOptions;
/**
* The scheduler used by any analysis drivers created through this interface.
*/
/// The scheduler used by any analysis drivers created through this interface.
AnalysisDriverScheduler analysisDriverScheduler;
/**
* The performance log used by any analysis drivers created through this
* interface.
*/
/// The performance log used by any analysis drivers created through this
/// interface.
PerformanceLog performanceLog;
/**
* The byte store used by any analysis drivers created through this interface.
*/
/// The byte store used by any analysis drivers created through this interface.
ByteStore byteStore;
/**
* The file content overlay used by analysis drivers. If this builder will be
* used to build analysis contexts, set the [contentCache] instead.
*/
/// The file content overlay used by analysis drivers. If this builder will be
/// used to build analysis contexts, set the [contentCache] instead.
FileContentOverlay fileContentOverlay;
/**
* Whether any analysis driver created through this interface should support
* indexing and search.
*/
/// Whether any analysis driver created through this interface should support
/// indexing and search.
bool enableIndex = false;
/**
* Initialize a newly created builder to be ready to build a context rooted in
* the directory with the given [rootDirectoryPath].
*/
/// Initialize a newly created builder to be ready to build a context rooted in
/// the directory with the given [rootDirectoryPath].
ContextBuilder(this.resourceProvider, this.sdkManager, this.contentCache,
{ContextBuilderOptions options})
: builderOptions = options ?? ContextBuilderOptions();
/**
* Return an analysis driver that is configured correctly to analyze code in
* the directory with the given [path].
*/
/// Return an analysis driver that is configured correctly to analyze code in
/// the directory with the given [path].
AnalysisDriver buildDriver(ContextRoot contextRoot) {
String path = contextRoot.root;
AnalysisOptions options =
@@ -180,9 +154,7 @@ class ContextBuilder {
return driver;
}
/**
* Return an analysis options object containing the default option values.
*/
/// Return an analysis options object containing the default option values.
AnalysisOptions createDefaultOptions() {
AnalysisOptions defaultOptions = builderOptions.defaultOptions;
if (defaultOptions == null) {
@@ -239,10 +211,8 @@ class ContextBuilder {
return workspace.createSourceFactory(sdk, summaryData);
}
/**
* Add any [declaredVariables] to the list of declared variables used by the
* given analysis [driver].
*/
/// Add any [declaredVariables] to the list of declared variables used by the
/// given analysis [driver].
void declareVariablesInDriver(AnalysisDriver driver) {
Map<String, String> variables = builderOptions.declaredVariables;
if (variables != null && variables.isNotEmpty) {
@@ -251,16 +221,14 @@ class ContextBuilder {
}
}
/**
* Finds a package resolution strategy for the directory at the given absolute
* [path].
*
* This function first tries to locate a `.packages` file in the directory. If
* that is not found, it instead checks for the presence of a `packages/`
* directory in the same place. If that also fails, it starts checking parent
* directories for a `.packages` file, and stops if it finds it. Otherwise it
* gives up and returns [Packages.empty].
*/
/// Finds a package resolution strategy for the directory at the given absolute
/// [path].
///
/// This function first tries to locate a `.packages` file in the directory. If
/// that is not found, it instead checks for the presence of a `packages/`
/// directory in the same place. If that also fails, it starts checking parent
/// directories for a `.packages` file, and stops if it finds it. Otherwise it
/// gives up and returns [Packages.empty].
Packages findPackagesFromFile(String path) {
Resource location = _findPackagesLocation(path);
if (location is File) {
@@ -275,12 +243,10 @@ class ContextBuilder {
return Packages.empty;
}
/**
* Return the SDK that should be used to analyze code. Use the given
* [workspace] and [analysisOptions] to locate the SDK.
*
* TODO(scheglov) Remove [analysisOptions]?
*/
/// Return the SDK that should be used to analyze code. Use the given
/// [workspace] and [analysisOptions] to locate the SDK.
///
/// TODO(scheglov) Remove [analysisOptions]?
DartSdk findSdk(Workspace workspace, AnalysisOptions analysisOptions) {
String summaryPath = builderOptions.dartSdkSummaryPath;
if (summaryPath != null) {
@@ -399,14 +365,12 @@ class ContextBuilder {
return options;
}
/**
* Return the analysis options file that should be used when analyzing code in
* the directory with the given [path].
*
* If [forceSearch] is true, then don't return the default analysis options
* path. This allows cli to locate what *would* have been the analysis options
* file path, and super-impose the defaults over it in-place.
*/
/// Return the analysis options file that should be used when analyzing code in
/// the directory with the given [path].
///
/// If [forceSearch] is true, then don't return the default analysis options
/// path. This allows cli to locate what *would* have been the analysis options
/// file path, and super-impose the defaults over it in-place.
File getOptionsFile(String path, {bool forceSearch = false}) {
if (!forceSearch) {
String filePath = builderOptions.defaultAnalysisOptionsFilePath;
@@ -430,14 +394,12 @@ class ContextBuilder {
return null;
}
/**
* Create a [Packages] object for a 'package' directory ([folder]).
*
* Package names are resolved as relative to sub-directories of the package
* directory.
*
* TODO(scheglov) Remove this feature
*/
/// Create a [Packages] object for a 'package' directory ([folder]).
///
/// Package names are resolved as relative to sub-directories of the package
/// directory.
///
/// TODO(scheglov) Remove this feature
Packages getPackagesFromFolder(Folder folder) {
Context pathContext = resourceProvider.pathContext;
var map = <String, Package>{};
@@ -460,9 +422,7 @@ class ContextBuilder {
return Packages(map);
}
/**
* Resolve any symbolic links encoded in the path to the given [folder].
*/
/// Resolve any symbolic links encoded in the path to the given [folder].
String resolveSymbolicLink(Folder folder) {
try {
return folder.resolveSymbolicLinksSync().path;
@@ -471,10 +431,8 @@ class ContextBuilder {
}
}
/**
* Resolve any symbolic links encoded in the URI's in the given [map] by
* replacing the values in the map.
*/
/// Resolve any symbolic links encoded in the URI's in the given [map] by
/// replacing the values in the map.
void resolveSymbolicLinks(Map<String, Uri> map) {
Context pathContext = resourceProvider.pathContext;
for (String packageName in map.keys) {
@@ -489,19 +447,17 @@ class ContextBuilder {
}
}
/**
* Find the location of the package resolution file/directory for the
* directory at the given absolute [path].
*
* Checks for a `.packages` file in the [path]. If not found,
* checks for a `packages` directory in the same directory. If still not
* found, starts checking parent directories for `.packages` until reaching
* the root directory.
*
* Return a [File] object representing a `.packages` file if one is found, a
* [Folder] object for the `packages/` directory if that is found, or `null`
* if neither is found.
*/
/// Find the location of the package resolution file/directory for the
/// directory at the given absolute [path].
///
/// Checks for a `.packages` file in the [path]. If not found,
/// checks for a `packages` directory in the same directory. If still not
/// found, starts checking parent directories for `.packages` until reaching
/// the root directory.
///
/// Return a [File] object representing a `.packages` file if one is found, a
/// [Folder] object for the `packages/` directory if that is found, or `null`
/// if neither is found.
Resource _findPackagesLocation(String path) {
var resource = resourceProvider.getResource(path);
while (resource != null) {
@@ -521,10 +477,8 @@ class ContextBuilder {
return null;
}
/**
* Return the `pubspec.yaml` file that should be used when analyzing code in
* the directory with the given [path], possibly `null`.
*/
/// Return the `pubspec.yaml` file that should be used when analyzing code in
/// the directory with the given [path], possibly `null`.
File _findPubspecFile(String path) {
var resource = resourceProvider.getResource(path);
while (resource != null) {
@@ -565,10 +519,8 @@ class ContextBuilder {
return workspace;
}
/**
* Return `true` if either the directory at [rootPath] or a parent of that
* directory contains a `.packages` file.
*/
/// Return `true` if either the directory at [rootPath] or a parent of that
/// directory contains a `.packages` file.
static bool _hasPackageFileInPath(
ResourceProvider resourceProvider, String rootPath) {
Folder folder = resourceProvider.getFolder(rootPath);
@@ -583,113 +535,79 @@ class ContextBuilder {
}
}
/**
* Options used by a [ContextBuilder].
*/
/// Options used by a [ContextBuilder].
class ContextBuilderOptions {
/**
* The results of parsing the command line arguments as defined by
* [defineAnalysisArguments] or `null` if none.
*/
/// The results of parsing the command line arguments as defined by
/// [defineAnalysisArguments] or `null` if none.
ArgResults argResults;
/**
* The file path of the file containing the summary of the SDK that should be
* used to "analyze" the SDK. This option should only be specified by
* command-line tools such as 'dartanalyzer' or 'ddc'.
*/
/// The file path of the file containing the summary of the SDK that should be
/// used to "analyze" the SDK. This option should only be specified by
/// command-line tools such as 'dartanalyzer' or 'ddc'.
String dartSdkSummaryPath;
/**
* The file path of the analysis options file that should be used in place of
* any file in the root directory or a parent of the root directory, or `null`
* if the normal lookup mechanism should be used.
*/
/// The file path of the analysis options file that should be used in place of
/// any file in the root directory or a parent of the root directory, or `null`
/// if the normal lookup mechanism should be used.
String defaultAnalysisOptionsFilePath;
/**
* A table mapping variable names to values for the declared variables, or
* `null` if no additional variables should be declared.
*/
/// A table mapping variable names to values for the declared variables, or
/// `null` if no additional variables should be declared.
Map<String, String> declaredVariables;
/**
* The default analysis options that should be used unless some or all of them
* are overridden in the analysis options file, or `null` if the default
* defaults should be used.
*/
/// The default analysis options that should be used unless some or all of them
/// are overridden in the analysis options file, or `null` if the default
/// defaults should be used.
AnalysisOptions defaultOptions;
/**
* The file path of the .packages file that should be used in place of any
* file found using the normal (Package Specification DEP) lookup mechanism,
* or `null` if the normal lookup mechanism should be used.
*/
/// The file path of the .packages file that should be used in place of any
/// file found using the normal (Package Specification DEP) lookup mechanism,
/// or `null` if the normal lookup mechanism should be used.
String defaultPackageFilePath;
/**
* The file path of the packages directory that should be used in place of any
* file found using the normal (Package Specification DEP) lookup mechanism,
* or `null` if the normal lookup mechanism should be used.
*/
/// The file path of the packages directory that should be used in place of any
/// file found using the normal (Package Specification DEP) lookup mechanism,
/// or `null` if the normal lookup mechanism should be used.
String defaultPackagesDirectoryPath;
/**
* A list of the paths of summary files that are to be used, or `null` if no
* summary information is available.
*/
/// A list of the paths of summary files that are to be used, or `null` if no
/// summary information is available.
List<String> librarySummaryPaths;
/**
* Initialize a newly created set of options
*/
/// Initialize a newly created set of options
ContextBuilderOptions();
}
/**
* Given a package map, check in each package's lib directory for the existence
* of an `_embedder.yaml` file. If the file contains a top level YamlMap, it
* will be added to the [embedderYamls] map.
*/
/// Given a package map, check in each package's lib directory for the existence
/// of an `_embedder.yaml` file. If the file contains a top level YamlMap, it
/// will be added to the [embedderYamls] map.
class EmbedderYamlLocator {
/**
* The name of the embedder files being searched for.
*/
/// The name of the embedder files being searched for.
static const String EMBEDDER_FILE_NAME = '_embedder.yaml';
/**
* A mapping from a package's library directory to the parsed YamlMap.
*/
/// A mapping from a package's library directory to the parsed YamlMap.
final Map<Folder, YamlMap> embedderYamls = HashMap<Folder, YamlMap>();
/**
* Initialize a newly created locator by processing the packages in the given
* [packageMap].
*/
/// Initialize a newly created locator by processing the packages in the given
/// [packageMap].
EmbedderYamlLocator(Map<String, List<Folder>> packageMap) {
if (packageMap != null) {
_processPackageMap(packageMap);
}
}
/**
* Initialize with the given [libFolder] of `sky_engine` package.
*/
/// Initialize with the given [libFolder] of `sky_engine` package.
EmbedderYamlLocator.forLibFolder(Folder libFolder) {
_processPackage([libFolder]);
}
/**
* Programmatically add an `_embedder.yaml` mapping.
*/
/// Programmatically add an `_embedder.yaml` mapping.
void addEmbedderYaml(Folder libDir, String embedderYaml) {
_processEmbedderYaml(libDir, embedderYaml);
}
/**
* Refresh the map of located files to those found by processing the given
* [packageMap].
*/
/// Refresh the map of located files to those found by processing the given
/// [packageMap].
void refresh(Map<String, List<Folder>> packageMap) {
// Clear existing.
embedderYamls.clear();
@@ -698,10 +616,8 @@ class EmbedderYamlLocator {
}
}
/**
* Given the yaml for an embedder ([embedderYaml]) and a folder ([libDir]),
* setup the uri mapping.
*/
/// Given the yaml for an embedder ([embedderYaml]) and a folder ([libDir]),
/// setup the uri mapping.
void _processEmbedderYaml(Folder libDir, String embedderYaml) {
try {
YamlNode yaml = loadYaml(embedderYaml);
@@ -713,10 +629,8 @@ class EmbedderYamlLocator {
}
}
/**
* Given a package list of folders ([libDirs]), process any
* `_embedder.yaml` files that are found in any of the folders.
*/
/// Given a package list of folders ([libDirs]), process any
/// `_embedder.yaml` files that are found in any of the folders.
void _processPackage(List<Folder> libDirs) {
for (Folder libDir in libDirs) {
String embedderYaml = _readEmbedderYaml(libDir);
@@ -726,17 +640,13 @@ class EmbedderYamlLocator {
}
}
/**
* Process each of the entries in the [packageMap].
*/
/// Process each of the entries in the [packageMap].
void _processPackageMap(Map<String, List<Folder>> packageMap) {
packageMap.values.forEach(_processPackage);
}
/**
* Read and return the contents of [libDir]/[EMBEDDER_FILE_NAME], or `null` if
* the file doesn't exist.
*/
/// Read and return the contents of [libDir]/[EMBEDDER_FILE_NAME], or `null` if
/// the file doesn't exist.
String _readEmbedderYaml(Folder libDir) {
File file = libDir.getChild(EMBEDDER_FILE_NAME);
try {