[ddc] Use typed ArgResults helper methods
Change-Id: I906c3cc5d9b80b5d6818cf0af779cc2de56d4db7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/449364
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Nicholas Shahan <nshahan@google.com>
diff --git a/pkg/dev_compiler/lib/src/command/command.dart b/pkg/dev_compiler/lib/src/command/command.dart
index f3e1bce..77d20ca 100644
--- a/pkg/dev_compiler/lib/src/command/command.dart
+++ b/pkg/dev_compiler/lib/src/command/command.dart
@@ -107,7 +107,7 @@
return CompilerResult(64);
}
if (argResults.wasParsed('sound-null-safety')) {
- var soundNullSafety = argResults['sound-null-safety'] as bool;
+ var soundNullSafety = argResults.flag('sound-null-safety');
print(
'Dart 3 only supports sound null safety, '
'see https://dart.dev/null-safety.\n'
@@ -119,7 +119,7 @@
}
}
- var outPaths = argResults['out'] as List<String>;
+ var outPaths = argResults.multiOption('out');
var moduleFormats = parseModuleFormatOption(argResults);
if (outPaths.isEmpty) {
print(
@@ -135,7 +135,7 @@
return CompilerResult(64);
}
- if (argResults['help'] as bool || args.isEmpty) {
+ if (argResults.flag('help') || args.isEmpty) {
print(_usageMessage(argParser));
return CompilerResult(0);
}
@@ -172,7 +172,8 @@
// lib folder). The following [FileSystem] will resolve those references to
// the correct location and keeps the real file location hidden from the
// front end.
- var multiRootPaths = (argResults['multi-root'] as Iterable<String>)
+ var multiRootPaths = argResults
+ .multiOption('multi-root')
.map(Uri.base.resolve)
.toList();
var multiRootOutputPath = options.multiRootOutputPath;
@@ -198,9 +199,9 @@
summaryPaths.map(sourcePathToUri).cast<Uri>(),
options.summaryModules.values,
);
- var sdkSummaryPath = argResults['dart-sdk-summary'] as String?;
- var librarySpecPath = argResults['libraries-file'] as String?;
- var compileSdk = argResults['compile-sdk'] == true;
+ var sdkSummaryPath = argResults.option('dart-sdk-summary');
+ var librarySpecPath = argResults.option('libraries-file');
+ var compileSdk = argResults.flag('compile-sdk');
if (sdkSummaryPath == null) {
if (!compileSdk) {
sdkSummaryPath = defaultSdkSummaryPath;
@@ -251,8 +252,7 @@
// .dart_tool/package_config.json file to resolve package URIs that are in the
// input summaries, but it seems to.
// This needs further investigation.
- var packageFile =
- argResults['packages'] as String? ?? _findPackagesFilePath();
+ var packageFile = argResults.option('packages') ?? _findPackagesFilePath();
var succeeded = true;
void diagnosticMessageHandler(fe.CfeDiagnosticMessage message) {
@@ -268,9 +268,9 @@
onWarning: print,
);
- var trackWidgetCreation = argResults['track-widget-creation'] as bool;
+ var trackWidgetCreation = argResults.flag('track-widget-creation');
var oldCompilerState = compilerState;
- var recordUsedInputs = argResults['used-inputs-file'] != null;
+ var recordUsedInputs = argResults.option('used-inputs-file') != null;
var additionalDills = summaryModules.keys.toList();
fe.DdcResult? result;
@@ -402,7 +402,7 @@
// Output files can be written in parallel, so collect the futures.
var outFiles = <Future>[];
- if (argResults['summarize'] as bool) {
+ if (argResults.flag('summarize')) {
if (outPaths.length > 1) {
print(
'If multiple output files (found ${outPaths.length}) are specified, '
@@ -426,7 +426,7 @@
outFiles.add(sink.flush().then((_) => sink.close()));
}
String? fullDillUri;
- if (argResults['experimental-output-compiled-kernel'] as bool) {
+ if (argResults.flag('experimental-output-compiled-kernel')) {
if (outPaths.length > 1) {
print(
'If multiple output files (found ${outPaths.length}) are specified, '
@@ -448,7 +448,7 @@
kernel.BinaryPrinter(sink).writeComponentFile(compiledLibraries);
outFiles.add(sink.flush().then((_) => sink.close()));
}
- if (argResults['summarize-text'] as bool) {
+ if (argResults.flag('summarize-text')) {
if (outPaths.length > 1) {
print(
'If multiple output files (found ${outPaths.length}) are specified, '
@@ -589,7 +589,7 @@
usedOutlines.addAll(summaryModules.keys);
}
- var outputUsedFile = File(argResults['used-inputs-file'] as String);
+ var outputUsedFile = File(argResults.option('used-inputs-file')!);
outputUsedFile.createSync(recursive: true);
outputUsedFile.writeAsStringSync(usedOutlines.join('\n'));
}
@@ -629,7 +629,7 @@
return CompilerResult(64);
}
- var outPaths = argResults['out'] as List<String>;
+ var outPaths = argResults.multiOption('out');
var moduleFormats = parseModuleFormatOption(argResults);
if (outPaths.isEmpty) {
print(
diff --git a/pkg/dev_compiler/lib/src/command/options.dart b/pkg/dev_compiler/lib/src/command/options.dart
index 5a9e686..7ee463a 100644
--- a/pkg/dev_compiler/lib/src/command/options.dart
+++ b/pkg/dev_compiler/lib/src/command/options.dart
@@ -127,33 +127,31 @@
Options.fromArguments(ArgResults args)
: this(
- sourceMap: args['source-map'] as bool,
- inlineSourceMap: args['inline-source-map'] as bool,
- summarizeApi: args['summarize'] as bool,
- enableAsserts: args['enable-asserts'] as bool,
- replCompile: args['repl-compile'] as bool,
- emitDebugMetadata: args['experimental-emit-debug-metadata'] as bool,
- emitDebugSymbols: args['emit-debug-symbols'] as bool,
- emitFullCompiledKernel:
- args['experimental-output-compiled-kernel'] as bool,
- reloadLastAcceptedKernel:
- args['reload-last-accepted-kernel'] as String?,
- reloadDeltaKernel: args['reload-delta-kernel'] as String?,
- summaryModules: _parseCustomSummaryModules(
- args['summary'] as List<String>,
+ sourceMap: args.flag('source-map'),
+ inlineSourceMap: args.flag('inline-source-map'),
+ summarizeApi: args.flag('summarize'),
+ enableAsserts: args.flag('enable-asserts'),
+ replCompile: args.flag('repl-compile'),
+ emitDebugMetadata: args.flag('experimental-emit-debug-metadata'),
+ emitDebugSymbols: args.flag('emit-debug-symbols'),
+ emitFullCompiledKernel: args.flag(
+ 'experimental-output-compiled-kernel',
),
+ reloadLastAcceptedKernel: args.option('reload-last-accepted-kernel'),
+ reloadDeltaKernel: args.option('reload-delta-kernel'),
+ summaryModules: _parseCustomSummaryModules(args.multiOption('summary')),
nonHotReloadablePackages: Set.from(
- args['non-hot-reloadable-package'] as List<String>,
+ args.multiOption('non-hot-reloadable-package'),
),
moduleFormats: parseModuleFormatOption(args),
moduleName: _getModuleName(args),
- multiRootScheme: args['multi-root-scheme'] as String,
- multiRootOutputPath: args['multi-root-output-path'] as String?,
+ multiRootScheme: args.option('multi-root-scheme')!,
+ multiRootOutputPath: args.option('multi-root-output-path'),
experiments: parseExperimentalArguments(
- args['enable-experiment'] as List<String>,
+ args.multiOption('enable-experiment'),
),
- canaryFeatures: args['canary'] as bool,
- dynamicModule: args['dynamic-module'] as bool,
+ canaryFeatures: args.flag('canary'),
+ dynamicModule: args.flag('dynamic-module'),
);
Options.fromSdkRequiredArguments(ArgResults args)
@@ -162,15 +160,15 @@
moduleFormats: parseModuleFormatOption(args),
// When compiling the SDK use dart_sdk as the default. This is the
// assumed name in various places around the build systems.
- moduleName: args['module-name'] != null
+ moduleName: args.option('module-name') != null
? _getModuleName(args)
: 'dart_sdk',
- multiRootScheme: args['multi-root-scheme'] as String,
- multiRootOutputPath: args['multi-root-output-path'] as String?,
+ multiRootScheme: args.option('multi-root-scheme')!,
+ multiRootOutputPath: args.option('multi-root-output-path'),
experiments: parseExperimentalArguments(
- args['enable-experiment'] as List<String>,
+ args.multiOption('enable-experiment'),
),
- canaryFeatures: args['canary'] as bool,
+ canaryFeatures: args.flag('canary'),
);
static void addArguments(ArgParser parser, {bool hide = true}) {
@@ -330,9 +328,9 @@
}
static String _getModuleName(ArgResults args) {
- var moduleName = args['module-name'] as String?;
+ var moduleName = args.option('module-name');
if (moduleName == null) {
- var outPaths = args['out'] as List<String>;
+ var outPaths = args.multiOption('out');
if (outPaths.isEmpty) {
throw UnsupportedError(
'No module name provided and unable to synthesize one without any '
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 3136be5..6e8f750 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -59,7 +59,7 @@
/// Parse the module format option added by [addModuleFormatOptions].
List<ModuleFormat> parseModuleFormatOption(ArgResults args) {
- return (args['modules'] as List<String>).map(parseModuleFormat).toList();
+ return args.multiOption('modules').map(parseModuleFormat).toList();
}
/// Adds an option to the [argParser] for choosing the module format, optionally
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 880b5cb..a9eaee0 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -168,16 +168,17 @@
var parsedArgs = argParser.parse(args);
FileSystem fileSystem = StandardFileSystem.instance;
- var multiRoots = (parsedArgs['multi-root'] as Iterable<String>)
+ var multiRoots = parsedArgs
+ .multiOption('multi-root')
.map(Uri.base.resolve)
.toList();
- var multiRootScheme = parsedArgs['multi-root-scheme'] as String;
+ var multiRootScheme = parsedArgs.option('multi-root-scheme')!;
if (multiRoots.isNotEmpty) {
fileSystem = MultiRootFileSystem(multiRootScheme, multiRoots, fileSystem);
}
- var assetServerAddress = parsedArgs['asset-server-address'] as String?;
+ var assetServerAddress = parsedArgs.option('asset-server-address');
if (assetServerAddress != null) {
- var assetServerPort = parsedArgs['asset-server-port'] as String?;
+ var assetServerPort = parsedArgs.option('asset-server-port');
fileSystem = AssetFileSystem(
fileSystem,
assetServerAddress,
@@ -185,29 +186,25 @@
);
}
var explicitExperimentalFlags = parseExperimentalFlags(
- parseExperimentalArguments(
- parsedArgs['enable-experiment'] as List<String>,
- ),
+ parseExperimentalArguments(parsedArgs.multiOption('enable-experiment')),
onError: (e) => throw e,
);
- var moduleFormat = parseModuleFormat(parsedArgs['module-format'] as String);
+ var moduleFormat = parseModuleFormat(parsedArgs.option('module-format')!);
return create(
- librariesSpecificationUri: _argToUri(
- parsedArgs['libraries-file'] as String?,
- ),
- packagesFile: _argToUri(parsedArgs['packages-file'] as String?),
- sdkSummary: _argToUri(parsedArgs['dart-sdk-summary'] as String?),
+ librariesSpecificationUri: _argToUri(parsedArgs.option('libraries-file')),
+ packagesFile: _argToUri(parsedArgs.option('packages-file')),
+ sdkSummary: _argToUri(parsedArgs.option('dart-sdk-summary')),
fileSystem: fileSystem,
environmentDefines: environmentDefines,
explicitExperimentalFlags: explicitExperimentalFlags,
- sdkRoot: _argToUri(parsedArgs['sdk-root'] as String?),
- trackWidgetCreation: parsedArgs['track-widget-creation'] as bool,
+ sdkRoot: _argToUri(parsedArgs.option('sdk-root')),
+ trackWidgetCreation: parsedArgs.flag('track-widget-creation'),
moduleFormat: moduleFormat,
- canaryFeatures: parsedArgs['canary'] as bool,
- enableAsserts: parsedArgs['enable-asserts'] as bool,
- verbose: parsedArgs['verbose'] as bool,
+ canaryFeatures: parsedArgs.flag('canary'),
+ enableAsserts: parsedArgs.flag('enable-asserts'),
+ verbose: parsedArgs.flag('verbose'),
requestStream: requestStream,
sendResponse: sendResponse,
onDone: () {
diff --git a/pkg/dev_compiler/tool/ddb b/pkg/dev_compiler/tool/ddb
index 129c1ff..a5d23bd 100755
--- a/pkg/dev_compiler/tool/ddb
+++ b/pkg/dev_compiler/tool/ddb
@@ -102,37 +102,38 @@
..addOption('vm-service-port',
help: 'Specify the observatory port. Implied --observe.');
- var options = parser.parse(args);
- if (options['help'] as bool) {
+ var parsedArgs = parser.parse(args);
+ if (parsedArgs.flag('help')) {
printUsage();
print('Available options:');
print(parser.usage);
exit(0);
}
- if (options.rest.isEmpty) {
+ if (parsedArgs.rest.isEmpty) {
print('Dart script file required.\n');
printUsage();
exit(1);
}
- var arch = options['arch'] as String?;
- var debug = options['debug'] as bool ||
- options['observe'] as bool ||
- options.wasParsed('vm-service-port');
- var summarizeText = options['summarize-text'] as bool;
- var binary = options['binary'] as String?;
- var experiments = options['enable-experiment'] as List<String>;
- var summaries = options['summary'] as List<String>;
- var port = int.parse(options['port'] as String);
- var mode = options['mode'] as String;
+ var arch = parsedArgs.option('arch');
+ var debug =
+ parsedArgs.flag('debug') ||
+ parsedArgs.flag('observe') ||
+ parsedArgs.wasParsed('vm-service-port');
+ var summarizeText = parsedArgs.flag('summarize-text');
+ var binary = parsedArgs.option('binary');
+ var experiments = parsedArgs.multiOption('enable-experiment');
+ var summaries = parsedArgs.multiOption('summary');
+ var port = int.parse(parsedArgs.option('port')!);
+ var mode = parsedArgs.option('mode')!;
var compile = mode == 'compile' || mode == 'all';
var run = mode == 'run' || mode == 'all';
- var verbose = options['verbose'] as bool;
- var emitDebugSymbols = options['emit-debug-symbols'] as bool;
- var nativeNonNullAsserts = options['native-null-assertions'] as bool;
- var jsInteropNonNullAsserts = options['interop-null-assertions'] as bool;
- var ddcModules = options['ddc-modules'] as bool;
- var canaryFeatures = options['canary'] as bool;
- var sourceFiles = options.rest.map(p.canonicalize);
+ var verbose = parsedArgs.flag('verbose');
+ var emitDebugSymbols = parsedArgs.flag('emit-debug-symbols');
+ var nativeNonNullAsserts = parsedArgs.flag('native-null-assertions');
+ var jsInteropNonNullAsserts = parsedArgs.flag('interop-null-assertions');
+ var ddcModules = parsedArgs.flag('ddc-modules');
+ var canaryFeatures = parsedArgs.flag('canary');
+ var sourceFiles = parsedArgs.rest.map(p.canonicalize);
var entryPoint = sourceFiles.last;
var libRoot = p.dirname(entryPoint);
var basename = p.basenameWithoutExtension(entryPoint);
@@ -186,11 +187,11 @@
Future<void> runDdc(List<String> ddcArgs) async {
var observe =
- options.wasParsed('vm-service-port') || options['observe'] as bool;
- var vmServicePort = options.wasParsed('vm-service-port')
- ? '=${options['vm-service-port']}'
+ parsedArgs.wasParsed('vm-service-port') || parsedArgs.flag('observe');
+ var vmServicePort = parsedArgs.wasParsed('vm-service-port')
+ ? '=${parsedArgs.option('vm-service-port')!}'
: '';
- var vmOptions = options['compile-vm-options'] as String?;
+ var vmOptions = parsedArgs.option('compile-vm-options');
var args = <String>[
...?vmOptions?.split(' '),
if (debug) ...[
@@ -214,7 +215,7 @@
var chrome = false;
var node = false;
var d8 = false;
- var runtime = options['runtime'] as String?;
+ var runtime = parsedArgs.option('runtime');
switch (runtime) {
case 'node':
// TODO(nshahan): Cleanup after the ddc module format is used everywhere.
@@ -254,13 +255,14 @@
}
var outputs = <String>[];
if (compile) {
+ var packages = parsedArgs.option('packages');
var ddcArgs = [
if (summarizeText) '--summarize-text',
'--modules=$mod',
'--dart-sdk-summary=$sdkOutlineDill',
for (var summary in summaries) '--summary=$summary',
for (var experiment in experiments) '--enable-experiment=$experiment',
- if (options['packages'] != null) '--packages=${options['packages']}',
+ if (packages != null) '--packages=$packages',
if (emitDebugSymbols) '--emit-debug-symbols',
if (canaryFeatures) '--canary',
// Provide predictable library URIs for all libraries when using the