Add @override annotations to flutter framework
diff --git a/packages/flutter_tools/.analysis_options b/packages/flutter_tools/.analysis_options
index c773324..f1976ec 100644
--- a/packages/flutter_tools/.analysis_options
+++ b/packages/flutter_tools/.analysis_options
@@ -22,7 +22,7 @@
     - avoid_empty_else
     - always_declare_return_types
     - always_specify_types
-    # - annotate_overrides # still a lot of work to do before enabling this one
+    - annotate_overrides
     # - avoid_as # https://github.com/dart-lang/linter/issues/195
     - avoid_init_to_null
     # - avoid_return_types_on_setters # https://github.com/dart-lang/linter/issues/202
diff --git a/packages/flutter_tools/lib/src/android/adb.dart b/packages/flutter_tools/lib/src/android/adb.dart
index 9d35daa2..afaf6a8 100644
--- a/packages/flutter_tools/lib/src/android/adb.dart
+++ b/packages/flutter_tools/lib/src/android/adb.dart
@@ -214,6 +214,7 @@
   /// Device product; can be null. `peregrine_retus`, `nakasi`
   String get productID => _info['product'];
 
+  @override
   bool operator ==(dynamic other) {
     if (identical(this, other))
       return true;
@@ -223,8 +224,10 @@
     return id == typedOther.id;
   }
 
+  @override
   int get hashCode => id.hashCode;
 
