Version 2.12.0-259.16.beta

* Cherry-pick 410f242ebc1efd81cf800ada54f5311e6f895c58 to beta
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index b194847..a8f9780 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -10,6 +10,7 @@
 import 'package:args/command_runner.dart';
 import 'package:cli_util/cli_logging.dart';
 import 'package:dart_style/src/cli/format_command.dart';
+import 'package:meta/meta.dart';
 import 'package:nnbd_migration/migration_cli.dart';
 import 'package:pedantic/pedantic.dart';
 import 'package:pub/pub.dart';
@@ -112,22 +113,30 @@
   String get invocation =>
       'dart [<vm-flags>] <command|dart-file> [<arguments>]';
 
+  @visibleForTesting
+  Analytics get analytics => _analytics;
+  Analytics _analytics;
+
   @override
   Future<int> runCommand(ArgResults topLevelResults) async {
     final stopwatch = Stopwatch()..start();
     // The Analytics instance used to report information back to Google Analytics;
     // see lib/src/analytics.dart.
-    final analytics = createAnalyticsInstance(!topLevelResults['analytics']);
+    _analytics = createAnalyticsInstance(
+      topLevelResults.wasParsed('analytics')
+          ? !topLevelResults['analytics']
+          : false,
+    );
 
     // If we have not printed the analyticsNoticeOnFirstRunMessage to stdout,
     // the user is on a terminal, and the machine is not a bot, then print the
     // disclosure and set analytics.disclosureShownOnTerminal to true.
     if (analytics is DartdevAnalytics &&
-        !analytics.disclosureShownOnTerminal &&
+        !(analytics as DartdevAnalytics).disclosureShownOnTerminal &&
         io.stdout.hasTerminal &&
         !isBot()) {
       print(analyticsNoticeOnFirstRunMessage);
-      analytics.disclosureShownOnTerminal = true;
+      (analytics as DartdevAnalytics).disclosureShownOnTerminal = true;
     }
 
     // When `--disable-analytics` or `--enable-analytics` are called we perform
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index 6158b0d..0254384 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -5,6 +5,7 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:dartdev/dartdev.dart';
 import 'package:dartdev/src/analytics.dart';
 import 'package:test/test.dart';
 
@@ -20,6 +21,24 @@
 void main() {
   group('DisabledAnalytics', disabledAnalyticsObject);
 
+  group('VM -> CLI --analytics flag smoke test:', () {
+    final command = DartdevRunner(['--analytics']);
+    test('--analytics', () {
+      command.runCommand(command.parse(['--analytics']));
+      expect(command.analytics is! DisabledAnalytics, true);
+    });
+
+    test('--no-analytics', () {
+      command.runCommand(command.parse(['--no-analytics']));
+      expect(command.analytics is DisabledAnalytics, true);
+    });
+
+    test('No flag', () {
+      command.runCommand(command.parse([]));
+      expect(command.analytics is! DisabledAnalytics, true);
+    });
+  });
+
   test('Analytics control smoke test', () {
     final p = project(logAnalytics: true);
     var result = p.runSync(['--disable-analytics']);
diff --git a/tools/VERSION b/tools/VERSION
index e0c8ab4..b9cbea1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 12
 PATCH 0
 PRERELEASE 259
-PRERELEASE_PATCH 15
\ No newline at end of file
+PRERELEASE_PATCH 16
\ No newline at end of file