diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 24ce857..7e58d34 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -74,12 +74,6 @@
       "languageVersion": "2.8"
     },
     {
-      "name": "analysis_tool",
-      "rootUri": "../pkg/analysis_tool",
-      "packageUri": "lib/",
-      "languageVersion": "2.1"
-    },
-    {
       "name": "analyzer",
       "rootUri": "../pkg/analyzer",
       "packageUri": "lib/",
@@ -98,6 +92,12 @@
       "languageVersion": "2.3"
     },
     {
+      "name": "analyzer_utilities",
+      "rootUri": "../pkg/analyzer_utilities",
+      "packageUri": "lib/",
+      "languageVersion": "2.1"
+    },
+    {
       "name": "args",
       "rootUri": "../third_party/pkg/args",
       "packageUri": "lib/",
diff --git a/.packages b/.packages
index 22dab41..f264745 100644
--- a/.packages
+++ b/.packages
@@ -10,10 +10,10 @@
 _js_interop_checks:pkg/_js_interop_checks/lib
 analysis_server:pkg/analysis_server/lib
 analysis_server_client:pkg/analysis_server_client/lib
-analysis_tool:pkg/analysis_tool/lib
 analyzer:pkg/analyzer/lib
 analyzer_cli:pkg/analyzer_cli/lib
 analyzer_plugin:pkg/analyzer_plugin/lib
+analyzer_utilities:pkg/analyzer_utilities/lib
 args:third_party/pkg/args/lib
 async:third_party/pkg/async/lib
 async_helper:pkg/async_helper/lib
diff --git a/pkg/analysis_server/pubspec.yaml b/pkg/analysis_server/pubspec.yaml
index da3e6a6..2b64203 100644
--- a/pkg/analysis_server/pubspec.yaml
+++ b/pkg/analysis_server/pubspec.yaml
@@ -30,7 +30,7 @@
   yaml: any
 
 dev_dependencies:
-  analysis_tool: any
+  analyzer_utilities: any
   http: any
   logging: any
   matcher: any
diff --git a/pkg/analysis_server/test/src/utilities/mock_packages.dart b/pkg/analysis_server/test/src/utilities/mock_packages.dart
index 1a34e4a..c60002d 100644
--- a/pkg/analysis_server/test/src/utilities/mock_packages.dart
+++ b/pkg/analysis_server/test/src/utilities/mock_packages.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
 
 /// Helper for copying files from "tests/mock_packages" to memory file system.
 class MockPackages {
diff --git a/pkg/analysis_server/test/verify_sorted_test.dart b/pkg/analysis_server/test/verify_sorted_test.dart
index b59ef2b..60fda8d 100644
--- a/pkg/analysis_server/test/verify_sorted_test.dart
+++ b/pkg/analysis_server/test/verify_sorted_test.dart
@@ -5,12 +5,12 @@
 import 'dart:io';
 
 import 'package:analysis_server/src/services/correction/sort_members.dart';
-import 'package:analysis_tool/package_root.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart';
 import 'package:meta/meta.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/analysis_server/test/verify_tests_test.dart b/pkg/analysis_server/test/verify_tests_test.dart
index 73aa656..4b07a76 100644
--- a/pkg/analysis_server/test/verify_tests_test.dart
+++ b/pkg/analysis_server/test/verify_tests_test.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/verify_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/verify_tests.dart';
 
 void main() {
   var provider = PhysicalResourceProvider.INSTANCE;
diff --git a/pkg/analysis_server/tool/completion_metrics/relevance_table_generator.dart b/pkg/analysis_server/tool/completion_metrics/relevance_table_generator.dart
index 74ef351..21230de 100644
--- a/pkg/analysis_server/tool/completion_metrics/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/completion_metrics/relevance_table_generator.dart
@@ -8,8 +8,6 @@
 import 'package:analysis_server/src/protocol_server.dart' show ElementKind;
 import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
 import 'package:analysis_server/src/utilities/flutter.dart';
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/tools.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -24,6 +22,8 @@
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/tools.dart';
 import 'package:args/args.dart';
 import 'package:meta/meta.dart';
 
diff --git a/pkg/analysis_server/tool/spec/check_all_test.dart b/pkg/analysis_server/tool/spec/check_all_test.dart
index de4be12..3be8ed7 100644
--- a/pkg/analysis_server/tool/spec/check_all_test.dart
+++ b/pkg/analysis_server/tool/spec/check_all_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'generate_all.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_analysis_server.dart b/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
index e72548d..9e19fb6 100644
--- a/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
+++ b/pkg/analysis_server/tool/spec/codegen_analysis_server.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "AnalysisServer.java".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 import 'codegen_java.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart b/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
index 7fddd04..65515ef 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_notification_handler.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart';
 
 import 'api.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
index a9da290..2acef57 100644
--- a/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analysis_server/tool/spec/codegen_dart_protocol.dart
@@ -4,7 +4,7 @@
 
 import 'dart:convert';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:path/path.dart' as path;
 
diff --git a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
index 09a412b..208e0a0 100644
--- a/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
+++ b/pkg/analysis_server/tool/spec/codegen_inttest_methods.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "integration_test_methods.dart".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart' as path;
 
 import 'api.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_java.dart b/pkg/analysis_server/tool/spec/codegen_java.dart
index f898732..341e4e1 100644
--- a/pkg/analysis_server/tool/spec/codegen_java.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Tools for Java code generation.
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
 import 'api.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_java_types.dart b/pkg/analysis_server/tool/spec/codegen_java_types.dart
index 4ecbc1d..a59a788 100644
--- a/pkg/analysis_server/tool/spec/codegen_java_types.dart
+++ b/pkg/analysis_server/tool/spec/codegen_java_types.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "AnalysisServer.java".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
 import 'api.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_matchers.dart b/pkg/analysis_server/tool/spec/codegen_matchers.dart
index afe7545..2e53975 100644
--- a/pkg/analysis_server/tool/spec/codegen_matchers.dart
+++ b/pkg/analysis_server/tool/spec/codegen_matchers.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "matchers.dart".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 import 'from_html.dart';
diff --git a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
index 12e2dc2..511f260 100644
--- a/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analysis_server/tool/spec/codegen_protocol_constants.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 import 'codegen_dart.dart';
diff --git a/pkg/analysis_server/tool/spec/from_html.dart b/pkg/analysis_server/tool/spec/from_html.dart
index 5496a9c..237a6a7 100644
--- a/pkg/analysis_server/tool/spec/from_html.dart
+++ b/pkg/analysis_server/tool/spec/from_html.dart
@@ -5,7 +5,7 @@
 /// Code for reading an HTML API description.
 import 'dart:io';
 
-import 'package:analysis_tool/html.dart';
+import 'package:analyzer_utilities/html.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:html/parser.dart' as parser;
 import 'package:path/path.dart';
diff --git a/pkg/analysis_server/tool/spec/generate_all.dart b/pkg/analysis_server/tool/spec/generate_all.dart
index ac9eb91..20840ce 100644
--- a/pkg/analysis_server/tool/spec/generate_all.dart
+++ b/pkg/analysis_server/tool/spec/generate_all.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'codegen_analysis_server.dart' as codegen_analysis_server;
diff --git a/pkg/analysis_server/tool/spec/implied_types.dart b/pkg/analysis_server/tool/spec/implied_types.dart
index 44d89c2..fb67058 100644
--- a/pkg/analysis_server/tool/spec/implied_types.dart
+++ b/pkg/analysis_server/tool/spec/implied_types.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code for enumerating the set of types implied by the API.
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 
diff --git a/pkg/analysis_server/tool/spec/to_html.dart b/pkg/analysis_server/tool/spec/to_html.dart
index 9ad321a..db50d44 100644
--- a/pkg/analysis_server/tool/spec/to_html.dart
+++ b/pkg/analysis_server/tool/spec/to_html.dart
@@ -7,8 +7,8 @@
 /// in generated code.
 import 'dart:convert';
 
-import 'package:analysis_tool/html.dart';
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/html.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
 import 'api.dart';
diff --git a/pkg/analysis_server_client/pubspec.yaml b/pkg/analysis_server_client/pubspec.yaml
index 465884d..0589bc3 100644
--- a/pkg/analysis_server_client/pubspec.yaml
+++ b/pkg/analysis_server_client/pubspec.yaml
@@ -15,6 +15,6 @@
     path: ../analyzer
   analysis_server:
     path: ../analysis_server
-  analysis_tool:
-    path: ../analysis_tool
+  analyzer_utilities:
+    path: ../analyzer_utilities
   test: ^1.14.2
diff --git a/pkg/analysis_server_client/test/verify_sorted_test.dart b/pkg/analysis_server_client/test/verify_sorted_test.dart
index 66a848a..79d7299 100644
--- a/pkg/analysis_server_client/test/verify_sorted_test.dart
+++ b/pkg/analysis_server_client/test/verify_sorted_test.dart
@@ -5,12 +5,12 @@
 import 'dart:io';
 
 import 'package:analysis_server/src/services/correction/sort_members.dart';
-import 'package:analysis_tool/package_root.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart';
 import 'package:test/test.dart';
 
 void main() {
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 0ad2ec6..f097d37 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -22,8 +22,8 @@
   watcher: ^0.9.6
   yaml: ^2.1.2
 dev_dependencies:
-  analysis_tool:
-    path: ../analysis_tool
+  analyzer_utilities:
+    path: ../analyzer_utilities
   linter: any
   matcher: ^0.12.3
   pedantic: ^1.9.0
diff --git a/pkg/analyzer/test/src/fasta/message_coverage_test.dart b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
index 8b309c8..73a7fac 100644
--- a/pkg/analyzer/test/src/fasta/message_coverage_test.dart
+++ b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
@@ -4,9 +4,9 @@
 
 import 'dart:io' as io;
 
-import 'package:analysis_tool/package_root.dart' as package_root;
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
diff --git a/pkg/analyzer/test/src/summary2/ast_text_printer_integration_test.dart b/pkg/analyzer/test/src/summary2/ast_text_printer_integration_test.dart
index 867debe..64623f8 100644
--- a/pkg/analyzer/test/src/summary2/ast_text_printer_integration_test.dart
+++ b/pkg/analyzer/test/src/summary2/ast_text_printer_integration_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/package_root.dart' as package_root;
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:test/test.dart';
 
 import '../dart/ast/parse_base.dart';
diff --git a/pkg/analyzer/test/verify_docs_test.dart b/pkg/analyzer/test/verify_docs_test.dart
index 2254409..32e6bc1 100644
--- a/pkg/analyzer/test/verify_docs_test.dart
+++ b/pkg/analyzer/test/verify_docs_test.dart
@@ -4,7 +4,6 @@
 
 import 'dart:convert';
 
-import 'package:analysis_tool/package_root.dart' as package_root;
 import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
@@ -13,6 +12,7 @@
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:test/test.dart';
 
 main() async {
diff --git a/pkg/analyzer/test/verify_tests_test.dart b/pkg/analyzer/test/verify_tests_test.dart
index d1e1e17..3db4bb7 100644
--- a/pkg/analyzer/test/verify_tests_test.dart
+++ b/pkg/analyzer/test/verify_tests_test.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/verify_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/verify_tests.dart';
 
 main() {
   var provider = PhysicalResourceProvider.INSTANCE;
diff --git a/pkg/analyzer/tool/diagnostics/generate.dart b/pkg/analyzer/tool/diagnostics/generate.dart
index 18dcbd2..7571b56 100644
--- a/pkg/analyzer/tool/diagnostics/generate.dart
+++ b/pkg/analyzer/tool/diagnostics/generate.dart
@@ -4,13 +4,13 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/package_root.dart' as package_root;
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
 import 'package:path/src/context.dart';
 
 /// Generate the file `diagnostics.md` based on the documentation associated
diff --git a/pkg/analyzer/tool/experiments/experiments_test.dart b/pkg/analyzer/tool/experiments/experiments_test.dart
index 4f77ee3..575c084 100644
--- a/pkg/analyzer/tool/experiments/experiments_test.dart
+++ b/pkg/analyzer/tool/experiments/experiments_test.dart
@@ -4,7 +4,7 @@
 
 import "dart:io" show Platform;
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'generate.dart';
diff --git a/pkg/analyzer/tool/experiments/generate.dart b/pkg/analyzer/tool/experiments/generate.dart
index ac315ad..6e28018 100644
--- a/pkg/analyzer/tool/experiments/generate.dart
+++ b/pkg/analyzer/tool/experiments/generate.dart
@@ -4,8 +4,8 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/characters.dart'
     show $MINUS, $_;
-import 'package:analysis_tool/package_root.dart' as pkg_root;
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/package_root.dart' as pkg_root;
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 import 'package:yaml/yaml.dart' show YamlMap, loadYaml;
 
diff --git a/pkg/analyzer/tool/messages/generate.dart b/pkg/analyzer/tool/messages/generate.dart
index 23e066e..e845177 100644
--- a/pkg/analyzer/tool/messages/generate.dart
+++ b/pkg/analyzer/tool/messages/generate.dart
@@ -13,10 +13,10 @@
 import 'dart:io';
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart';
-import 'package:analysis_tool/package_root.dart' as pkg_root;
-import 'package:analysis_tool/tools.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer_utilities/package_root.dart' as pkg_root;
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 import 'package:yaml/yaml.dart' show loadYaml;
 
diff --git a/pkg/analyzer/tool/summary/check_test.dart b/pkg/analyzer/tool/summary/check_test.dart
index 34edda7..a5d0473 100644
--- a/pkg/analyzer/tool/summary/check_test.dart
+++ b/pkg/analyzer/tool/summary/check_test.dart
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'generate.dart';
diff --git a/pkg/analyzer/tool/summary/generate.dart b/pkg/analyzer/tool/summary/generate.dart
index 945b34c..3bba6a2 100644
--- a/pkg/analyzer/tool/summary/generate.dart
+++ b/pkg/analyzer/tool/summary/generate.dart
@@ -20,7 +20,7 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart';
 import 'package:_fe_analyzer_shared/src/scanner/token.dart' show Token;
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'idl_model.dart' as idl_model;
 import 'mini_ast.dart';
diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index 50a1e05..b3ba237 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -14,8 +14,8 @@
   pub_semver: '^1.3.2'
 
 dev_dependencies:
-  analysis_tool:
-    path: ../analysis_tool
+  analyzer_utilities:
+    path: ../analyzer_utilities
   html: '>=0.13.1 <0.15.0'
   path: '^1.4.1'
   test_reflective_loader: ^0.1.8
diff --git a/pkg/analyzer_plugin/test/verify_tests_test.dart b/pkg/analyzer_plugin/test/verify_tests_test.dart
index 3ea9290..48657ce 100644
--- a/pkg/analyzer_plugin/test/verify_tests_test.dart
+++ b/pkg/analyzer_plugin/test/verify_tests_test.dart
@@ -2,10 +2,10 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/verify_tests.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/verify_tests.dart';
 
 void main() {
   var provider = PhysicalResourceProvider.INSTANCE;
diff --git a/pkg/analyzer_plugin/tool/spec/check_all_test.dart b/pkg/analyzer_plugin/tool/spec/check_all_test.dart
index 2d4f184..24b06fa 100644
--- a/pkg/analyzer_plugin/tool/spec/check_all_test.dart
+++ b/pkg/analyzer_plugin/tool/spec/check_all_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'generate_all.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart b/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
index 93c58c0..6497fe8 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_dart_protocol.dart
@@ -4,7 +4,7 @@
 
 import 'dart:convert';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:path/path.dart' as path;
 
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_inttest_methods.dart b/pkg/analyzer_plugin/tool/spec/codegen_inttest_methods.dart
index add730b..fe65490 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_inttest_methods.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_inttest_methods.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "integration_test_methods.dart".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart' as path;
 
 import 'api.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_matchers.dart b/pkg/analyzer_plugin/tool/spec/codegen_matchers.dart
index 00110bc..9e3e2fd 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_matchers.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_matchers.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code generation for the file "matchers.dart".
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 import 'from_html.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart b/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
index ae017a6..099eb1d 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart' as path;
 
 import 'api.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart b/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
index 2c6718f..52618ac 100644
--- a/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
+++ b/pkg/analyzer_plugin/tool/spec/codegen_protocol_constants.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 import 'codegen_dart.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/from_html.dart b/pkg/analyzer_plugin/tool/spec/from_html.dart
index 86d0ebb..977737b 100644
--- a/pkg/analyzer_plugin/tool/spec/from_html.dart
+++ b/pkg/analyzer_plugin/tool/spec/from_html.dart
@@ -5,7 +5,7 @@
 /// Code for reading an HTML API description.
 import 'dart:io';
 
-import 'package:analysis_tool/html.dart';
+import 'package:analyzer_utilities/html.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:html/parser.dart' as parser;
 import 'package:path/path.dart';
diff --git a/pkg/analyzer_plugin/tool/spec/generate_all.dart b/pkg/analyzer_plugin/tool/spec/generate_all.dart
index 4083370..5375f42 100644
--- a/pkg/analyzer_plugin/tool/spec/generate_all.dart
+++ b/pkg/analyzer_plugin/tool/spec/generate_all.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:path/path.dart';
 
 import 'codegen_dart_protocol.dart' as codegen_dart_protocol;
diff --git a/pkg/analyzer_plugin/tool/spec/implied_types.dart b/pkg/analyzer_plugin/tool/spec/implied_types.dart
index 0eb3e4b..04f217c 100644
--- a/pkg/analyzer_plugin/tool/spec/implied_types.dart
+++ b/pkg/analyzer_plugin/tool/spec/implied_types.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /// Code for enumerating the set of types implied by the API.
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 
 import 'api.dart';
 
diff --git a/pkg/analyzer_plugin/tool/spec/to_html.dart b/pkg/analyzer_plugin/tool/spec/to_html.dart
index 115b3ec..923e34b 100644
--- a/pkg/analyzer_plugin/tool/spec/to_html.dart
+++ b/pkg/analyzer_plugin/tool/spec/to_html.dart
@@ -7,8 +7,8 @@
 /// in generated code.
 import 'dart:convert';
 
-import 'package:analysis_tool/html.dart';
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/html.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
 import 'api.dart';
diff --git a/pkg/analysis_tool/README.md b/pkg/analyzer_utilities/README.md
similarity index 100%
rename from pkg/analysis_tool/README.md
rename to pkg/analyzer_utilities/README.md
diff --git a/pkg/analysis_tool/analysis_options.yaml b/pkg/analyzer_utilities/analysis_options.yaml
similarity index 100%
rename from pkg/analysis_tool/analysis_options.yaml
rename to pkg/analyzer_utilities/analysis_options.yaml
diff --git a/pkg/analysis_tool/lib/html.dart b/pkg/analyzer_utilities/lib/html.dart
similarity index 100%
rename from pkg/analysis_tool/lib/html.dart
rename to pkg/analyzer_utilities/lib/html.dart
diff --git a/pkg/analysis_tool/lib/package_root.dart b/pkg/analyzer_utilities/lib/package_root.dart
similarity index 100%
rename from pkg/analysis_tool/lib/package_root.dart
rename to pkg/analyzer_utilities/lib/package_root.dart
diff --git a/pkg/analysis_tool/lib/text_formatter.dart b/pkg/analyzer_utilities/lib/text_formatter.dart
similarity index 98%
rename from pkg/analysis_tool/lib/text_formatter.dart
rename to pkg/analyzer_utilities/lib/text_formatter.dart
index 2305910..a35920b 100644
--- a/pkg/analysis_tool/lib/text_formatter.dart
+++ b/pkg/analyzer_utilities/lib/text_formatter.dart
@@ -7,7 +7,7 @@
  * analyzer and analysis server.
  */
 
-import 'package:analysis_tool/tools.dart';
+import 'package:analyzer_utilities/tools.dart';
 import 'package:html/dom.dart' as dom;
 
 final RegExp whitespace = new RegExp(r'\s');
diff --git a/pkg/analysis_tool/lib/tools.dart b/pkg/analyzer_utilities/lib/tools.dart
similarity index 99%
rename from pkg/analysis_tool/lib/tools.dart
rename to pkg/analyzer_utilities/lib/tools.dart
index 831014e..c26e5a5 100644
--- a/pkg/analysis_tool/lib/tools.dart
+++ b/pkg/analyzer_utilities/lib/tools.dart
@@ -8,8 +8,8 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:analysis_tool/html.dart';
-import 'package:analysis_tool/text_formatter.dart';
+import 'package:analyzer_utilities/html.dart';
+import 'package:analyzer_utilities/text_formatter.dart';
 import 'package:html/dom.dart' as dom;
 import 'package:path/path.dart';
 
diff --git a/pkg/analysis_tool/lib/verify_tests.dart b/pkg/analyzer_utilities/lib/verify_tests.dart
similarity index 100%
rename from pkg/analysis_tool/lib/verify_tests.dart
rename to pkg/analyzer_utilities/lib/verify_tests.dart
diff --git a/pkg/analysis_tool/pubspec.yaml b/pkg/analyzer_utilities/pubspec.yaml
similarity index 88%
rename from pkg/analysis_tool/pubspec.yaml
rename to pkg/analyzer_utilities/pubspec.yaml
index f4763fd..ed67a42 100644
--- a/pkg/analysis_tool/pubspec.yaml
+++ b/pkg/analyzer_utilities/pubspec.yaml
@@ -1,4 +1,4 @@
-name: analysis_tool
+name: analyzer_utilities
 # This package is not intended for consumption on pub.dev. DO NOT publish.
 publish_to: none
 
diff --git a/pkg/dartdev/lib/dartdev.dart b/pkg/dartdev/lib/dartdev.dart
index 703abc6..e2229b4 100644
--- a/pkg/dartdev/lib/dartdev.dart
+++ b/pkg/dartdev/lib/dartdev.dart
@@ -33,34 +33,128 @@
 Future<void> runDartdev(List<String> args, SendPort port) async {
   VmInteropHandler.initialize(port);
 
-  if (args.contains('run')) {
-    // These flags have a format that can't be handled by package:args, so while
-    // they are valid flags we'll assume the VM has verified them by this point.
-    args = args
-        .where(
-          (element) => !(element.contains('--observe') ||
-              element.contains('--enable-vm-service')),
-        )
-        .toList();
+  int result;
+
+  // The exit code for the dartdev process; null indicates that it has not been
+  // set yet. The value is set in the catch and finally blocks below.
+  int exitCode;
+
+  // Any caught non-UsageExceptions when running the sub command.
+  Object exception;
+  StackTrace stackTrace;
+
+  // The Analytics instance used to report information back to Google Analytics;
+  // see lib/src/analytics.dart.
+  final analytics = createAnalyticsInstance(
+    args.contains('--disable-dartdev-analytics'),
+  );
+
+  // 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 &&
+      io.stdout.hasTerminal &&
+      !isBot()) {
+    print(analyticsNoticeOnFirstRunMessage);
+    analytics.disclosureShownOnTerminal = true;
   }
 
-  // Finally, call the runner to execute the command; see DartdevRunner.
+  // When `--disable-analytics` or `--enable-analytics` are called we perform
+  // the respective intention and print any notices to standard out and exit.
+  if (args.contains('--disable-analytics')) {
+    // This block also potentially catches the case of (disableAnalytics &&
+    // enableAnalytics), in which we favor the disabling of analytics.
+    analytics.enabled = false;
 
-  final runner = DartdevRunner(args);
-  var exitCode = 1;
+    // Alert the user that analytics has been disabled.
+    print(analyticsDisabledNoticeMessage);
+    VmInteropHandler.exit(0);
+    return;
+  } else if (args.contains('--enable-analytics')) {
+    analytics.enabled = true;
+
+    // Alert the user again that anonymous data will be collected.
+    print(analyticsNoticeOnFirstRunMessage);
+    VmInteropHandler.exit(0);
+    return;
+  }
+
   try {
-    exitCode = await runner.run(args);
-  } on UsageException catch (e) {
-    // TODO(sigurdm): It is unclear when a UsageException gets to here, and
-    // when it is in DartdevRunner.runCommand.
-    io.stderr.writeln('$e');
-    exitCode = 64;
+    final runner = DartdevRunner(args, analytics);
+
+    // Run can't be called with the '--disable-dartdev-analytics' flag; remove
+    // it if it is contained in args.
+    if (args.contains('--disable-dartdev-analytics')) {
+      args = List.from(args)..remove('--disable-dartdev-analytics');
+    }
+
+    if (args.contains('run')) {
+      // These flags have a format that can't be handled by package:args, so while
+      // they are valid flags we'll assume the VM has verified them by this point.
+      args = args
+          .where(
+            (element) => !(element.contains('--observe') ||
+                element.contains('--enable-vm-service')),
+          )
+          .toList();
+    }
+
+    // If ... help pub ... is in the args list, remove 'help', and add '--help'
+    // to the end of the list. This will make it possible to use the help
+    // command to access subcommands of pub such as `dart help pub publish`; see
+    // https://github.com/dart-lang/sdk/issues/42965.
+    if (PubUtils.shouldModifyArgs(args, runner.commands.keys.toList())) {
+      args = PubUtils.modifyArgs(args);
+    }
+
+    // Finally, call the runner to execute the command; see DartdevRunner.
+    result = await runner.run(args);
+  } catch (e, st) {
+    if (e is UsageException) {
+      io.stderr.writeln('$e');
+      exitCode = 64;
+    } else {
+      // Set the exception and stack trace only for non-UsageException cases:
+      exception = e;
+      stackTrace = st;
+      io.stderr.writeln('$e');
+      io.stderr.writeln('$st');
+      exitCode = 1;
+    }
   } finally {
+    // Set the exitCode, if it wasn't set in the catch block above.
+    exitCode ??= result ?? 0;
+
+    // Send analytics before exiting
+    if (analytics.enabled) {
+      // And now send the exceptions and events to Google Analytics:
+      if (exception != null) {
+        unawaited(
+          analytics.sendException(
+              '${exception.runtimeType}\n${sanitizeStacktrace(stackTrace)}',
+              fatal: true),
+        );
+      }
+
+      await analytics.waitForLastPing(
+          timeout: const Duration(milliseconds: 200));
+    }
+
+    // Set the enabled flag in the analytics object to true. Note: this will not
+    // enable the analytics unless the disclosure was shown (terminal detected),
+    // and the machine is not detected to be a bot.
+    if (analytics.firstRun) {
+      analytics.enabled = true;
+    }
+    analytics.close();
     VmInteropHandler.exit(exitCode);
   }
 }
 
 class DartdevRunner extends CommandRunner<int> {
+  final Analytics analytics;
+
   @override
   final ArgParser argParser =
       ArgParser(usageLineLength: dartdevUsageLineLength);
@@ -68,7 +162,8 @@
   static const String dartdevDescription =
       'A command-line utility for Dart development';
 
-  DartdevRunner(List<String> args) : super('dart', '$dartdevDescription.') {
+  DartdevRunner(List<String> args, this.analytics)
+      : super('dart', '$dartdevDescription.') {
     final bool verbose = args.contains('-v') || args.contains('--verbose');
 
     argParser.addFlag('verbose',
@@ -83,9 +178,12 @@
     argParser.addFlag('diagnostics',
         negatable: false, help: 'Show tool diagnostic output.', hide: !verbose);
 
+    // A hidden flag to disable analytics on this run, this constructor can be
+    // called with this flag, but should be removed before run() is called as
+    // the flag has not been added to all sub-commands.
     argParser.addFlag(
-      'analytics',
-      negatable: true,
+      'disable-dartdev-analytics',
+      negatable: false,
       help: 'Disable anonymous analytics for this `dart *` run',
       hide: true,
     );
@@ -112,38 +210,7 @@
   @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']);
-
-    // 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 &&
-        io.stdout.hasTerminal &&
-        !isBot()) {
-      print(analyticsNoticeOnFirstRunMessage);
-      analytics.disclosureShownOnTerminal = true;
-    }
-
-    // When `--disable-analytics` or `--enable-analytics` are called we perform
-    // the respective intention and print any notices to standard out and exit.
-    if (topLevelResults['disable-analytics']) {
-      // This block also potentially catches the case of (disableAnalytics &&
-      // enableAnalytics), in which we favor the disabling of analytics.
-      analytics.enabled = false;
-
-      // Alert the user that analytics has been disabled.
-      print(analyticsDisabledNoticeMessage);
-      return 0;
-    } else if (topLevelResults['enable-analytics']) {
-      analytics.enabled = true;
-
-      // Alert the user again that anonymous data will be collected.
-      print(analyticsNoticeOnFirstRunMessage);
-      return 0;
-    }
+    assert(!topLevelResults.arguments.contains('--disable-dartdev-analytics'));
 
     if (topLevelResults.command == null &&
         topLevelResults.arguments.isNotEmpty) {
@@ -153,12 +220,14 @@
         io.stderr.writeln(
             "Error when reading '$firstArg': No such file or directory.");
         // This is the exit code used by the frontend.
-        return 254;
+        VmInteropHandler.exit(254);
       }
     }
 
+    isDiagnostics = topLevelResults['diagnostics'];
+
     final Ansi ansi = Ansi(Ansi.terminalSupportsAnsi);
-    log = topLevelResults['diagnostics']
+    log = isDiagnostics
         ? Logger.verbose(ansi: ansi)
         : Logger.standard(ansi: ansi);
 
@@ -176,15 +245,8 @@
       analytics.sendScreenView(path),
     );
 
-    // The exit code for the dartdev process; null indicates that it has not been
-    // set yet. The value is set in the catch and finally blocks below.
-    int exitCode;
-
-    // Any caught non-UsageExceptions when running the sub command.
-    Object exception;
-    StackTrace stackTrace;
     try {
-      exitCode = await super.runCommand(topLevelResults);
+      final exitCode = await super.runCommand(topLevelResults);
 
       if (path != null && analytics.enabled) {
         // Send the event to analytics
@@ -204,16 +266,8 @@
           ),
         );
       }
-    } on UsageException catch (e) {
-      io.stderr.writeln('$e');
-      exitCode = 64;
-    } catch (e, st) {
-      // Set the exception and stack trace only for non-UsageException cases:
-      exception = e;
-      stackTrace = st;
-      io.stderr.writeln('$e');
-      io.stderr.writeln('$st');
-      exitCode = 1;
+
+      return exitCode;
     } finally {
       stopwatch.stop();
       if (analytics.enabled) {
@@ -225,32 +279,6 @@
           ),
         );
       }
-      // Set the exitCode, if it wasn't set in the catch block above.
-      exitCode ??= 0;
-
-      // Send analytics before exiting
-      if (analytics.enabled) {
-        // And now send the exceptions and events to Google Analytics:
-        if (exception != null) {
-          unawaited(
-            analytics.sendException(
-                '${exception.runtimeType}\n${sanitizeStacktrace(stackTrace)}',
-                fatal: true),
-          );
-        }
-
-        await analytics.waitForLastPing(
-            timeout: const Duration(milliseconds: 200));
-      }
-
-      // Set the enabled flag in the analytics object to true. Note: this will not
-      // enable the analytics unless the disclosure was shown (terminal detected),
-      // and the machine is not detected to be a bot.
-      if (analytics.firstRun) {
-        analytics.enabled = true;
-      }
-      analytics.close();
-      return exitCode;
     }
   }
 }
diff --git a/pkg/dartdev/lib/src/analytics.dart b/pkg/dartdev/lib/src/analytics.dart
index 0462363..f8e8ffc 100644
--- a/pkg/dartdev/lib/src/analytics.dart
+++ b/pkg/dartdev/lib/src/analytics.dart
@@ -53,7 +53,7 @@
   }
 
   if (disableAnalytics) {
-    // Dartdev tests pass a hidden 'no-analytics' flag which is
+    // Dartdev tests pass a hidden 'disable-dartdev-analytics' flag which is
     // handled here.
     // Also, stdout.hasTerminal is checked, if there is no terminal we infer that
     // a machine is running dartdev so we return analytics shouldn't be set.
diff --git a/pkg/dartdev/lib/src/utils.dart b/pkg/dartdev/lib/src/utils.dart
index 32a9c8e..88b80ed 100644
--- a/pkg/dartdev/lib/src/utils.dart
+++ b/pkg/dartdev/lib/src/utils.dart
@@ -38,6 +38,31 @@
   return s;
 }
 
+/// Static util methods used in dartdev to potentially modify the order of the
+/// arguments passed into dartdev.
+class PubUtils {
+  /// If [doModifyArgs] returns true, then this method returns a modified copy
+  /// of the argument list, 'help' is removed from the interior of the list, and
+  /// '--help' is added to the end of the list of arguments. This method returns
+  /// a modified copy of the list, the list itself is not modified.
+  static List<String> modifyArgs(List<String> args) => List.from(args)
+    ..remove('help')
+    ..add('--help');
+
+  /// If ... help pub ..., and no other verb (such as 'analyze') appears before
+  /// the ... help pub ... in the argument list, then return true.
+  static bool shouldModifyArgs(List<String> args, List<String> allCmds) =>
+      args != null &&
+      allCmds != null &&
+      args.isNotEmpty &&
+      allCmds.isNotEmpty &&
+      args.firstWhere((arg) => allCmds.contains(arg), orElse: () => '') ==
+          'help' &&
+      args.contains('help') &&
+      args.contains('pub') &&
+      args.indexOf('help') + 1 == args.indexOf('pub');
+}
+
 extension FileSystemEntityExtension on FileSystemEntity {
   String get name => p.basename(path);
 
diff --git a/pkg/dartdev/test/analytics_test.dart b/pkg/dartdev/test/analytics_test.dart
index 8c74972..26d9822 100644
--- a/pkg/dartdev/test/analytics_test.dart
+++ b/pkg/dartdev/test/analytics_test.dart
@@ -23,7 +23,7 @@
   group('Sending analytics', () {
     test('help', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['help']);
+      final result = p.runSync('help', []);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -51,7 +51,7 @@
     });
     test('create', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['create', '-tpackage-simple', 'name']);
+      final result = p.runSync('create', ['-tpackage-simple', 'name']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -82,7 +82,7 @@
 
     test('pub get', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['pub', 'get', '--dry-run']);
+      final result = p.runSync('pub', ['get', '--dry-run']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -113,7 +113,7 @@
 
     test('format', () {
       final p = project(logAnalytics: true);
-      final result = p.runSync(['format', '-l80']);
+      final result = p.runSync('format', ['-l80']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
@@ -146,8 +146,7 @@
       final p = project(
           mainSrc: 'void main(List<String> args) => print(args)',
           logAnalytics: true);
-      final result = p.runSync([
-        'run',
+      final result = p.runSync('run', [
         '--no-pause-isolates-on-exit',
         '--enable-asserts',
         'lib/main.dart',
@@ -185,8 +184,7 @@
       final p = project(
           mainSrc: 'void main(List<String> args) => print(args);',
           logAnalytics: true);
-      final result = p.runSync([
-        'run',
+      final result = p.runSync('run', [
         '--enable-experiment=non-nullable',
         'lib/main.dart',
       ]);
@@ -223,7 +221,7 @@
           mainSrc: 'void main(List<String> args) => print(args);',
           logAnalytics: true);
       final result = p
-          .runSync(['compile', 'kernel', 'lib/main.dart', '-o', 'main.kernel']);
+          .runSync('compile', ['kernel', 'lib/main.dart', '-o', 'main.kernel']);
       expect(extractAnalytics(result), [
         {
           'hitType': 'screenView',
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index 0c07435..2d88b65 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -62,7 +62,7 @@
 
   test('--help', () {
     p = project();
-    var result = p.runSync(['analyze', '--help']);
+    var result = p.runSync('analyze', ['--help']);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -72,7 +72,7 @@
 
   test('multiple directories', () {
     p = project();
-    var result = p.runSync(['analyze', '/no/such/dir1/', '/no/such/dir2/']);
+    var result = p.runSync('analyze', ['/no/such/dir1/', '/no/such/dir2/']);
 
     expect(result.exitCode, 64);
     expect(result.stdout, isEmpty);
@@ -82,7 +82,7 @@
 
   test('no such directory', () {
     p = project();
-    var result = p.runSync(['analyze', '/no/such/dir1/']);
+    var result = p.runSync('analyze', ['/no/such/dir1/']);
 
     expect(result.exitCode, 64);
     expect(result.stdout, isEmpty);
@@ -93,7 +93,7 @@
   test('current working directory', () {
     p = project(mainSrc: 'int get foo => 1;\n');
 
-    var result = p.runSync(['analyze'], workingDir: p.dirPath);
+    var result = p.runSync('analyze', [], workingDir: p.dirPath);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -102,7 +102,7 @@
 
   test('no errors', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    var result = p.runSync(['analyze', p.dirPath]);
+    var result = p.runSync('analyze', [p.dirPath]);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -111,7 +111,7 @@
 
   test('one error', () {
     p = project(mainSrc: "int get foo => 'str';\n");
-    var result = p.runSync(['analyze', p.dirPath]);
+    var result = p.runSync('analyze', [p.dirPath]);
 
     expect(result.exitCode, 3);
     expect(result.stderr, isEmpty);
@@ -123,7 +123,7 @@
 
   test('two errors', () {
     p = project(mainSrc: "int get foo => 'str';\nint get bar => 'str';\n");
-    var result = p.runSync(['analyze', p.dirPath]);
+    var result = p.runSync('analyze', [p.dirPath]);
 
     expect(result.exitCode, 3);
     expect(result.stderr, isEmpty);
@@ -134,7 +134,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = p.runSync(['analyze', '--fatal-warnings', p.dirPath]);
+    var result = p.runSync('analyze', ['--fatal-warnings', p.dirPath]);
 
     expect(result.exitCode, equals(2));
     expect(result.stderr, isEmpty);
@@ -145,7 +145,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = p.runSync(['analyze', p.dirPath]);
+    var result = p.runSync('analyze', [p.dirPath]);
 
     expect(result.exitCode, equals(2));
     expect(result.stderr, isEmpty);
@@ -156,7 +156,7 @@
     p = project(
         mainSrc: _unusedImportCodeSnippet,
         analysisOptions: _unusedImportAnalysisOptions);
-    var result = p.runSync(['analyze', '--no-fatal-warnings', p.dirPath]);
+    var result = p.runSync('analyze', ['--no-fatal-warnings', p.dirPath]);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -165,7 +165,7 @@
 
   test('info implicit no --fatal-infos', () {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
-    var result = p.runSync(['analyze', p.dirPath]);
+    var result = p.runSync('analyze', [p.dirPath]);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -174,7 +174,7 @@
 
   test('info --fatal-infos', () {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
-    var result = p.runSync(['analyze', '--fatal-infos', p.dirPath]);
+    var result = p.runSync('analyze', ['--fatal-infos', p.dirPath]);
 
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
@@ -188,7 +188,7 @@
   var one = 1;
   return result;
 }''');
-    var result = p.runSync(['analyze', '--verbose', p.dirPath]);
+    var result = p.runSync('analyze', ['--verbose', p.dirPath]);
 
     expect(result.exitCode, 3);
     expect(result.stderr, isEmpty);
diff --git a/pkg/dartdev/test/commands/compile_test.dart b/pkg/dartdev/test/commands/compile_test.dart
index f2f5f31..57e669a 100644
--- a/pkg/dartdev/test/commands/compile_test.dart
+++ b/pkg/dartdev/test/commands/compile_test.dart
@@ -27,9 +27,8 @@
   test('Implicit --help', () {
     final p = project();
     var result = p.runSync(
-      [
-        'compile',
-      ],
+      'compile',
+      [],
     );
     expect(result.stderr, contains('Compile Dart'));
     expect(result.exitCode, compileErrorExitCode);
@@ -38,7 +37,8 @@
   test('--help', () {
     final p = project();
     final result = p.runSync(
-      ['compile', '--help'],
+      'compile',
+      ['--help'],
     );
     expect(result.stdout, contains('Compile Dart'));
     expect(result.exitCode, 0);
@@ -48,8 +48,8 @@
     final p = project(mainSrc: 'void main() { print("I love jit"); }');
     final outFile = path.join(p.dirPath, 'main.jit');
     var result = p.runSync(
+      'compile',
       [
-        'compile',
         'jit-snapshot',
         '-o',
         outFile,
@@ -61,7 +61,7 @@
     expect(File(outFile).existsSync(), true,
         reason: 'File not found: $outFile');
 
-    result = p.runSync(['run', 'main.jit']);
+    result = p.runSync('run', ['main.jit']);
     expect(result.stdout, contains('I love jit'));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -73,8 +73,8 @@
     final outFile = path.canonicalize(path.join(p.dirPath, 'lib', 'main.exe'));
 
     var result = p.runSync(
+      'compile',
       [
-        'compile',
         'exe',
         inFile,
       ],
@@ -102,8 +102,8 @@
     final outFile = path.canonicalize(path.join(p.dirPath, 'myexe'));
 
     var result = p.runSync(
+      'compile',
       [
-        'compile',
         'exe',
         '--define',
         'life=42',
@@ -134,8 +134,8 @@
     final outFile = path.canonicalize(path.join(p.dirPath, 'main.aot'));
 
     var result = p.runSync(
+      'compile',
       [
-        'compile',
         'aot-snapshot',
         '-o',
         'main.aot',
@@ -163,8 +163,8 @@
     final p = project(mainSrc: 'void main() { print("I love kernel"); }');
     final outFile = path.join(p.dirPath, 'main.dill');
     var result = p.runSync(
+      'compile',
       [
-        'compile',
         'kernel',
         '-o',
         outFile,
@@ -176,7 +176,7 @@
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
 
-    result = p.runSync(['run', 'main.dill']);
+    result = p.runSync('run', ['main.dill']);
     expect(result.stdout, contains('I love kernel'));
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -187,8 +187,7 @@
     final inFile = path.canonicalize(path.join(p.dirPath, p.relativeFilePath));
     final outFile = path.canonicalize(path.join(p.dirPath, 'main.js'));
 
-    final result = p.runSync([
-      'compile',
+    final result = p.runSync('compile', [
       'js',
       '-m',
       '-o',
diff --git a/pkg/dartdev/test/commands/create_test.dart b/pkg/dartdev/test/commands/create_test.dart
index 7f5c846..38a8ebd 100644
--- a/pkg/dartdev/test/commands/create_test.dart
+++ b/pkg/dartdev/test/commands/create_test.dart
@@ -36,7 +36,7 @@
   test('list templates', () {
     p = project();
 
-    ProcessResult result = p.runSync(['create', '--list-templates']);
+    ProcessResult result = p.runSync('create', ['--list-templates']);
     expect(result.exitCode, 0);
 
     String output = result.stdout.toString();
@@ -50,9 +50,7 @@
   test('no directory given', () {
     p = project();
 
-    ProcessResult result = p.runSync([
-      'create',
-    ]);
+    ProcessResult result = p.runSync('create', []);
     expect(result.exitCode, 1);
   });
 
@@ -60,7 +58,7 @@
     p = project();
 
     ProcessResult result = p.runSync(
-        ['create', '--template', CreateCommand.defaultTemplateId, p.dir.path]);
+        'create', ['--template', CreateCommand.defaultTemplateId, p.dir.path]);
     expect(result.exitCode, 73);
   });
 
@@ -68,7 +66,7 @@
     p = project();
 
     ProcessResult result =
-        p.runSync(['create', '--no-pub', '--template', 'foo-bar', p.dir.path]);
+        p.runSync('create', ['--no-pub', '--template', 'foo-bar', p.dir.path]);
     expect(result.exitCode, isNot(0));
   });
 
@@ -78,7 +76,7 @@
       p = project();
 
       ProcessResult result = p
-          .runSync(['create', '--force', '--template', templateId, p.dir.path]);
+          .runSync('create', ['--force', '--template', templateId, p.dir.path]);
       expect(result.exitCode, 0);
 
       String projectName = path.basename(p.dir.path);
diff --git a/pkg/dartdev/test/commands/fix_test.dart b/pkg/dartdev/test/commands/fix_test.dart
index ad4999a..5450742 100644
--- a/pkg/dartdev/test/commands/fix_test.dart
+++ b/pkg/dartdev/test/commands/fix_test.dart
@@ -21,7 +21,7 @@
 
   test('none', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    var result = p.runSync(['fix', p.dirPath]);
+    var result = p.runSync('fix', [p.dirPath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Nothing to fix!'));
@@ -38,7 +38,7 @@
     - prefer_single_quotes
 ''',
     );
-    var result = p.runSync(['fix'], workingDir: p.dirPath);
+    var result = p.runSync('fix', [], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Fixed 1 file.'));
@@ -55,7 +55,7 @@
     - prefer_single_quotes
 ''',
     );
-    var result = p.runSync(['fix', '--dry-run', '.'], workingDir: p.dirPath);
+    var result = p.runSync('fix', ['--dry-run', '.'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(
@@ -76,7 +76,7 @@
     - prefer_single_quotes
 ''',
     );
-    var result = p.runSync(['fix', '.'], workingDir: p.dirPath);
+    var result = p.runSync('fix', ['.'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Fixed 1 file.'));
@@ -96,7 +96,7 @@
     - prefer_single_quotes
 ''',
     );
-    var result = p.runSync(['fix', '.'], workingDir: p.dirPath);
+    var result = p.runSync('fix', ['.'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Nothing to fix!'));
@@ -114,7 +114,7 @@
     - prefer_single_quotes
 ''',
     );
-    var result = p.runSync(['fix', '.'], workingDir: p.dirPath);
+    var result = p.runSync('fix', ['.'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Nothing to fix!'));
diff --git a/pkg/dartdev/test/commands/flag_test.dart b/pkg/dartdev/test/commands/flag_test.dart
index 0475ee3..6416ffc 100644
--- a/pkg/dartdev/test/commands/flag_test.dart
+++ b/pkg/dartdev/test/commands/flag_test.dart
@@ -6,6 +6,7 @@
 
 import 'package:args/command_runner.dart';
 import 'package:dartdev/dartdev.dart';
+import 'package:dartdev/src/analytics.dart' show disabledAnalytics;
 import 'package:test/test.dart';
 
 import '../utils.dart';
@@ -19,7 +20,7 @@
   // For each command description, assert that the values are not empty, don't
   // have trailing white space and end with a period.
   test('description formatting', () {
-    DartdevRunner(['--no-analytics'])
+    DartdevRunner(['--disable-dartdev-analytics'], disabledAnalytics)
         .commands
         .forEach((String commandKey, Command command) {
       expect(commandKey, isNotEmpty);
@@ -31,7 +32,7 @@
 
   // Assert that all found usageLineLengths are the same and null
   test('argParser usageLineLength', () {
-    DartdevRunner(['--no-analytics'])
+    DartdevRunner(['--disable-dartdev-analytics'], disabledAnalytics)
         .commands
         .forEach((String commandKey, Command command) {
       if (command.argParser != null) {
@@ -61,7 +62,7 @@
 
   test('--help', () {
     p = project();
-    var result = p.runSync(['--help']);
+    var result = p.runSync('--help', []);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -79,7 +80,7 @@
 
   test('--help --verbose', () {
     p = project();
-    var result = p.runSync(['--help', '--verbose']);
+    var result = p.runSync('--help', ['--verbose']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, isEmpty);
@@ -89,7 +90,7 @@
 
   test('--help -v', () {
     p = project();
-    var result = p.runSync(['--help', '-v']);
+    var result = p.runSync('--help', ['-v']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, isEmpty);
@@ -99,7 +100,7 @@
 
   test('help', () {
     p = project();
-    var result = p.runSync(['help']);
+    var result = p.runSync('help', []);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -117,7 +118,7 @@
 
   test('help --verbose', () {
     p = project();
-    var result = p.runSync(['help', '--verbose']);
+    var result = p.runSync('help', ['--verbose']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, contains('migrate '));
@@ -125,7 +126,7 @@
 
   test('help -v', () {
     p = project();
-    var result = p.runSync(['help', '-v']);
+    var result = p.runSync('help', ['-v']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, contains('migrate '));
diff --git a/pkg/dartdev/test/commands/format_test.dart b/pkg/dartdev/test/commands/format_test.dart
index 6f36795..cded95b 100644
--- a/pkg/dartdev/test/commands/format_test.dart
+++ b/pkg/dartdev/test/commands/format_test.dart
@@ -19,7 +19,7 @@
 
   test('--help', () {
     p = project();
-    var result = p.runSync(['format', '--help']);
+    var result = p.runSync('format', ['--help']);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Idiomatically format Dart source code.'));
@@ -32,7 +32,7 @@
 
   test('--help --verbose', () {
     p = project();
-    var result = p.runSync(['format', '--help', '--verbose']);
+    var result = p.runSync('format', ['--help', '--verbose']);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Idiomatically format Dart source code.'));
@@ -45,7 +45,7 @@
 
   test('unchanged', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    ProcessResult result = p.runSync(['format', p.relativeFilePath]);
+    ProcessResult result = p.runSync('format', [p.relativeFilePath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, startsWith('Formatted 1 file (0 changed) in '));
@@ -53,7 +53,7 @@
 
   test('formatted', () {
     p = project(mainSrc: 'int get foo =>       1;\n');
-    ProcessResult result = p.runSync(['format', p.relativeFilePath]);
+    ProcessResult result = p.runSync('format', [p.relativeFilePath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(
@@ -65,7 +65,7 @@
   test('unknown file', () {
     p = project(mainSrc: 'int get foo => 1;\n');
     var unknownFilePath = '${p.relativeFilePath}-unknown-file.dart';
-    ProcessResult result = p.runSync(['format', unknownFilePath]);
+    ProcessResult result = p.runSync('format', [unknownFilePath]);
     expect(result.exitCode, 0);
     expect(result.stderr,
         startsWith('No file or directory found at "$unknownFilePath".'));
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
index afbaf09..c272e43 100644
--- a/pkg/dartdev/test/commands/help_test.dart
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:args/command_runner.dart';
 import 'package:dartdev/dartdev.dart';
+import 'package:dartdev/src/analytics.dart' show disabledAnalytics;
 import 'package:test/test.dart';
 
 import '../utils.dart';
@@ -21,14 +22,14 @@
   List<String> _commandsNotTested = <String>[
     'help', // `dart help help` is redundant
   ];
-  DartdevRunner(['--no-analytics'])
+  DartdevRunner(['--disable-dartdev-analytics'], disabledAnalytics)
       .commands
       .forEach((String commandKey, Command command) {
     if (!_commandsNotTested.contains(commandKey)) {
       test('(help $commandKey == $commandKey --help)', () {
         p = project();
-        var result = p.runSync(['help', commandKey]);
-        var verbHelpResult = p.runSync([commandKey, '--help']);
+        var result = p.runSync('help', [commandKey]);
+        var verbHelpResult = p.runSync(commandKey, ['--help']);
 
         expect(result.stdout, contains(verbHelpResult.stdout));
         expect(result.stderr, contains(verbHelpResult.stderr));
@@ -38,15 +39,15 @@
 
   test('(help pub == pub --help)', () {
     p = project();
-    var result = p.runSync(['help', 'pub']);
-    var pubHelpResult = p.runSync(['pub', '--help']);
+    var result = p.runSync('help', ['pub']);
+    var pubHelpResult = p.runSync('pub', ['--help']);
 
     expect(result.stdout, contains(pubHelpResult.stdout));
     expect(result.stderr, contains(pubHelpResult.stderr));
   });
 
   test('(--help flags also have -h abbr)', () {
-    DartdevRunner(['--no-analytics'])
+    DartdevRunner(['--disable-dartdev-analytics'], disabledAnalytics)
         .commands
         .forEach((String commandKey, Command command) {
       var helpOption = command.argParser.options['help'];
diff --git a/pkg/dartdev/test/commands/migrate_test.dart b/pkg/dartdev/test/commands/migrate_test.dart
index 681d550..8101640 100644
--- a/pkg/dartdev/test/commands/migrate_test.dart
+++ b/pkg/dartdev/test/commands/migrate_test.dart
@@ -21,7 +21,7 @@
 
   test('--help', () {
     p = project();
-    var result = p.runSync(['migrate', '--help']);
+    var result = p.runSync('migrate', ['--help']);
 
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
@@ -34,7 +34,7 @@
   test('directory implicit', () {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
     var result =
-        p.runSync(['migrate', '--no-web-preview'], workingDir: p.dirPath);
+        p.runSync('migrate', ['--no-web-preview'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Generating migration suggestions'));
@@ -42,7 +42,7 @@
 
   test('directory explicit', () {
     p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
-    var result = p.runSync(['migrate', '--no-web-preview', p.dirPath]);
+    var result = p.runSync('migrate', ['--no-web-preview', p.dirPath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('Generating migration suggestions'));
@@ -50,7 +50,7 @@
 
   test('bad directory', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    var result = p.runSync(['migrate', 'foo_bar_dir']);
+    var result = p.runSync('migrate', ['foo_bar_dir']);
     expect(result.exitCode, 1);
     expect(result.stderr, contains('foo_bar_dir does not exist'));
     expect(result.stdout, isEmpty);
@@ -58,7 +58,7 @@
 
   test('pub get needs running', () {
     p = project(mainSrc: 'import "package:foo/foo.dart";\n');
-    var result = p.runSync(['migrate', p.dirPath]);
+    var result = p.runSync('migrate', [p.dirPath]);
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
     expect(result.stdout, runPubGet);
@@ -67,7 +67,7 @@
 
   test('non-pub-related error', () {
     p = project(mainSrc: 'var missing = "semicolon"\n');
-    var result = p.runSync(['migrate', p.dirPath]);
+    var result = p.runSync('migrate', [p.dirPath]);
     expect(result.exitCode, 1);
     expect(result.stderr, isEmpty);
     expect(result.stdout, runPubGet);
diff --git a/pkg/dartdev/test/commands/pub_test.dart b/pkg/dartdev/test/commands/pub_test.dart
index e164858..82f00d0 100644
--- a/pkg/dartdev/test/commands/pub_test.dart
+++ b/pkg/dartdev/test/commands/pub_test.dart
@@ -26,7 +26,7 @@
   }
 
   test('implicit --help', () {
-    final result = project().runSync(['pub']);
+    final result = project().runSync('pub', []);
     expect(result, isNotNull);
     expect(result.exitCode, 64);
     expect(result.stderr, contains('Missing subcommand for "dart pub".'));
@@ -35,17 +35,17 @@
   });
 
   test('--help', () {
-    _assertPubHelpInvoked(project().runSync(['pub', '--help']));
+    _assertPubHelpInvoked(project().runSync('pub', ['--help']));
   });
 
   test('-h', () {
-    _assertPubHelpInvoked(project().runSync(['pub', '-h']));
+    _assertPubHelpInvoked(project().runSync('pub', ['-h']));
   });
 
   test('help cache', () {
     p = project();
-    var result = p.runSync(['help', 'pub', 'cache']);
-    var result2 = p.runSync(['pub', 'cache', '--help']);
+    var result = p.runSync('help', ['pub', 'cache']);
+    var result2 = p.runSync('pub', ['cache', '--help']);
 
     expect(result.exitCode, 0);
 
@@ -58,8 +58,8 @@
 
   test('help publish', () {
     p = project();
-    var result = p.runSync(['help', 'pub', 'publish']);
-    var result2 = p.runSync(['pub', 'publish', '--help']);
+    var result = p.runSync('help', ['pub', 'publish']);
+    var result2 = p.runSync('pub', ['publish', '--help']);
 
     expect(result.exitCode, 0);
 
@@ -77,10 +77,10 @@
         "void main() { int? a; a = null; print('a is \$a.'); }");
 
     // run 'pub get'
-    p.runSync(['pub', 'get']);
+    p.runSync('pub', ['get']);
 
     var result = p.runSync(
-        ['pub', 'run', '--enable-experiment=no-non-nullable', 'main.dart']);
+        'pub', ['run', '--enable-experiment=no-non-nullable', 'main.dart']);
 
     expect(result.exitCode, 254);
     expect(result.stdout, isEmpty);
@@ -93,7 +93,7 @@
 
   test('failure', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    var result = p.runSync(['pub', 'deps']);
+    var result = p.runSync('pub', ['deps']);
     expect(result.exitCode, 65);
     expect(result.stdout, isEmpty);
     expect(result.stderr, contains('No pubspec.lock file found'));
@@ -101,7 +101,7 @@
 
   test('failure unknown option', () {
     p = project(mainSrc: 'int get foo => 1;\n');
-    var result = p.runSync(['pub', 'deps', '--foo']);
+    var result = p.runSync('pub', ['deps', '--foo']);
     expect(result.exitCode, 64);
     expect(result.stdout, isEmpty);
     expect(result.stderr, startsWith('Could not find an option named "foo".'));
diff --git a/pkg/dartdev/test/commands/run_test.dart b/pkg/dartdev/test/commands/run_test.dart
index 9fd83e5..324e3f5 100644
--- a/pkg/dartdev/test/commands/run_test.dart
+++ b/pkg/dartdev/test/commands/run_test.dart
@@ -20,7 +20,7 @@
 
   test('--help', () {
     p = project();
-    var result = p.runSync(['run', '--help']);
+    var result = p.runSync('run', ['--help']);
 
     expect(result.stdout, contains('Run a Dart program.'));
     expect(result.stdout, contains('Debugging options:'));
@@ -30,7 +30,7 @@
 
   test("'Hello World'", () {
     p = project(mainSrc: "void main() { print('Hello World'); }");
-    ProcessResult result = p.runSync(['run', p.relativeFilePath]);
+    ProcessResult result = p.runSync('run', [p.relativeFilePath]);
 
     expect(result.stdout, contains('Hello World'));
     expect(result.stderr, isEmpty);
@@ -40,7 +40,7 @@
   test('no such file', () {
     p = project(mainSrc: "void main() { print('Hello World'); }");
     ProcessResult result =
-        p.runSync(['run', 'no/such/file/${p.relativeFilePath}']);
+        p.runSync('run', ['no/such/file/${p.relativeFilePath}']);
 
     expect(result.stderr, isNotEmpty);
     expect(result.exitCode, isNot(0));
@@ -51,7 +51,7 @@
     // name (package name) will be the name of the temporary directory on disk
     p = project(mainSrc: "void main() { print('Hello World'); }");
     p.file('bin/main.dart', "void main() { print('Hello main.dart'); }");
-    ProcessResult result = p.runSync(['run']);
+    ProcessResult result = p.runSync('run', []);
 
     expect(result.stdout, contains('Hello main.dart'));
     expect(result.stderr, isEmpty);
@@ -62,7 +62,7 @@
   test('missing implicit packageName.dart', () {
     p = project(mainSrc: "void main() { print('Hello World'); }");
     p.file('bin/foo.dart', "void main() { print('Hello main.dart'); }");
-    ProcessResult result = p.runSync(['run']);
+    ProcessResult result = p.runSync('run', []);
 
     expect(result.stdout, isEmpty);
     expect(
@@ -75,8 +75,7 @@
   test('arguments are properly passed', () {
     p = project();
     p.file('main.dart', 'void main(args) { print(args); }');
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       '--enable-experiment=triple-shift',
       'main.dart',
       'argument1',
@@ -94,8 +93,7 @@
     p.file('main.dart', 'void main(args) { print(args); }');
     // Test with absolute path
     final name = path.join(p.dirPath, 'main.dart');
-    final result = p.runSync([
-      'run',
+    final result = p.runSync('run', [
       '--enable-experiment=triple-shift',
       name,
       '--argument1',
@@ -113,8 +111,7 @@
     p.file('main.dart', 'void main(args) { print(args); }');
     // Test with File uri
     final name = path.join(p.dirPath, 'main.dart');
-    final result = p.runSync([
-      'run',
+    final result = p.runSync('run', [
       Uri.file(name).toString(),
       '--argument1',
       'argument2',
@@ -137,8 +134,7 @@
     //
     // This test ensures that allowed arguments for dart run which are valid VM
     // arguments are properly handled by the VM.
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       '--observe',
       '--pause-isolates-on-start',
       // This should negate the above flag.
@@ -157,8 +153,7 @@
     expect(result.exitCode, 0);
 
     // Again, with --disable-service-auth-codes.
-    result = p.runSync([
-      'run',
+    result = p.runSync('run', [
       '--observe',
       '--pause-isolates-on-start',
       // This should negate the above flag.
@@ -183,8 +178,7 @@
 
     // Any VM flags not listed under 'dart run help --verbose' should be passed
     // before a dartdev command.
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       '--vm-name=foo',
       p.relativeFilePath,
     ]);
@@ -202,8 +196,7 @@
 
     // Any VM flags not listed under 'dart run help --verbose' should be passed
     // before a dartdev command.
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       '--verbose_gc',
       p.relativeFilePath,
     ]);
@@ -221,8 +214,7 @@
 
     // Ensure --enable-asserts doesn't cause the dartdev isolate to fail to
     // load. Regression test for: https://github.com/dart-lang/sdk/issues/42831
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       '--enable-asserts',
       p.relativeFilePath,
     ]);
@@ -236,8 +228,7 @@
     p = project(mainSrc: 'void main() { assert(false); }');
 
     // Any VM flags passed after the script shouldn't be interpreted by the VM.
-    ProcessResult result = p.runSync([
-      'run',
+    ProcessResult result = p.runSync('run', [
       p.relativeFilePath,
       '--enable-asserts',
     ]);
diff --git a/pkg/dartdev/test/commands/test_test.dart b/pkg/dartdev/test/commands/test_test.dart
index 00be2bc..ff85982 100644
--- a/pkg/dartdev/test/commands/test_test.dart
+++ b/pkg/dartdev/test/commands/test_test.dart
@@ -21,7 +21,7 @@
   test('--help', () {
     p = project();
 
-    final result = p.runSync(['test', '--help']);
+    final result = p.runSync('test', ['--help']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, contains(' tests in this package'));
@@ -31,7 +31,7 @@
   test('dart help test', () {
     p = project();
 
-    final result = p.runSync(['help', 'test']);
+    final result = p.runSync('help', ['test']);
 
     expect(result.exitCode, 0);
     expect(result.stdout, contains(' tests in this package'));
@@ -43,7 +43,7 @@
     var pubspec = File(path.join(p.dirPath, 'pubspec.yaml'));
     pubspec.deleteSync();
 
-    var result = p.runSync(['test']);
+    var result = p.runSync('test', []);
 
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('No pubspec.yaml file found'));
@@ -63,7 +63,7 @@
 ''');
 
     // An implicit `pub get` will happen.
-    final result = p.runSync(['test', '--no-color', '--reporter', 'expanded']);
+    final result = p.runSync('test', ['--no-color', '--reporter', 'expanded']);
     expect(result.stderr, isEmpty);
     expect(result.stdout, contains('All tests passed!'));
     expect(result.exitCode, 0);
@@ -86,8 +86,7 @@
 }
 ''');
 
-    final result = p.runSync(['test']);
-    expect(result.exitCode, 65);
+    final result = p.runSync('test', []);
     expect(
       result.stdout,
       contains('You need to add a dependency on package:test'),
@@ -95,10 +94,10 @@
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 65);
 
-    final resultPubAdd = p.runSync(['pub', 'add', 'test']);
+    final resultPubAdd = p.runSync('pub', ['add', 'test']);
 
     expect(resultPubAdd.exitCode, 0);
-    final result2 = p.runSync(['test', '--no-color', '--reporter', 'expanded']);
+    final result2 = p.runSync('test', ['--no-color', '--reporter', 'expanded']);
     expect(result2.stderr, isEmpty);
     expect(result2.stdout, contains('All tests passed!'));
     expect(result2.exitCode, 0);
@@ -118,7 +117,7 @@
 }
 ''');
 
-    final result = p.runSync(['test', '--no-color', '--reporter', 'expanded']);
+    final result = p.runSync('test', ['--no-color', '--reporter', 'expanded']);
     expect(result.exitCode, 0);
     expect(result.stdout, contains('All tests passed!'));
     expect(result.stderr, isEmpty);
@@ -139,13 +138,8 @@
 ''');
 
     final result = p.runSync(
-      [
-        '--enable-experiment=non-nullable',
-        'test',
-        '--no-color',
-        '--reporter',
-        'expanded',
-      ],
+      '--enable-experiment=non-nullable',
+      ['test', '--no-color', '--reporter', 'expanded'],
     );
     expect(result.exitCode, 1);
   });
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index 08910be..bbc46df 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -71,14 +71,16 @@
   }
 
   ProcessResult runSync(
+    String command,
     List<String> args, {
     String workingDir,
   }) {
     var arguments = [
-      '--no-analytics',
+      command,
       ...?args,
     ];
 
+    arguments.add('--disable-dartdev-analytics');
     return Process.runSync(Platform.resolvedExecutable, arguments,
         workingDirectory: workingDir ?? dir.path,
         environment: {if (logAnalytics) '_DARTDEV_LOG_ANALYTICS': 'true'});
diff --git a/pkg/dartdev/test/utils_test.dart b/pkg/dartdev/test/utils_test.dart
index 199d461..9740dd1 100644
--- a/pkg/dartdev/test/utils_test.dart
+++ b/pkg/dartdev/test/utils_test.dart
@@ -100,6 +100,39 @@
       expect(File('bar.bart').name, 'bar.bart');
     });
   });
+
+  group('PubUtils', () {
+    test('doModifyArgs', () {
+      const allCmds = ['analyze', 'help', 'pub', 'migrate'];
+      expect(PubUtils.shouldModifyArgs(null, null), isFalse);
+      expect(PubUtils.shouldModifyArgs([], null), isFalse);
+      expect(PubUtils.shouldModifyArgs(null, []), isFalse);
+      expect(PubUtils.shouldModifyArgs([], []), isFalse);
+      expect(PubUtils.shouldModifyArgs(['-h'], allCmds), isFalse);
+      expect(PubUtils.shouldModifyArgs(['--help'], allCmds), isFalse);
+      expect(PubUtils.shouldModifyArgs(['help'], allCmds), isFalse);
+      expect(PubUtils.shouldModifyArgs(['pub'], allCmds), isFalse);
+      expect(PubUtils.shouldModifyArgs(['analyze', 'help', 'pub'], allCmds),
+          isFalse);
+
+      expect(PubUtils.shouldModifyArgs(['--some-flag', 'help', 'pub'], allCmds),
+          isTrue);
+      expect(PubUtils.shouldModifyArgs(['help', 'pub'], allCmds), isTrue);
+      expect(PubUtils.shouldModifyArgs(['help', 'pub', 'publish'], allCmds),
+          isTrue);
+      expect(PubUtils.shouldModifyArgs(['help', 'pub', 'analyze'], allCmds),
+          isTrue);
+    });
+
+    test('modifyArgs', () {
+      expect(PubUtils.modifyArgs(['--some-flag', 'help', 'pub']),
+          orderedEquals(['--some-flag', 'pub', '--help']));
+      expect(PubUtils.modifyArgs(['help', 'pub']),
+          orderedEquals(['pub', '--help']));
+      expect(PubUtils.modifyArgs(['help', 'pub', 'publish']),
+          orderedEquals(['pub', 'publish', '--help']));
+    });
+  });
 }
 
 const String _packageData = '''{
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index 9bf97f5..db90835 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -640,7 +640,10 @@
 ''');
       }
       logger.stderr('https://github.com/dart-lang/sdk/issues/new');
+      var sdkVersion = Platform.version.split(' ')[0];
       logger.stderr('''
+Please include the SDK version ($sdkVersion) in your bug report.
+
 To attempt to perform migration anyway, you may re-run with
 --${CommandLineOptions.ignoreExceptionsFlag}.
 
@@ -704,6 +707,9 @@
         if (!options.ignoreErrors) {
           throw MigrationExit(1);
         }
+      } else if (analysisResult.allSourcesAlreadyMigrated) {
+        _logAlreadyMigrated();
+        throw MigrationExit(0);
       } else {
         logger.stdout('No analysis issues found.');
       }
@@ -750,6 +756,9 @@
 Use this interactive web view to review, improve, or apply the results.
 When finished with the preview, hit ctrl-c to terminate this process.
 
+If you make edits outside of the web view (in your IDE), use the 'Rerun from
+sources' action.
+
 ''');
 
       // Block until sigint (ctrl-c).
@@ -854,6 +863,10 @@
     }
   }
 
+  void _logAlreadyMigrated() {
+    logger.stdout(migratedAlready);
+  }
+
   void _logErrors(AnalysisResult analysisResult) {
     logger.stdout('');
 
@@ -919,6 +932,15 @@
           _fixCodeProcessor._task.instrumentationListener,
           {},
           analysisResult);
+    } else if (analysisResult.allSourcesAlreadyMigrated) {
+      _logAlreadyMigrated();
+      return MigrationState(
+          _fixCodeProcessor._task.migration,
+          _fixCodeProcessor._task.includedRoot,
+          _dartFixListener,
+          _fixCodeProcessor._task.instrumentationListener,
+          {},
+          analysisResult);
     } else {
       logger.stdout(ansi.emphasized('Re-generating migration suggestions...'));
       return await _fixCodeProcessor.runLaterPhases();
diff --git a/pkg/nnbd_migration/lib/src/exceptions.dart b/pkg/nnbd_migration/lib/src/exceptions.dart
index 580fcda..54ca2ba 100644
--- a/pkg/nnbd_migration/lib/src/exceptions.dart
+++ b/pkg/nnbd_migration/lib/src/exceptions.dart
@@ -4,9 +4,6 @@
 /// A [StateError] specific to the ways that the NNBD experiment can be
 /// misconfigured which may prevent the tool from working.
 class ExperimentStatusException extends StateError {
-  /// All files included in the migration dir have already been migrated.
-  ExperimentStatusException.migratedAlready() : super(migratedAlready);
-
   /// The SDK was analyzed without NNBD semantics.
   ExperimentStatusException.sdkExperimentDisabled() : super(nnbdExperimentOff);
 
diff --git a/pkg/nnbd_migration/lib/src/messages.dart b/pkg/nnbd_migration/lib/src/messages.dart
index 3f9b048..4202a47 100644
--- a/pkg/nnbd_migration/lib/src/messages.dart
+++ b/pkg/nnbd_migration/lib/src/messages.dart
@@ -5,15 +5,13 @@
 import 'package:nnbd_migration/migration_cli.dart';
 
 const String migratedAlready =
-    "Seem to be migrating code that's already migrated";
+    'All sources appear to be already migrated.  Nothing to do.';
 const String nnbdExperimentOff =
     'Analyzer seems to need the nnbd experiment on in the SDK.';
 const String sdkNnbdOff = 'Analysis seems to have an SDK without NNBD enabled.';
 const String sdkPathEnvironmentVariableSet =
     r'Note: $SDK_PATH environment variable is set and may point to outdated '
     'dart:core sources';
-const String _skipImportCheckFlag =
-    '--${CommandLineOptions.skipImportCheckFlag}';
 const String unmigratedDependenciesWarning = '''
 Warning: package has unmigrated dependencies.
 
@@ -21,6 +19,8 @@
 list of the unmigrated dependencies, re-run without the `$_skipImportCheckFlag`
 flag.
 ''';
+const String _skipImportCheckFlag =
+    '--${CommandLineOptions.skipImportCheckFlag}';
 
 String unmigratedDependenciesError(List<String> uris) => '''
 Error: package has unmigrated dependencies.
diff --git a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
index 6c89f59..69bde9d 100644
--- a/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_migration_impl.dart
@@ -191,12 +191,6 @@
   }
 
   Map<String, Version> finish() {
-    if (!_propagated) {
-      // [finalizeInput] sets this field to `true`, so if it's still false, that
-      // means it was never called; this probably means that all the code fed
-      // to the migration tool was already migrated.
-      throw ExperimentStatusException.migratedAlready();
-    }
     _postmortemFileWriter?.write();
     _instrumentation?.finished();
     return _neededPackages;
diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml
index 59072b4..7917b78 100644
--- a/pkg/nnbd_migration/pubspec.yaml
+++ b/pkg/nnbd_migration/pubspec.yaml
@@ -21,8 +21,8 @@
   yaml: ^2.1.15
 
 dev_dependencies:
-  analysis_tool:
-    path: ../analysis_tool
+  analyzer_utilities:
+    path: ../analyzer_utilities
   http: '>=0.11.3+17 <0.13.0'
   pedantic: ^1.9.0
   test: ^1.6.4
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index 9648403..3dc5556 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -243,13 +243,13 @@
 
   Future<String> assertErrorExit(
       MigrationCliRunner cliRunner, FutureOr<void> Function() callback,
-      {@required bool withUsage, dynamic expectedExitCode = anything}) async {
+      {@required bool withUsage, dynamic expectedExitCode}) async {
+    expectedExitCode ??= isNot(0);
     try {
       await callback();
       fail('Migration succeeded; expected it to abort with an error');
     } on MigrationExit catch (migrationExit) {
       expect(migrationExit.exitCode, isNotNull);
-      expect(migrationExit.exitCode, isNot(0));
       expect(migrationExit.exitCode, expectedExitCode);
     }
     expect(cliRunner.isPreviewServerRunning, isFalse);
@@ -313,7 +313,8 @@
   Future<String> assertRunFailure(List<String> args,
       {MigrationCli cli,
       bool withUsage = false,
-      dynamic expectedExitCode = anything}) async {
+      dynamic expectedExitCode}) async {
+    expectedExitCode ??= isNot(0);
     cli ??= _createCli();
     MigrationCliRunner cliRunner;
     try {
@@ -321,7 +322,6 @@
           cli.decodeCommandLineArgs(MigrationCli.createParser().parse(args));
     } on MigrationExit catch (e) {
       expect(e.exitCode, isNotNull);
-      expect(e.exitCode, isNot(0));
       expect(e.exitCode, expectedExitCode);
       return assertStderr(withUsage: withUsage);
     }
@@ -684,6 +684,11 @@
     expect(
         errorOutput, isNot(contains('try to fix errors in the source code')));
     expect(errorOutput, contains('re-run with\n--ignore-exceptions'));
+    expect(errorOutput, contains('consider filing a bug report'));
+    expect(
+        errorOutput,
+        contains(
+            RegExp(r'Please include the SDK version \([0-9]+\.[0-9]+\..*\)')));
   }
 
   test_lifecycle_exception_handling_ignore() async {
@@ -836,6 +841,15 @@
     expect(output, contains('Please fix the analysis issues'));
   }
 
+  test_lifecycle_migration_already_performed() async {
+    var projectContents = simpleProject(migrated: true);
+    var projectDir = createProjectDir(projectContents);
+    await assertRunFailure([projectDir], expectedExitCode: 0);
+    var output = logger.stdoutBuffer.toString();
+    expect(output,
+        contains('All sources appear to be already migrated.  Nothing to do.'));
+  }
+
   test_lifecycle_no_preview() async {
     var projectContents = simpleProject();
     var projectDir = createProjectDir(projectContents);
diff --git a/pkg/nnbd_migration/test/verify_tests_test.dart b/pkg/nnbd_migration/test/verify_tests_test.dart
index af19088..654c634 100644
--- a/pkg/nnbd_migration/test/verify_tests_test.dart
+++ b/pkg/nnbd_migration/test/verify_tests_test.dart
@@ -2,8 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_tool/package_root.dart' as package_root;
-import 'package:analysis_tool/verify_tests.dart';
+import 'package:analyzer_utilities/package_root.dart' as package_root;
+import 'package:analyzer_utilities/verify_tests.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
 
 void main() {
diff --git a/pkg/nnbd_migration/tool/steamroll_ecosystem.sh b/pkg/nnbd_migration/tool/steamroll_ecosystem.sh
index 9af3926..0c6374b 100755
--- a/pkg/nnbd_migration/tool/steamroll_ecosystem.sh
+++ b/pkg/nnbd_migration/tool/steamroll_ecosystem.sh
@@ -276,8 +276,8 @@
   case "${package_name}" in
     _fe_analyzer_shared) repo=sdk
       make_clone_from_package _fe_analyzer_shared "${repo}" master pkg/_fe_analyzer_shared ;;
-    analysis_tool) repo=sdk
-      make_clone_from_package analysis_tool "${repo}" master pkg/analysis_tool ;;
+    analyzer_utilities) repo=sdk
+      make_clone_from_package analyzer_utilities "${repo}" master pkg/analyzer_utilities ;;
     analyzer) repo=sdk
       make_clone_from_package analyzer "${repo}" master pkg/analyzer ;;
     build) repo=build
@@ -379,7 +379,7 @@
     # those here.
     case "${package_name}" in
       analyzer)
-        add_package_to_workspace "analysis_tool"
+        add_package_to_workspace "analyzer_utilities"
         ;;
     esac
     if [ -n "${NO_UPDATE}" ] || repo_changed_this_run "${repo}" ; then
@@ -447,4 +447,4 @@
 }
 
 
-main "$@"
\ No newline at end of file
+main "$@"
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index dedd3bc..452346f 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -387,7 +387,6 @@
 
   bool enable_dartdev_analytics = false;
   bool disable_dartdev_analytics = false;
-  bool no_dartdev_analytics = false;
 
   // Parse out the vm options.
   while (i < argc) {
@@ -406,14 +405,12 @@
       const char* kVerboseDebug1 = "--verbose_debug";
       const char* kVerboseDebug2 = "--verbose-debug";
 
-      // The following flags are processed as DartDev flags and are not to
+      // The following two flags are processed as DartDev flags and are not to
       // be treated as if they are VM flags.
       const char* kEnableDartDevAnalytics1 = "--enable-analytics";
       const char* kEnableDartDevAnalytics2 = "--enable_analytics";
       const char* kDisableDartDevAnalytics1 = "--disable-analytics";
       const char* kDisableDartDevAnalytics2 = "--disable_analytics";
-      const char* kNoDartDevAnalytics1 = "--no-analytics";
-      const char* kNoDartDevAnalytics2 = "--no_analytics";
 
       if ((strncmp(argv[i], kPrintFlags1, strlen(kPrintFlags1)) == 0) ||
           (strncmp(argv[i], kPrintFlags2, strlen(kPrintFlags2)) == 0)) {
@@ -429,12 +426,6 @@
                           strlen(kEnableDartDevAnalytics2)) == 0)) {
         enable_dartdev_analytics = true;
         skipVmOption = true;
-      } else if ((strncmp(argv[i], kNoDartDevAnalytics1,
-                          strlen(kNoDartDevAnalytics1)) == 0) ||
-                 (strncmp(argv[i], kNoDartDevAnalytics2,
-                          strlen(kNoDartDevAnalytics2)) == 0)) {
-        no_dartdev_analytics = true;
-        skipVmOption = true;
       } else if ((strncmp(argv[i], kDisableDartDevAnalytics1,
                           strlen(kDisableDartDevAnalytics1)) == 0) ||
                  (strncmp(argv[i], kDisableDartDevAnalytics2,
@@ -527,9 +518,6 @@
     if (disable_dartdev_analytics) {
       dart_options->AddArgument("--disable-analytics");
     }
-    if (no_dartdev_analytics) {
-      dart_options->AddArgument("--no-analytics");
-    }
     return 0;
   }
 
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 556b548..e6ff59a 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -303,8 +303,11 @@
     for (intptr_t i = 0; i < num_types; i++) {
       type_parameter ^= type_parameters.TypeAt(i);
       if (!type_parameter.IsFinalized()) {
-        type_parameter.set_index(type_parameter.index() + offset);
+        ASSERT(type_parameter.index() == i);
+        type_parameter.set_index(offset + i);
         type_parameter.SetIsFinalized();
+      } else {
+        ASSERT(type_parameter.index() == offset + i);
       }
       // The declaration of a type parameter is canonical.
       ASSERT(type_parameter.IsDeclaration());
@@ -821,8 +824,11 @@
     for (intptr_t i = 0; i < num_type_params; i++) {
       type_param ^= type_params.TypeAt(i);
       if (!type_param.IsFinalized()) {
+        ASSERT(type_param.index() == i);
         type_param.set_index(num_parent_type_params + i);
         type_param.SetIsFinalized();
+      } else {
+        ASSERT(type_param.index() == num_parent_type_params + i);
       }
       // The declaration of a type parameter is canonical.
       ASSERT(type_param.IsDeclaration());
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index 4b3b061..b2c1009 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -583,6 +583,9 @@
 };
 
 VM_UNIT_TEST_CASE(CleanupBequestNeverReceived) {
+  // This test uses features from isolate groups
+  FLAG_enable_isolate_groups = true;
+
   const char* TEST_MESSAGE = "hello, world";
   Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
   EXPECT_EQ(parent, Dart_CurrentIsolate());
@@ -615,6 +618,9 @@
 }
 
 VM_UNIT_TEST_CASE(ReceivesSendAndExitMessage) {
+  // This test uses features from isolate groups
+  FLAG_enable_isolate_groups = true;
+
   const char* TEST_MESSAGE = "hello, world";
   Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
   EXPECT_EQ(parent, Dart_CurrentIsolate());
diff --git a/runtime/vm/heap/verifier.cc b/runtime/vm/heap/verifier.cc
index 4c2da50..4dc7da0 100644
--- a/runtime/vm/heap/verifier.cc
+++ b/runtime/vm/heap/verifier.cc
@@ -89,11 +89,22 @@
     : thread_(thread), instanceHandle_(Instance::Handle(thread->zone())) {}
 
 void VerifyCanonicalVisitor::VisitObject(ObjectPtr obj) {
+  // The caller of this function is walking heap pages using the
+  // ExclusivePageIterator - which holds the pages lock.
+  //
+  // If we allow handle verification, then any assignment to a handle will call
+  // `heap()->Contains()` for heap objects, which in return is implemented by
+  // walking pages using ExclusivePageIterator, which can cause a deadlock.
+  //
+  // Therefore we disable the handle verification here.
+  const bool old_verify_flag = FLAG_verify_handles;
+  FLAG_verify_handles = false;
+
   // TODO(dartbug.com/36097): The heap walk can encounter canonical objects of
   // other isolates. We should either scan live objects from the roots of each
   // individual isolate, or wait until we are ready to share constants across
   // isolates.
-  if (!FLAG_enable_isolate_groups) {
+  if (!FLAG_enable_isolate_groups || FLAG_precompiled_mode) {
     if ((obj->GetClassId() >= kInstanceCid) &&
         (obj->GetClassId() != kTypeArgumentsCid)) {
       if (obj->ptr()->IsCanonical()) {
@@ -107,6 +118,7 @@
       }
     }
   }
+  FLAG_verify_handles = old_verify_flag;
 }
 #endif  // defined(DEBUG)
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 82605a8..ea79c98 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8326,6 +8326,7 @@
   // Note that parent pointers in newly instantiated signatures still points to
   // the original uninstantiated parent signatures. That is not a problem.
   const Function& parent = Function::Handle(zone, parent_function());
+  const intptr_t num_parent_type_params = NumParentTypeParameters();
 
   // See the comment on kCurrentAndEnclosingFree to understand why we don't
   // adjust 'num_free_fun_type_params' downward in this case.
@@ -8345,7 +8346,6 @@
     if (IsGeneric() || HasGenericParent()) {
       // We only consider the function type parameters declared by the parents
       // of this signature function as free.
-      const int num_parent_type_params = NumParentTypeParameters();
       if (num_parent_type_params < num_free_fun_type_params) {
         num_free_fun_type_params = num_parent_type_params;
       }
@@ -8354,6 +8354,8 @@
 
   Function& sig = Function::Handle(Function::NewSignatureFunction(
       owner, parent, TokenPosition::kNoSource, space));
+  const intptr_t offset =
+      sig.NumParentTypeParameters() - num_parent_type_params;
   AbstractType& type = AbstractType::Handle(zone);
 
   // Copy the type parameters and instantiate their bounds (if necessary).
@@ -8363,10 +8365,11 @@
     if (!type_params.IsNull()) {
       TypeArguments& instantiated_type_params = TypeArguments::Handle(zone);
       TypeParameter& type_param = TypeParameter::Handle(zone);
-      Class& cls = Class::Handle(zone);
+      const Class& null_class = Class::Handle(zone);
       String& param_name = String::Handle(zone);
       for (intptr_t i = 0; i < type_params.Length(); ++i) {
         type_param ^= type_params.TypeAt(i);
+        ASSERT(type_param.index() == num_parent_type_params + i);
         type = type_param.bound();
         if (!type.IsInstantiated(kAny, num_free_fun_type_params)) {
           type = type.InstantiateFrom(instantiator_type_arguments,
@@ -8377,12 +8380,14 @@
           if (type.IsNull()) {
             return Function::null();
           }
-          cls = type_param.parameterized_class();
+        }
+        if (offset > 0 || type.raw() != type_param.bound()) {
           param_name = type_param.name();
+          ASSERT(type_param.IsFunctionTypeParameter());
           ASSERT(type_param.IsFinalized());
           ASSERT(type_param.IsCanonical());
           type_param = TypeParameter::New(
-              cls, sig, type_param.index(), param_name, type,
+              null_class, sig, type_param.index() + offset, param_name, type,
               type_param.IsGenericCovariantImpl(), type_param.nullability(),
               type_param.token_pos());
           type_param.SetIsFinalized();
@@ -8838,6 +8843,9 @@
 
   // Set closure function's type parameters.
   auto& type_args_handle = TypeArguments::Handle(zone, type_parameters());
+  // This function cannot be local, therefore it has no generic parent.
+  // Its implicit closure function therefore has no generic parent function
+  // either. That is why it is safe to simply copy the type parameters.
   closure_function.set_type_parameters(type_args_handle);
   closure_function.UpdateCachedDefaultTypeArguments(thread);
 
@@ -20757,6 +20765,7 @@
     }
     object_store->set_canonical_type_parameters(table.Release());
   }
+  ASSERT(!type_parameter.IsDeclaration());
   return type_parameter.raw();
 }
 
@@ -20771,8 +20780,10 @@
   const TypeArguments& type_params = TypeArguments::Handle(
       zone, cls.IsNull() ? function.type_parameters() : cls.type_parameters());
   const intptr_t offset =
-      cls.IsNull() ? function.NumParentTypeParameters()
-                   : (cls.NumTypeArguments() - cls.NumTypeParameters());
+      IsFinalized()
+          ? (cls.IsNull() ? function.NumParentTypeParameters()
+                          : (cls.NumTypeArguments() - cls.NumTypeParameters()))
+          : 0;
   TypeParameter& type_parameter = TypeParameter::Handle(zone);
   type_parameter ^= type_params.TypeAt(index() - offset);
   ASSERT(!type_parameter.IsNull());
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index 048cda9..aaedbb7 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -296,7 +296,9 @@
   bool wait = true;
 
   EXPECT(isolate->heap()->GrowthControlState());
-  isolate->heap()->DisableGrowthControl();
+
+  NoHeapGrowthControlScope no_heap_growth_scope;
+
   for (intptr_t i = 0; i < kTaskCount; i++) {
     Dart::thread_pool()->Run<SimpleTaskWithZoneAllocation>(
         (i + 1), isolate, &threads[i], &sync, &monitor, &done_count, &wait);
diff --git a/tools/VERSION b/tools/VERSION
index 2193d6e..a76b3d2 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 40
+PRERELEASE 41
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/find_base_commit.dart b/tools/bots/find_base_commit.dart
index 2a75eca..5e3c9e2 100755
--- a/tools/bots/find_base_commit.dart
+++ b/tools/bots/find_base_commit.dart
@@ -3,9 +3,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Find the newest commit that has a full set of results on the bots.
-
-// @dart = 2.9
+// Find the newest commit that has a full set of results on the builders.
 
 import 'dart:async';
 import 'dart:convert';
@@ -17,13 +15,13 @@
 
 void main(List<String> args) async {
   final parser = new ArgParser();
-  parser.addMultiOption("bot",
+  parser.addMultiOption("builder",
       abbr: "b",
-      help: "Select the bots matching the glob pattern [option is repeatable]",
+      help: "Select the builders matching the glob [option is repeatable]",
       splitCommas: false);
   parser.addOption("branch",
       abbr: "B",
-      help: "Select the bots building this branch",
+      help: "Select the builders building this branch",
       defaultsTo: "master");
   parser.addOption("count",
       abbr: "c", help: "List this many commits", defaultsTo: "1");
@@ -33,7 +31,7 @@
   if (options["help"]) {
     print("""
 Usage: find_base_commit.dart [OPTION]...
-Find the newest commit that has a full set of results on the bots.
+Find the newest commit that has a full set of results on the builders.
 
 The options are as follows:
 
@@ -43,34 +41,50 @@
 
   int count = int.parse(options["count"]);
   final globs = new List<Glob>.from(
-      options["bot"].map((String pattern) => new Glob(pattern)));
+      options["builder"].map((String pattern) => new Glob(pattern)));
 
   // Download the most recent builds from buildbucket.
-  int maxBuilds = 1000;
-  final url = Uri.parse(
-      "https://cr-buildbucket.appspot.com/_ah/api/buildbucket/v1/search"
-      "?bucket=luci.dart.ci.sandbox"
-      "&max_builds=$maxBuilds"
-      "&status=COMPLETED"
-      "&fields=builds(url%2Cparameters_json)");
+  const maxBuilds = 1000;
+  final url = Uri.parse("https://cr-buildbucket.appspot.com"
+      "/prpc/buildbucket.v2.Builds/SearchBuilds");
   const maxRetries = 3;
   const timeout = const Duration(seconds: 30);
-  Map<String, dynamic> object;
+  final query = jsonEncode({
+    "predicate": {
+      "builder": {"project": "dart", "bucket": "ci.sandbox"},
+      "status": "ENDED_MASK"
+    },
+    "pageSize": maxBuilds,
+    "fields": "builds.*.builder.builder,builds.*.input"
+  });
+  late Map<String, dynamic> searchResult;
   for (int i = 1; i <= maxRetries; i++) {
     try {
       final client = new HttpClient();
-      final request = await client.getUrl(url).timeout(timeout);
+      final request = await client.postUrl(url).timeout(timeout)
+        ..headers.contentType = ContentType.json
+        ..headers.add(HttpHeaders.acceptHeader, ContentType.json)
+        ..write(query);
       final response = await request.close().timeout(timeout);
-      object = await response
+      if (response.statusCode != 200) {
+        print("Failed to search for builds: "
+            "${response.statusCode}:${response.reasonPhrase}");
+        exit(1);
+      }
+      const prefix = ")]}'";
+      searchResult = await (response
           .cast<List<int>>()
           .transform(new Utf8Decoder())
+          .map((event) =>
+              event.startsWith(prefix) ? event.substring(prefix.length) : event)
           .transform(new JsonDecoder())
+          .cast<Map<String, dynamic>>()
           .first
-          .timeout(timeout);
+          .timeout(timeout));
       client.close();
       break;
     } on TimeoutException catch (e) {
-      final inSeconds = e.duration.inSeconds;
+      final inSeconds = e.duration?.inSeconds;
       stderr.writeln(
           "Attempt $i of $maxRetries timed out after $inSeconds seconds");
       if (i == maxRetries) {
@@ -81,57 +95,61 @@
   }
 
   // Locate the builds we're interested in and map them to each commit. The
-  // builds returned by the API are sorted with the newest first. Since bots
+  // builds returned by the API are sorted with the newest first. Since builders
   // don't build back in time and always build the latest commit whenever they
   // can, the first time we see a commit, we know it's newer than all commits
-  // we haven't seen yet. The insertion order into the botsForCommits map will
-  // then sorted with the newest commit first.
-  final builds = object["builds"];
-  final botsForCommits = <String, Set<String>>{};
+  // we haven't seen yet. The insertion order into the buildersForCommits map
+  // will then sorted with the newest commit first.
+  final builds = searchResult["builds"];
+  if (builds == null) {
+    print("No builds found");
+    exit(1);
+  }
+  final buildersForCommits = <String, Set<String>>{};
   for (final build in builds) {
-    final parameters = jsonDecode(build["parameters_json"]);
-    final bot = parameters["builder_name"];
-    if (bot.endsWith("-beta") ||
-        bot.endsWith("-dev") ||
-        bot.endsWith("-stable")) {
+    final builder = build["builder"]?["builder"];
+    if (builder is! String ||
+        builder.endsWith("-beta") ||
+        builder.endsWith("-dev") ||
+        builder.endsWith("-stable")) {
       // Ignore the release builders. The -try builders aren't in the
       // bucket we're reading.
       continue;
     }
-    if (globs.isNotEmpty && !globs.any((glob) => glob.matches(bot))) {
-      // Filter way bots we're not interested in.
+    if (globs.isNotEmpty && !globs.any((glob) => glob.matches(builder))) {
+      // Filter way builders we're not interested in.
       continue;
     }
-    final properties = parameters["properties"];
-    final branch = properties["branch"];
-    if (branch != null && branch != "refs/heads/${options['branch']}") {
-      // Ignore bots that are building the wrong branch.
+    final input = build["input"]?["gitilesCommit"];
+    if (input == null) {
+      // Ignore builds not triggered by a commit, e.g. fuzz-linux.
       continue;
     }
-    final commit = properties["revision"];
-    if (commit == null) {
-      // Ignore bots that aren't commit based, e.g. fuzz-linux.
+    final ref = input["ref"];
+    if (ref != "refs/heads/${options['branch']}") {
+      // Ignore builds on the wrong branch.
       continue;
     }
-    final botsForCommit =
-        botsForCommits.putIfAbsent(commit, () => new Set<String>());
-    botsForCommit.add(bot);
+    final commit = input["id"] as String;
+    final buildersForCommit =
+        buildersForCommits.putIfAbsent(commit, () => new Set<String>());
+    buildersForCommit.add(builder);
   }
 
-  if (botsForCommits.isEmpty) {
-    print("Failed to locate any commits having run on the bots");
+  if (buildersForCommits.isEmpty) {
+    print("Failed to locate any commits having run on the builders");
     exitCode = 1;
     return;
   }
 
   int maxBots = 0;
-  for (final commit in botsForCommits.keys) {
-    maxBots = max(maxBots, botsForCommits[commit].length);
+  for (final builders in buildersForCommits.values) {
+    maxBots = max(maxBots, builders.length);
   }
 
-  // List commits run on the most bots.
-  for (final commit in botsForCommits.keys
-      .where((commit) => botsForCommits[commit].length == maxBots)
+  // List commits run on the most builders.
+  for (final commit in buildersForCommits.keys
+      .where((commit) => buildersForCommits[commit]!.length == maxBots)
       .take(count)) {
     print(commit);
   }