+  @override
   String toString() {
     if (modelID == null) {
       return '$id ($status)';
diff --git a/packages/flutter_tools/lib/src/android/android_device.dart b/packages/flutter_tools/lib/src/android/android_device.dart
index b1b1d50..bf9515d 100644
--- a/packages/flutter_tools/lib/src/android/android_device.dart
+++ b/packages/flutter_tools/lib/src/android/android_device.dart
@@ -32,7 +32,10 @@
 class AndroidDevices extends PollingDeviceDiscovery {
   AndroidDevices() : super('AndroidDevices');
 
+  @override
   bool get supportsPlatform => true;
+
+  @override
   List<Device> pollingGetDevices() => getAdbDevices();
 }
 
@@ -50,6 +53,7 @@
 
   bool _isLocalEmulator;
 
+  @override
   bool get isLocalEmulator {
     if (_isLocalEmulator == null) {
       // http://developer.android.com/ndk/guides/abis.html (x86, armeabi-v7a, ...)
@@ -152,6 +156,7 @@
     return shaFile.existsSync() ? shaFile.readAsStringSync() : '';
   }
 
+  @override
   String get name => modelID;
 
   @override
@@ -279,6 +284,7 @@
     }
   }
 
+  @override
   Future<bool> stopApp(ApplicationPackage app) {
     List<String> command = adbCommandForDevice(<String>['shell', 'am', 'force-stop', app.id]);
     return runCommandAndStreamOutput(command).then((int exitCode) => exitCode == 0);
@@ -288,16 +294,19 @@
   @override
   TargetPlatform get platform => TargetPlatform.android_arm;
 
+  @override
   void clearLogs() {
     runSync(adbCommandForDevice(<String>['logcat', '-c']));
   }
 
+  @override
   DeviceLogReader get logReader {
     if (_logReader == null)
       _logReader = new _AdbLogReader(this);
     return _logReader;
   }
 
+  @override
   DevicePortForwarder get portForwarder {
     if (_portForwarder == null)
       _portForwarder = new _AndroidDevicePortForwarder(this);
@@ -382,6 +391,7 @@
     return null;
   }
 
+  @override
   bool isSupported() => true;
 
   Future<bool> refreshSnapshot(AndroidApk apk, String snapshotPath) async {
@@ -488,14 +498,19 @@
   StreamSubscription<String> _stdoutSubscription;
   StreamSubscription<String> _stderrSubscription;
 
+  @override
   Stream<String> get lines => _linesStreamController.stream;
 
+  @override
   String get name => device.name;
 
+  @override
   bool get isReading => _process != null;
 
+  @override
   Future<int> get finished => _process != null ? _process.exitCode : new Future<int>.value(0);
 
+  @override
   Future<Null> start() async {
     if (_process != null)
       throw new StateError('_AdbLogReader must be stopped before it can be started.');
@@ -516,6 +531,7 @@
     _process.exitCode.then(_onExit);
   }
 
+  @override
   Future<Null> stop() async {
     if (_process == null)
       throw new StateError('_AdbLogReader must be started before it can be stopped.');
@@ -540,8 +556,10 @@
     _linesStreamController.add(line);
   }
 
+  @override
   int get hashCode => name.hashCode;
 
+  @override
   bool operator ==(dynamic other) {
     if (identical(this, other))
       return true;
@@ -560,6 +578,7 @@
     return int.parse(portString.trim(), onError: (_) => null);
   }
 
+  @override
   List<ForwardedPort> get forwardedPorts {
     final List<ForwardedPort> ports = <ForwardedPort>[];
 
@@ -591,6 +610,7 @@
     return ports;
   }
 
+  @override
   Future<int> forward(int devicePort, { int hostPort }) async {
     if ((hostPort == null) || (hostPort == 0)) {
       // Auto select host port.
@@ -604,6 +624,7 @@
     return hostPort;
   }
 
+  @override
   Future<Null> unforward(ForwardedPort forwardedPort) async {
     runCheckedSync(device.adbCommandForDevice(
       <String>['forward', '--remove', 'tcp:${forwardedPort.hostPort}']
diff --git a/packages/flutter_tools/lib/src/android/android_sdk.dart b/packages/flutter_tools/lib/src/android/android_sdk.dart
index 819f64f..0e605f4 100644
--- a/packages/flutter_tools/lib/src/android/android_sdk.dart
+++ b/packages/flutter_tools/lib/src/android/android_sdk.dart
@@ -175,6 +175,7 @@
     _latestVersion = _sdkVersions.isEmpty ? null : _sdkVersions.last;
   }
 
+  @override
   String toString() => 'AndroidSdk: $directory';
 }
 
@@ -211,10 +212,12 @@
     return path.join(sdk.directory, 'build-tools', buildToolsVersion, binaryName);
   }
 
+  @override
   int compareTo(AndroidSdkVersion other) {
     return sdkLevel - other.sdkLevel;
   }
 
+  @override
   String toString() => '[${sdk.directory}, SDK version $sdkLevel, build-tools $buildToolsVersion]';
 
   bool _exists(String path, { bool complain: false }) {
diff --git a/packages/flutter_tools/lib/src/android/android_workflow.dart b/packages/flutter_tools/lib/src/android/android_workflow.dart
index 21a912b..9bccb0a 100644
--- a/packages/flutter_tools/lib/src/android/android_workflow.dart
+++ b/packages/flutter_tools/lib/src/android/android_workflow.dart
@@ -7,14 +7,19 @@
 import 'android_sdk.dart';
 
 class AndroidWorkflow extends Workflow {
+  @override
   String get label => 'Android toolchain';
 
+  @override
   bool get appliesToHostPlatform => true;
 
+  @override
   bool get canListDevices => getAdbPath(androidSdk) != null;
 
+  @override
   bool get canLaunchDevices => androidSdk != null && androidSdk.validateSdkWellFormed(complain: false);
 
+  @override
   ValidationResult validate() {
     Validator androidValidator = new Validator(
       label,
@@ -36,5 +41,6 @@
     return androidValidator.validate();
   }
 
+  @override
   void diagnose() => validate().print();
 }
diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart
index 1b233b6..d376905 100644
--- a/packages/flutter_tools/lib/src/application_package.dart
+++ b/packages/flutter_tools/lib/src/application_package.dart
@@ -31,6 +31,7 @@
 
   String get displayName => name;
 
+  @override
   String toString() => displayName;
 }
 
@@ -95,6 +96,7 @@
     return new IOSApp(iosProjectDir: projectDir, iosProjectBundleId: value);
   }
 
+  @override
   String get displayName => id;
 }
 
diff --git a/packages/flutter_tools/lib/src/base/logger.dart b/packages/flutter_tools/lib/src/base/logger.dart
index 46a3791..7f2842c 100644
--- a/packages/flutter_tools/lib/src/base/logger.dart
+++ b/packages/flutter_tools/lib/src/base/logger.dart
@@ -26,22 +26,28 @@
 }
 
 class StdoutLogger implements Logger {
+  @override
   bool get isVerbose => false;
 
+  @override
   void printError(String message, [StackTrace stackTrace]) {
     stderr.writeln(message);
     if (stackTrace != null)
       stderr.writeln(stackTrace);
   }
 
+  @override
   void printStatus(String message) => print(message);
 
+  @override
   void printTrace(String message) { }
 
+  @override
   void flush() { }
 }
 
 class BufferLogger implements Logger {
+  @override
   bool get isVerbose => false;
 
   StringBuffer _error = new StringBuffer();
@@ -52,33 +58,44 @@
   String get statusText => _status.toString();
   String get traceText => _trace.toString();
 
+  @override
   void printError(String message, [StackTrace stackTrace]) => _error.writeln(message);
+
+  @override
   void printStatus(String message) => _status.writeln(message);
+
+  @override
   void printTrace(String message) => _trace.writeln(message);
 
+  @override
   void flush() { }
 }
 
 class VerboseLogger implements Logger {
   _LogMessage lastMessage;
 
+  @override
   bool get isVerbose => true;
 
+  @override
   void printError(String message, [StackTrace stackTrace]) {
     _emit();
     lastMessage = new _LogMessage(_LogType.error, message, stackTrace);
   }
 
+  @override
   void printStatus(String message) {
     _emit();
     lastMessage = new _LogMessage(_LogType.status, message);
   }
 
+  @override
   void printTrace(String message) {
     _emit();
     lastMessage = new _LogMessage(_LogType.trace, message);
   }
 
+  @override
   void flush() => _emit();
 
   void _emit() {
diff --git a/packages/flutter_tools/lib/src/base/os.dart b/packages/flutter_tools/lib/src/base/os.dart
index 973b421..99be5a8 100644
--- a/packages/flutter_tools/lib/src/base/os.dart
+++ b/packages/flutter_tools/lib/src/base/os.dart
@@ -38,12 +38,14 @@
 class _PosixUtils extends OperatingSystemUtils {
   _PosixUtils() : super._private();
 
+  @override
   ProcessResult makeExecutable(File file) {
     return Process.runSync('chmod', ['u+x', file.path]);
   }
 
   /// Return the path (with symlinks resolved) to the given executable, or `null`
   /// if `which` was not able to locate the binary.
+  @override
   File which(String execName) {
     ProcessResult result = Process.runSync('which', <String>[execName]);
     if (result.exitCode != 0)
@@ -57,10 +59,12 @@
   _WindowsUtils() : super._private();
 
   // This is a no-op.
+  @override
   ProcessResult makeExecutable(File file) {
     return new ProcessResult(0, 0, null, null);
   }
 
+  @override
   File which(String execName) {
     throw new UnimplementedError('_WindowsUtils.which');
   }
diff --git a/packages/flutter_tools/lib/src/base/process.dart b/packages/flutter_tools/lib/src/base/process.dart
index db37581..25b8bb3 100644
--- a/packages/flutter_tools/lib/src/base/process.dart
+++ b/packages/flutter_tools/lib/src/base/process.dart
@@ -136,8 +136,12 @@
 }
 
 class ProcessExit implements Exception {
-  final int exitCode;
   ProcessExit(this.exitCode);
+
+  final int exitCode;
+
   String get message => 'ProcessExit: $exitCode';
+
+  @override
   String toString() => message;
 }
diff --git a/packages/flutter_tools/lib/src/commands/analyze.dart b/packages/flutter_tools/lib/src/commands/analyze.dart
index f1326c3..b0a2ab3 100644
--- a/packages/flutter_tools/lib/src/commands/analyze.dart
+++ b/packages/flutter_tools/lib/src/commands/analyze.dart
@@ -118,8 +118,13 @@
     argParser.addFlag('watch', help: 'Run analysis continuously, watching the filesystem for changes.', negatable: false);
   }
 
+  @override
   String get name => 'analyze';
+
+  @override
   String get description => 'Analyze the project\'s Dart code.';
+
+  @override
   bool get requiresProjectRoot => false;
 
   bool get isFlutterRepo {
@@ -760,6 +765,7 @@
   int get startColumn => json['location']['startColumn'];
   int get offset => json['location']['offset'];
 
+  @override
   int compareTo(AnalysisError other) {
     // Sort in order of file path, error location, severity, and message.
     if (file != other.file)
@@ -775,6 +781,7 @@
     return message.compareTo(other.message);
   }
 
+  @override
   String toString() {
     String relativePath = path.relative(file);
     return '${severity.toLowerCase().padLeft(7)} • $message • $relativePath:$startLine:$startColumn';
diff --git a/packages/flutter_tools/lib/src/commands/apk.dart b/packages/flutter_tools/lib/src/commands/apk.dart
index d6dc01b..6b13c7e 100644
--- a/packages/flutter_tools/lib/src/commands/apk.dart
+++ b/packages/flutter_tools/lib/src/commands/apk.dart
@@ -136,7 +136,10 @@
 }
 
 class ApkCommand extends FlutterCommand {
+  @override
   final String name = 'apk';
+
+  @override
   final String description = 'Build an Android APK package.';
 
   ApkCommand() {
diff --git a/packages/flutter_tools/lib/src/commands/build.dart b/packages/flutter_tools/lib/src/commands/build.dart
index 04d80ce..54a5447 100644
--- a/packages/flutter_tools/lib/src/commands/build.dart
+++ b/packages/flutter_tools/lib/src/commands/build.dart
@@ -11,7 +11,10 @@
 import '../toolchain.dart';
 
 class BuildCommand extends FlutterCommand {
+  @override
   final String name = 'build';
+
+  @override
   final String description = 'Package your Flutter app into an FLX.';
 
   BuildCommand() {
@@ -42,6 +45,7 @@
     return await super.run();
   }
 
+  @override
   Future<int> runInProject() async {
     String compilerPath = argResults['compiler'];
 
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 4024580..0610177 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -16,8 +16,13 @@
 import '../template.dart';
 
 class CreateCommand extends Command {
+  @override
   final String name = 'create';
+
+  @override
   final String description = 'Create a new Flutter project.';
+
+  @override
   final List<String> aliases = <String>['init'];
 
   CreateCommand() {
@@ -38,6 +43,7 @@
     );
   }
 
+  @override
   String get invocation => "${runner.executableName} $name <output directory>";
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart
index e2a477a..4f205e4 100644
--- a/packages/flutter_tools/lib/src/commands/daemon.dart
+++ b/packages/flutter_tools/lib/src/commands/daemon.dart
@@ -28,14 +28,20 @@
 class DaemonCommand extends FlutterCommand {
   DaemonCommand({ bool hideCommand: false }) : _hideCommand = hideCommand;
 
+  @override
   final String name = 'daemon';
+
+  @override
   final String description = 'Run a persistent, JSON-RPC based server to communicate with devices.';
   final bool _hideCommand;
 
+  @override
   bool get requiresProjectRoot => false;
 
+  @override
   bool get hidden => _hideCommand;
 
+  @override
   Future<int> runInProject() {
     printStatus('Starting device daemon...');
 
@@ -155,6 +161,7 @@
 
   FlutterCommand get command => daemon.daemonCommand;
 
+  @override
   String toString() => name;
 
   void handleCommand(String command, dynamic id, dynamic args) {
@@ -220,6 +227,7 @@
     return new Future<Null>.value();
   }
 
+  @override
   void dispose() {
     _subscription?.cancel();
   }
@@ -371,6 +379,7 @@
     return new Future<Null>.value();
   }
 
+  @override
   void dispose() {
     for (PollingDeviceDiscovery discoverer in _discoverers) {
       discoverer.dispose();
@@ -410,14 +419,17 @@
 
   Stream<LogMessage> get onMessage => _messageController.stream;
 
+  @override
   void printError(String message, [StackTrace stackTrace]) {
     _messageController.add(new LogMessage('error', message, stackTrace));
   }
 
+  @override
   void printStatus(String message) {
     _messageController.add(new LogMessage('status', message));
   }
 
+  @override
   void printTrace(String message) {
     // This is a lot of traffic to send over the wire.
   }
diff --git a/packages/flutter_tools/lib/src/commands/devices.dart b/packages/flutter_tools/lib/src/commands/devices.dart
index 1f3b071..dd94309 100644
--- a/packages/flutter_tools/lib/src/commands/devices.dart
+++ b/packages/flutter_tools/lib/src/commands/devices.dart
@@ -10,12 +10,19 @@
 import '../runner/flutter_command.dart';
 
 class DevicesCommand extends FlutterCommand {
+  @override
   final String name = 'devices';
+
+  @override
   final String description = 'List all connected devices.';
+
+  @override
   final List<String> aliases = <String>['list'];
 
+  @override
   bool get requiresProjectRoot => false;
 
+  @override
   Future<int> runInProject() async {
     if (!doctor.canListAnything) {
       printError("Unable to locate a development device; please run 'flutter doctor' for "
diff --git a/packages/flutter_tools/lib/src/commands/doctor.dart b/packages/flutter_tools/lib/src/commands/doctor.dart
index dd30c60..188024d 100644
--- a/packages/flutter_tools/lib/src/commands/doctor.dart
+++ b/packages/flutter_tools/lib/src/commands/doctor.dart
@@ -10,11 +10,16 @@
 import '../runner/version.dart';
 
 class DoctorCommand extends FlutterCommand {
+  @override
   final String name = 'doctor';
+
+  @override
   final String description = 'Show information about the installed tooling.';
 
+  @override
   bool get requiresProjectRoot => false;
 
+  @override
   Future<int> runInProject() async {
     // general info
     String flutterRoot = ArtifactStore.flutterRoot;
diff --git a/packages/flutter_tools/lib/src/commands/drive.dart b/packages/flutter_tools/lib/src/commands/drive.dart
index 5cbbe6f..72e4e70 100644
--- a/packages/flutter_tools/lib/src/commands/drive.dart
+++ b/packages/flutter_tools/lib/src/commands/drive.dart
@@ -64,8 +64,13 @@
         help: 'Listen to the given port for a debug connection.');
   }
 
+  @override
   final String name = 'drive';
+
+  @override
   final String description = 'Runs Flutter Driver tests for the current project.';
+
+  @override
   final List<String> aliases = <String>['driver'];
 
   Device _device;
diff --git a/packages/flutter_tools/lib/src/commands/install.dart b/packages/flutter_tools/lib/src/commands/install.dart
index a801b22..3e68041 100644
--- a/packages/flutter_tools/lib/src/commands/install.dart
+++ b/packages/flutter_tools/lib/src/commands/install.dart
@@ -10,9 +10,13 @@
 import '../runner/flutter_command.dart';
 
 class InstallCommand extends FlutterCommand {
+  @override
   final String name = 'install';
+
+  @override
   final String description = 'Install a Flutter app on an attached device.';
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/listen.dart b/packages/flutter_tools/lib/src/commands/listen.dart
index 14cc781..1550a08 100644
--- a/packages/flutter_tools/lib/src/commands/listen.dart
+++ b/packages/flutter_tools/lib/src/commands/listen.dart
@@ -10,9 +10,14 @@
 import 'run.dart';
 
 class ListenCommand extends RunCommandBase {
+  @override
   final String name = 'listen';
+
+  @override
   final String description =
     'Listen for changes to files and reload the running app (Android only).';
+
+  @override
   final String usageFooter =
     'By default, only listens to "./" and "./lib/". To listen to additional directories, list them on\n'
     'the command line.';
@@ -22,8 +27,10 @@
 
   ListenCommand({ this.singleRun: false });
 
+  @override
   bool get androidOnly => true;
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/logs.dart b/packages/flutter_tools/lib/src/commands/logs.dart
index 9170c12..5190685 100644
--- a/packages/flutter_tools/lib/src/commands/logs.dart
+++ b/packages/flutter_tools/lib/src/commands/logs.dart
@@ -9,7 +9,10 @@
 import '../runner/flutter_command.dart';
 
 class LogsCommand extends FlutterCommand {
+  @override
   final String name = 'logs';
+
+  @override
   final String description = 'Show log output for running Flutter apps.';
 
   LogsCommand() {
@@ -20,10 +23,13 @@
     );
   }
 
+  @override
   bool get requiresProjectRoot => false;
 
+  @override
   bool get requiresDevice => true;
 
+  @override
   Future<int> runInProject() async {
     Device device = deviceForCommand;
 
diff --git a/packages/flutter_tools/lib/src/commands/refresh.dart b/packages/flutter_tools/lib/src/commands/refresh.dart
index 7f7ced0..1c4b54b 100644
--- a/packages/flutter_tools/lib/src/commands/refresh.dart
+++ b/packages/flutter_tools/lib/src/commands/refresh.dart
@@ -12,15 +12,20 @@
 import '../runner/flutter_command.dart';
 
 class RefreshCommand extends FlutterCommand {
+  @override
   final String name = 'refresh';
+
+  @override
   final String description = 'Build and deploy the Dart code in a Flutter app (Android only).';
 
   RefreshCommand() {
     addTargetOption();
   }
 
+  @override
   bool get androidOnly => true;
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart
index 09f627e..eefe535 100644
--- a/packages/flutter_tools/lib/src/commands/run.dart
+++ b/packages/flutter_tools/lib/src/commands/run.dart
@@ -53,8 +53,13 @@
 }
 
 class RunCommand extends RunCommandBase {
+  @override
   final String name = 'run';
+
+  @override
   final String description = 'Run your Flutter app on an attached device.';
+
+  @override
   final List<String> aliases = <String>['start'];
 
   RunCommand() {
@@ -76,6 +81,7 @@
         help: 'Listen to the given port for a debug connection.');
   }
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/run_mojo.dart b/packages/flutter_tools/lib/src/commands/run_mojo.dart
index 3f9bde4..d7e1642 100644
--- a/packages/flutter_tools/lib/src/commands/run_mojo.dart
+++ b/packages/flutter_tools/lib/src/commands/run_mojo.dart
@@ -18,7 +18,10 @@
 const String _kDefaultBundlePath = 'build/app.flx';
 
 class RunMojoCommand extends FlutterCommand {
+  @override
   final String name = 'run_mojo';
+
+  @override
   final String description = 'Run a Flutter app in mojo (from github.com/domokit/mojo).';
   final bool _hideCommand;
 
@@ -37,7 +40,10 @@
     argParser.addOption('devtools-path', help: 'Path to mojo devtools\' mojo_run command.');
   }
 
+  @override
   bool get requiresProjectRoot => false;
+
+  @override
   bool get hidden => _hideCommand;
 
   // TODO(abarth): Why not use path.absolute?
diff --git a/packages/flutter_tools/lib/src/commands/stop.dart b/packages/flutter_tools/lib/src/commands/stop.dart
index fd38f38..9a4ad86 100644
--- a/packages/flutter_tools/lib/src/commands/stop.dart
+++ b/packages/flutter_tools/lib/src/commands/stop.dart
@@ -10,9 +10,13 @@
 import '../runner/flutter_command.dart';
 
 class StopCommand extends FlutterCommand {
+  @override
   final String name = 'stop';
+
+  @override
   final String description = 'Stop your Flutter app on an attached device.';
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/test.dart b/packages/flutter_tools/lib/src/commands/test.dart
index c50cece..50d1e8e 100644
--- a/packages/flutter_tools/lib/src/commands/test.dart
+++ b/packages/flutter_tools/lib/src/commands/test.dart
@@ -23,8 +23,13 @@
     );
   }
 
+  @override
   String get name => 'test';
+
+  @override
   String get description => 'Run Flutter unit tests for the current project (Linux only).';
+
+  @override
   bool get requiresProjectRoot => false;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/trace.dart b/packages/flutter_tools/lib/src/commands/trace.dart
index 4387a60..fe6a54f 100644
--- a/packages/flutter_tools/lib/src/commands/trace.dart
+++ b/packages/flutter_tools/lib/src/commands/trace.dart
@@ -10,8 +10,13 @@
 import '../runner/flutter_command.dart';
 
 class TraceCommand extends FlutterCommand {
+  @override
   final String name = 'trace';
+
+  @override
   final String description = 'Start and stop tracing for a running Flutter app (Android only).';
+
+  @override
   final String usageFooter =
     '\`trace\` called with no arguments will automatically start tracing, delay a set amount of\n'
     'time (controlled by --duration), and stop tracing. To explicitly control tracing, call trace\n'
@@ -25,8 +30,10 @@
         defaultsTo: '10', abbr: 'd', help: 'Duration in seconds to trace.');
   }
 
+  @override
   bool get androidOnly => true;
 
+  @override
   bool get requiresDevice => true;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index e89c3da..4f08273 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -32,12 +32,17 @@
     );
   }
 
+  @override
   final String name = 'update-packages';
+
+  @override
   final String description = 'Update the packages inside the Flutter repo.';
 
+  @override
   bool get hidden => _hideCommand;
   final bool _hideCommand;
 
+  @override
   bool get requiresProjectRoot => false;
 
   @override
diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart
index fbe67ee..a4b327f 100644
--- a/packages/flutter_tools/lib/src/commands/upgrade.dart
+++ b/packages/flutter_tools/lib/src/commands/upgrade.dart
@@ -11,7 +11,10 @@
 import '../runner/version.dart';
 
 class UpgradeCommand extends FlutterCommand {
+  @override
   final String name = 'upgrade';
+
+  @override
   final String description = 'Upgrade your copy of Flutter.';
 
   @override
diff --git a/packages/flutter_tools/lib/src/device.dart b/packages/flutter_tools/lib/src/device.dart
index feacb2b..1764dc1 100644
--- a/packages/flutter_tools/lib/src/device.dart
+++ b/packages/flutter_tools/lib/src/device.dart
@@ -111,6 +111,7 @@
     _timer = null;
   }
 
+  @override
   List<Device> get devices {
     if (_items == null)
       _items = new ItemListNotifier<Device>.from(pollingGetDevices());
@@ -131,6 +132,7 @@
 
   void dispose() => stopPolling();
 
+  @override
   String toString() => '$name device discovery';
 }
 
@@ -189,8 +191,10 @@
   /// Stop an app package on the current device.
   Future<bool> stopApp(ApplicationPackage app);
 
+  @override
   int get hashCode => id.hashCode;
 
+  @override
   bool operator ==(dynamic other) {
     if (identical(this, other))
       return true;
@@ -199,6 +203,7 @@
     return id == other.id;
   }
 
+  @override
   String toString() => name;
 
   static void printDevices(List<Device> devices) {
@@ -225,6 +230,7 @@
   final int hostPort;
   final int devicePort;
 
+  @override
   String toString() => 'ForwardedPort HOST:$hostPort to DEVICE:$devicePort';
 }
 
@@ -266,8 +272,12 @@
   /// Completes when the log is finished.
   Future<int> get finished;
 
+  @override
   int get hashCode;
+
+  @override
   bool operator ==(dynamic other);
 
+  @override
   String toString() => name;
 }
diff --git a/packages/flutter_tools/lib/src/doctor.dart b/packages/flutter_tools/lib/src/doctor.dart
index cbd9b03..41c75cb 100644
--- a/packages/flutter_tools/lib/src/doctor.dart
+++ b/packages/flutter_tools/lib/src/doctor.dart
@@ -228,8 +228,10 @@
       : path.join(env['HOME'], '.atom');
   }
 
+  @override
   String get label => 'Atom development environment';
 
+  @override
   ValidationResult validate() {
     Validator atomValidator = new Validator(
       label,
@@ -263,5 +265,6 @@
     return atomValidator.validate();
   }
 
+  @override
   void diagnose() => validate().print();
 }
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 6f91575..c7f84d3 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -25,7 +25,10 @@
 class IOSDevices extends PollingDeviceDiscovery {
   IOSDevices() : super('IOSDevices');
 
+  @override
   bool get supportsPlatform => Platform.isMacOS;
+
+  @override
   List<Device> pollingGetDevices() => IOSDevice.getAttachedDevices();
 }
 
@@ -62,14 +65,17 @@
   String _pusherPath;
   String get pusherPath => _pusherPath;
 
+  @override
   final String name;
 
   _IOSDeviceLogReader _logReader;
 
   _IOSDevicePortForwarder _portForwarder;
 
+  @override
   bool get isLocalEmulator => false;
 
+  @override
   bool get supportsStartPaused => false;
 
   static List<IOSDevice> getAttachedDevices([IOSDevice mockIOS]) {
@@ -226,6 +232,7 @@
   @override
   TargetPlatform get platform => TargetPlatform.ios_arm;
 
+  @override
   DeviceLogReader get logReader {
     if (_logReader == null)
       _logReader = new _IOSDeviceLogReader(this);
@@ -233,6 +240,7 @@
     return _logReader;
   }
 
+  @override
   DevicePortForwarder get portForwarder {
     if (_portForwarder == null)
       _portForwarder = new _IOSDevicePortForwarder(this);
@@ -240,6 +248,7 @@
     return _portForwarder;
   }
 
+  @override
   void clearLogs() {
   }
 }
@@ -256,16 +265,21 @@
   StreamSubscription<String> _stdoutSubscription;
   StreamSubscription<String> _stderrSubscription;
 
+  @override
   Stream<String> get lines => _linesStreamController.stream;
 
+  @override
   String get name => device.name;
 
+  @override
   bool get isReading => _process != null;
 
+  @override
   Future<int> get finished {
     return _process != null ? _process.exitCode : new Future<int>.value(0);
   }
 
+  @override
   Future<Null> start() async {
     if (_process != null) {
       throw new StateError(
@@ -282,6 +296,7 @@
     _process.exitCode.then(_onExit);
   }
 
+  @override
   Future<Null> stop() async {
     if (_process == null) {
       throw new StateError(
@@ -313,8 +328,10 @@
     _linesStreamController.add(line);
   }
 
+  @override
   int get hashCode => name.hashCode;
 
+  @override
   bool operator ==(dynamic other) {
     if (identical(this, other))
       return true;
@@ -329,12 +346,14 @@
 
   final IOSDevice device;
 
+  @override
   List<ForwardedPort> get forwardedPorts {
     final List<ForwardedPort> ports = <ForwardedPort>[];
     // TODO(chinmaygarde): Implement.
     return ports;
   }
 
+  @override
   Future<int> forward(int devicePort, {int hostPort: null}) async {
     if ((hostPort == null) || (hostPort == 0)) {
       // Auto select host port.
@@ -344,6 +363,7 @@
     return hostPort;
   }
 
+  @override
   Future<Null> unforward(ForwardedPort forwardedPort) async {
     // TODO(chinmaygarde): Implement.
   }
diff --git a/packages/flutter_tools/lib/src/ios/ios_workflow.dart b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
index 67eda8d..10b1447 100644
--- a/packages/flutter_tools/lib/src/ios/ios_workflow.dart
+++ b/packages/flutter_tools/lib/src/ios/ios_workflow.dart
@@ -9,17 +9,22 @@
 import 'mac.dart';
 
 class IOSWorkflow extends Workflow {
+  @override
   String get label => 'iOS toolchain';
 
+  @override
   bool get appliesToHostPlatform => Platform.isMacOS;
 
   // We need xcode (+simctl) to list simulator devices, and idevice_id to list real devices.
+  @override
   bool get canListDevices => XCode.instance.isInstalledAndMeetsVersionCheck;
 
   // We need xcode to launch simulator devices, and ideviceinstaller and ios-deploy
   // for real devices.
+  @override
   bool get canLaunchDevices => XCode.instance.isInstalledAndMeetsVersionCheck;
 
+  @override
   ValidationResult validate() {
     Validator iosValidator = new Validator(
       label,
@@ -101,6 +106,7 @@
     return iosValidator.validate();
   }
 
+  @override
   void diagnose() => validate().print();
 
   bool get hasIdeviceId => exitsHappy(<String>['idevice_id', '-h']);
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 7cf761d..9623642 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -27,7 +27,10 @@
 class IOSSimulators extends PollingDeviceDiscovery {
   IOSSimulators() : super('IOSSimulators');
 
+  @override
   bool get supportsPlatform => Platform.isMacOS;
+
+  @override
   List<Device> pollingGetDevices() => IOSSimulatorUtils.instance.getAttachedDevices();
 }
 
@@ -314,8 +317,10 @@
 class IOSSimulator extends Device {
   IOSSimulator(String id, { this.name }) : super(id);
 
+  @override
   final String name;
 
+  @override
   bool get isLocalEmulator => true;
 
   _IOSSimulatorLogReader _logReader;
@@ -536,6 +541,7 @@
   @override
   TargetPlatform get platform => TargetPlatform.ios_x64;
 
+  @override
   DeviceLogReader get logReader {
     if (_logReader == null)
       _logReader = new _IOSSimulatorLogReader(this);
@@ -543,6 +549,7 @@
     return _logReader;
   }
 
+  @override
   DevicePortForwarder get portForwarder {
     if (_portForwarder == null)
       _portForwarder = new _IOSSimulatorDevicePortForwarder(this);
@@ -550,6 +557,7 @@
     return _portForwarder;
   }
 
+  @override
   void clearLogs() {
     File logFile = new File(logFilePath);
     if (logFile.existsSync()) {
@@ -585,16 +593,21 @@
   StreamSubscription<String> _systemStdoutSubscription;
   StreamSubscription<String> _systemStderrSubscription;
 
+  @override
   Stream<String> get lines => _linesStreamController.stream;
 
+  @override
   String get name => device.name;
 
+  @override
   bool get isReading => (_deviceProcess != null) && (_systemProcess != null);
 
+  @override
   Future<int> get finished {
     return (_deviceProcess != null) ? _deviceProcess.exitCode : new Future<int>.value(0);
   }
 
+  @override
   Future<Null> start() async {
     if (isReading) {
       throw new StateError(
@@ -630,6 +643,7 @@
     _systemProcess.exitCode.then(_onSystemExit);
   }
 
+  @override
   Future<Null> stop() async {
     if (!isReading) {
       throw new StateError(
@@ -727,8 +741,10 @@
     _linesStreamController.add(filteredLine);
   }
 
+  @override
   int get hashCode => device.logFilePath.hashCode;
 
+  @override
   bool operator ==(dynamic other) {
     if (identical(this, other))
       return true;
@@ -789,10 +805,12 @@
 
   final List<ForwardedPort> _ports = <ForwardedPort>[];
 
+  @override
   List<ForwardedPort> get forwardedPorts {
     return _ports;
   }
 
+  @override
   Future<int> forward(int devicePort, {int hostPort: null}) async {
     if ((hostPort == null) || (hostPort == 0)) {
       hostPort = devicePort;
@@ -802,6 +820,7 @@
     return hostPort;
   }
 
+  @override
   Future<Null> unforward(ForwardedPort forwardedPort) async {
     _ports.remove(forwardedPort);
   }
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart
index b763f8e..d20c7b2 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart
@@ -18,6 +18,7 @@
 typedef bool Validator();
 
 abstract class FlutterCommand extends Command {
+  @override
   FlutterCommandRunner get runner => super.runner;
 
   /// Whether this command needs to be run from the root of a project.
@@ -43,6 +44,7 @@
     applicationPackages ??= await ApplicationPackageStore.forConfigs(buildConfigurations);
   }
 
+  @override
   Future<int> run() {
     Stopwatch stopwatch = new Stopwatch()..start();
 
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
index b89c9ec..630f01d 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -124,6 +124,7 @@
         defaultsTo: 'out/ios_sim_Release/');
   }
 
+  @override
   String get usageFooter {
     return 'Run "flutter -h -v" for verbose help output, including less commonly used options.\n'
            '\n'
@@ -165,6 +166,7 @@
     return '.';
   }
 
+  @override
   Future<dynamic> run(Iterable<String> args) {
     return super.run(args).then((dynamic result) {
       logger.flush();
@@ -172,6 +174,7 @@
     });
   }
 
+  @override
   Future<int> runCommand(ArgResults globalResults) {
     _globalResults = globalResults;
 
diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart
index 61cbba0..f2db417 100644
--- a/packages/flutter_tools/lib/src/test/flutter_platform.dart
+++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart
@@ -55,6 +55,7 @@
 }
 
 class FlutterPlatform extends PlatformPlugin {
+  @override
   StreamChannel<String> loadChannel(String mainPath, TestPlatform platform) {
     return StreamChannelCompleter.fromFuture(_startTest(mainPath));
   }
diff --git a/packages/flutter_tools/lib/src/zip.dart b/packages/flutter_tools/lib/src/zip.dart
index fb6c28e..f607ed9 100644
--- a/packages/flutter_tools/lib/src/zip.dart
+++ b/packages/flutter_tools/lib/src/zip.dart
@@ -48,6 +48,7 @@
 class _ArchiveZipBuilder extends ZipBuilder {
   _ArchiveZipBuilder() : super._();
 
+  @override
   void createZip(File outFile, Directory zipBuildDir) {
     Archive archive = new Archive();
 
@@ -69,6 +70,7 @@
 class _ZipToolBuilder extends ZipBuilder {
   _ZipToolBuilder() : super._();
 
+  @override
   void createZip(File outFile, Directory zipBuildDir) {
     if (outFile.existsSync())
       outFile.deleteSync();
diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart
index db5283c..c06c0b7 100644
--- a/packages/flutter_tools/test/src/context.dart
+++ b/packages/flutter_tools/test/src/context.dart
@@ -69,16 +69,22 @@
 class MockDeviceManager implements DeviceManager {
   List<Device> devices = <Device>[];
 
+  @override
   String specifiedDeviceId;
+
+  @override
   bool get hasSpecifiedDeviceId => specifiedDeviceId != null;
 
+  @override
   Future<List<Device>> getAllConnectedDevices() => new Future<List<Device>>.value(devices);
 
+  @override
   Future<Device> getDeviceById(String deviceId) {
     Device device = devices.firstWhere((Device device) => device.id == deviceId, orElse: () => null);
     return new Future<Device>.value(device);
   }
 
+  @override
   Future<List<Device>> getDevices() async {
     if (specifiedDeviceId == null) {
       return getAllConnectedDevices();
@@ -93,6 +99,7 @@
 
 class MockDoctor extends Doctor {
   // True for testing.
+  @override
   bool get canLaunchAnything => true;
 }
 
diff --git a/packages/flutter_tools/test/src/mocks.dart b/packages/flutter_tools/test/src/mocks.dart
index 52db59e..dba59e9 100644
--- a/packages/flutter_tools/test/src/mocks.dart
+++ b/packages/flutter_tools/test/src/mocks.dart
@@ -36,21 +36,31 @@
 }
 
 class MockAndroidDevice extends Mock implements AndroidDevice {
+  @override
   TargetPlatform get platform => TargetPlatform.android_arm;
+
+  @override
   bool isSupported() => true;
 }
 
 class MockIOSDevice extends Mock implements IOSDevice {
+  @override
   TargetPlatform get platform => TargetPlatform.ios_arm;
+
+  @override
   bool isSupported() => true;
 }
 
 class MockIOSSimulator extends Mock implements IOSSimulator {
+  @override
   TargetPlatform get platform => TargetPlatform.ios_x64;
+
+  @override
   bool isSupported() => true;
 }
 
 class MockDeviceLogReader extends DeviceLogReader {
+  @override
   String get name => 'MockLogReader';
 
   final StreamController<String> _linesStreamController =
@@ -58,6 +68,7 @@
 
   final Completer<int> _finishedCompleter = new Completer<int>();
 
+  @override
   Stream<String> get lines => _linesStreamController.stream;
 
   void addLine(String line) {
@@ -66,19 +77,23 @@
 
   bool _started = false;
 
+  @override
   Future<Null> start() async {
     assert(!_started);
     _started = true;
   }
 
+  @override
   bool get isReading => _started;
 
+  @override
   Future<Null> stop() {
     assert(_started);
     _started = false;
     return new Future<Null>.value();
   }
 
+  @override
   Future<int> get finished => _finishedCompleter.future;
 }