Support for --packages in build mode.

Bug: https://buganizer.corp.google.com/issues/159290352
Change-Id: I160938eacf996fbc708f42f161ddc36becb71c92
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151781
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2020-06-19 17:03:03 +00:00 committed by commit-bot@chromium.org
parent ea50b03cbe
commit d4d1935140
2 changed files with 93 additions and 4 deletions

View file

@ -482,11 +482,18 @@ class BuildMode with HasContextMixin {
}
Packages _findPackages(String path) {
if (path != null) {
return findPackagesFrom(resourceProvider, resourceProvider.getFile(path));
} else {
return Packages.empty;
var configPath = options.packageConfigPath;
if (configPath != null) {
var configFile = resourceProvider.getFile(configPath);
return parsePackagesFile(resourceProvider, configFile);
}
if (path != null) {
var file = resourceProvider.getFile(path);
return findPackagesFrom(resourceProvider, file);
}
return Packages.empty;
}
/// Ensure that the parsed unit for [absoluteUri] is available.

View file

@ -622,6 +622,88 @@ var b = new B();
});
}
Future<void> test_packageConfig_packagesOptions() async {
await withTempDirAsync((tempDir) async {
var packagesPath = path.join(tempDir, 'aaa.packages');
var aaaRoot = path.join(tempDir, 'packages', 'aaa');
var aPath = path.join(aaaRoot, 'lib', 'a.dart');
var aUri = 'package:aaa/a.dart';
File(packagesPath).createSync(recursive: true);
File(packagesPath).writeAsStringSync('''
{
"configVersion": 2,
"packages": [
{
"name": "aaa",
"rootUri": "${path.toUri(aaaRoot)}",
"packageUri": "lib/",
"languageVersion": "2.4"
}
]
}
''');
File(aPath).createSync(recursive: true);
File(aPath).writeAsStringSync(r'''
extension E on int {}
''');
// Analyze package:aaa/a.dart and compute errors.
await _doDrive(
aPath,
fileUri: aUri,
additionalArgs: [
'--packages=$packagesPath',
],
);
expect(exitCode, ErrorSeverity.ERROR.ordinal);
expect(errorSink.toString(), contains('extension-methods'));
});
}
Future<void> test_packageConfig_relativeToFile() async {
await withTempDirAsync((tempDir) async {
var packagesPath = path.join(tempDir, '.dart_tool/package_config.json');
var aaaRoot = path.join(tempDir, 'packages', 'aaa');
var aPath = path.join(aaaRoot, 'lib', 'a.dart');
var aUri = 'package:aaa/a.dart';
File(packagesPath).createSync(recursive: true);
File(packagesPath).writeAsStringSync('''
{
"configVersion": 2,
"packages": [
{
"name": "aaa",
"rootUri": "${path.toUri(aaaRoot)}",
"packageUri": "lib/",
"languageVersion": "2.4"
}
]
}
''');
File(aPath).createSync(recursive: true);
File(aPath).writeAsStringSync(r'''
extension E on int {}
''');
// Analyze package:aaa/a.dart and compute errors.
await _doDrive(
aPath,
fileUri: aUri,
additionalArgs: [],
);
expect(exitCode, ErrorSeverity.ERROR.ordinal);
expect(errorSink.toString(), contains('extension-methods'));
});
}
Iterable<String> _linkedLibraryUnitUriList(
LinkedNodeBundle bundle2,
String libraryUriStr,