Make it strong mode clean.

R=nweiz@google.com

Review URL: https://codereview.chromium.org//1748333005 .
diff --git a/.analysis_options b/.analysis_options
new file mode 100644
index 0000000..a10d4c5
--- /dev/null
+++ b/.analysis_options
@@ -0,0 +1,2 @@
+analyzer:
+  strong-mode: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8e4cf8..0a1adc4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.13.3+5
+
+* Make strong mode clean.
+
 ## 0.13.3+4
 
 * Use the proper `usage` getter in the README.
@@ -87,13 +91,13 @@
 ## 0.12.0
 
 * Removed public constructors for `ArgResults` and `Option`.
- 
+
 * `ArgResults.wasParsed()` can be used to determine if an option was actually
   parsed or the default value is being returned.
 
 * Replaced `isFlag` and `allowMultiple` fields in the `Option` class with a
   three-value `OptionType` enum.
-  
+
 * Options may define `valueHelp` which will then be shown in the usage.
 
 ## 0.11.0
diff --git a/lib/command_runner.dart b/lib/command_runner.dart
index df1dbf8..3cc952e 100644
--- a/lib/command_runner.dart
+++ b/lib/command_runner.dart
@@ -40,7 +40,7 @@
   ///
   /// If a subclass overrides this to return a string, it will automatically be
   /// added to the end of [usage].
-  final String usageFooter = null;
+  String get usageFooter => null;
 
   /// Returns [usage] with [description] removed from the beginning.
   String get _usageWithoutDescription {
@@ -60,7 +60,7 @@
 
   /// An unmodifiable view of all top-level commands defined for this runner.
   Map<String, Command> get commands => new UnmodifiableMapView(_commands);
-  final _commands = new Map<String, Command>();
+  final _commands = <String, Command>{};
 
   /// The top-level argument parser.
   ///
@@ -129,7 +129,7 @@
     return new Future.sync(() {
       var argResults = topLevelResults;
       var commands = _commands;
-      var command;
+      Command command;
       var commandString = executableName;
 
       while (commands.isNotEmpty) {
@@ -255,7 +255,7 @@
   ///
   /// If a subclass overrides this to return a string, it will automatically be
   /// added to the end of [usage].
-  final String usageFooter = null;
+  String get usageFooter => null;
 
   /// Returns [usage] with [description] removed from the beginning.
   String get _usageWithoutDescription {
@@ -281,7 +281,7 @@
 
   /// An unmodifiable view of all sublevel commands of this command.
   Map<String, Command> get subcommands => new UnmodifiableMapView(_subcommands);
-  final _subcommands = new Map<String, Command>();
+  final _subcommands = <String, Command>{};
 
   /// Whether or not this command should be hidden from help listings.
   ///
@@ -306,7 +306,7 @@
   ///
   /// This is intended to be overridden by commands that don't want to receive
   /// arguments. It has no effect for branch commands.
-  final takesArguments = true;
+  bool get takesArguments => true;
 
   /// Alternate names for this command.
   ///
@@ -314,7 +314,7 @@
   /// invoked on the command line.
   ///
   /// This is intended to be overridden.
-  final aliases = const <String>[];
+  List<String> get aliases => const [];
 
   Command() {
     argParser.addFlag('help',
diff --git a/lib/src/arg_parser.dart b/lib/src/arg_parser.dart
index f5ce41a..fa80031 100644
--- a/lib/src/arg_parser.dart
+++ b/lib/src/arg_parser.dart
@@ -130,7 +130,7 @@
   /// Parses [args], a list of command-line arguments, matches them against the
   /// flags and options defined by this parser, and returns the result.
   ArgResults parse(List<String> args) =>
-      new Parser(null, this, args.toList(), null, null).parse();
+      new Parser(null, this, args.toList()).parse();
 
   /// Generates a string displaying usage information for the defined options.
   ///
diff --git a/lib/src/help_command.dart b/lib/src/help_command.dart
index 9ffcbe1..085e444 100644
--- a/lib/src/help_command.dart
+++ b/lib/src/help_command.dart
@@ -23,7 +23,7 @@
     // Walk the command tree to show help for the selected command or
     // subcommand.
     var commands = runner.commands;
-    var command = null;
+    Command command;
     var commandString = runner.executableName;
 
     for (var name in argResults.rest) {
diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index c36035c..5567854 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -35,7 +35,8 @@
   /// The accumulated parsed options.
   final Map<String, dynamic> results = <String, dynamic>{};
 
-  Parser(this.commandName, this.grammar, this.args, this.parent, rest) {
+  Parser(this.commandName, this.grammar, this.args,
+      [this.parent, List<String> rest]) {
     if (rest != null) this.rest.addAll(rest);
   }
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 34688a2..abfd6aa 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: args
-version: 0.13.3+4
+version: 0.13.3+5
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/args
 description: >
diff --git a/test/parse_test.dart b/test/parse_test.dart
index 187f735..cdc6d5e 100644
--- a/test/parse_test.dart
+++ b/test/parse_test.dart
@@ -117,7 +117,7 @@
       });
 
       test('are invoked even if the flag is not present', () {
-        var a = 'not called';
+        var a = true;
         var parser = new ArgParser();
         parser.addFlag('a', callback: (value) => a = value);
 
diff --git a/test/utils.dart b/test/utils.dart
index 3ef6887..4ecc502 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -9,7 +9,7 @@
 import 'package:test/test.dart';
 
 class CommandRunnerWithFooter extends CommandRunner {
-  final usageFooter = "Also, footer!";
+  String get usageFooter => "Also, footer!";
 
   CommandRunnerWithFooter(String executableName, String description)
       : super(executableName, description);