diff --git a/.gitignore b/.gitignore
index 9c674bd..9bd1379 100644
--- a/.gitignore
+++ b/.gitignore
@@ -75,9 +75,8 @@
 packages
 pubspec.lock
 
-# The top level package files (these are auto-generated per checkout)
+# The top level package file (this is auto-generated per checkout).
 /.dart_tool/package_config.json
-/.packages
 
 # Local pub storage
 .pub
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 34479e4..4ac2208 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 ## 2.19.0
 
+#### Dart command line
+
+- **Breaking change** [#46100](https://github.com/dart-lang/sdk/issues/46100):
+  The standalone `dartanalyzer` tool has been removed as previously
+  announced. `dartanalyzer` is replaced by the `dart analyze` command.
+
 ### Language
 
 - **Breaking Change** [#48167](https://github.com/dart-lang/sdk/issues/48167):
diff --git a/DEPS b/DEPS
index 73593dd..6ba6564 100644
--- a/DEPS
+++ b/DEPS
@@ -108,7 +108,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
   "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea", # manually rev'd
 
-  "dartdoc_rev": "d8195107d3e65e20094bb2ca0a8e8576e3a765bf",
+  "dartdoc_rev": "900432d8cb1e75c4f28c79d94c3036fd3b3ec21d",
   "devtools_rev": "0aa619c42a68d6db4c94a7838121811aba8f5eb1",
   "ffi_rev": "18b2b549d55009ff594600b04705ff6161681e07",
   "file_rev": "0132eeedea2933513bf230513a766a8baeab0c4f",
@@ -135,7 +135,7 @@
   "path_rev": "7a0ed40280345b1c11df4c700c71e590738f4257",
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_rev": "fa84ddd0e39f45bf3f09dcc5d6b9fbdda7820fef",
-  "protobuf_rev": "7ac39080eb886e6eec55983dcba76e855c038701",
+  "protobuf_rev": "66593ca5a4d163b2f9a469a2b6368e12a710e550",
   "pub_rev": "9bf4289d6fd5d6872a8929d6312bbd7098f3ea9c", # manually rev'd
   "pub_semver_rev": "5c0b4bfd5ca57fe16f1319c581dc8c882e9b8cb2",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
@@ -153,7 +153,7 @@
   "test_descriptor_rev": "5ed5d7f6bf1191592995dcb8eedbbc17df69d386",
   "test_process_rev": "3e695bcfeab551473ddc288970f345f30e5e1375",
   "test_reflective_loader_rev": "8d0de01bbe852fea1f8e33aba907abcba50a8a1e",
-  "test_rev": "6d656f60f2c486efce5f4f22ff00dbb037a825f1",
+  "test_rev": "ed73bb93b06280cd47108d202cd96bcf3494df65",
   "typed_data_rev": "bb10b64f9a56b8fb49307d4465474bf1c1309f6d",
   "usage_rev": "1d3c31e780af665fb796a27898a441fcb7d263db",
   "vector_math_rev": "cdcee487bde4353a6ba7a29bfc7db3840426e50f",
@@ -161,7 +161,7 @@
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
   "web_socket_channel_rev": "99dbdc5769e19b9eeaf69449a59079153c6a8b1f",
   "WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
-  "webdev_rev": "b0a4059dcdfb3af2a011cbefc5eb21fb0cfd8032",
+  "webdev_rev": "9c4428472b04f50748ea4871829897cff43455a3",
   "webdriver_rev": "e1a9ad671ee82e05eee463f922a34585ed2d2f15",
   "webkit_inspection_protocol_rev": "57522d6b29d94903b765c757079d906555d5a171",
   "yaml_edit_rev": "01589b3ce447b03aed991db49f1ec6445ad5476d",
diff --git a/README.dart-sdk b/README.dart-sdk
index 99dbb49..61ffe7e 100644
--- a/README.dart-sdk
+++ b/README.dart-sdk
@@ -9,7 +9,6 @@
   dartaotruntime   Minimal Dart runtime for running AOT modules
   dart2js          Dart to JavaScript production compiler
   dartdevc         Dart to Javascript development compiler
-  dartanalyzer     Dart static analyzer
   dartdoc          Dart documentation generator
 
 include/           header files that define the Dart embedding API for use by
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index f49952a..c089234 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -478,7 +478,7 @@
 * Deprecated `AstFactory.indexExpressionForTarget()`.  Please use
   `indexExpressionForTarget2` instead.
 * Deprecated `ClassElement.isOrInheritsProxy` and `ClassElement.isProxy`.  The
-  `@proxy` annotation is deprecated in the langauge, and will be removed.
+  `@proxy` annotation is deprecated in the language, and will be removed.
 * Added new error codes: BODY_MIGHT_COMPLETE_NORMALLY,
   CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE,
   DEFINITELY_UNASSIGNED_LATE_LOCAL_VARIABLE, LATE_FINAL_LOCAL_ALREADY_ASSIGNED,
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 3bc7339..b249140 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -32,6 +32,7 @@
 import '../js_ast/source_map_printer.dart'
     show NodeEnd, NodeSpan, HoverComment, continueSourceMap;
 import 'constants.dart';
+import 'future_or_normalizer.dart';
 import 'js_interop.dart';
 import 'js_typerep.dart';
 import 'kernel_helpers.dart';
@@ -939,7 +940,7 @@
           }
           return _emitInterfaceType(t, emitNullability: emitNullability);
         } else if (t is FutureOrType) {
-          var normalizedType = _normalizeFutureOr(t);
+          var normalizedType = normalizeFutureOr(t, _coreTypes);
           if (normalizedType is FutureOrType) {
             _declareBeforeUse(_coreTypes.deprecatedFutureOrClass);
             var typeRep = _emitFutureOrTypeWithArgument(
@@ -2911,64 +2912,6 @@
           ? visitNullType(const NullType())
           : _emitNullabilityWrapper(runtimeCall('Never'), type.nullability);
 
-  /// Normalizes `FutureOr` types.
-  ///
-  /// Any changes to the normalization logic here should be mirrored in the
-  /// classes.dart runtime library method named `normalizeFutureOr`.
-  DartType _normalizeFutureOr(FutureOrType futureOr) {
-    var typeArgument = futureOr.typeArgument;
-    if (typeArgument is DynamicType) {
-      // FutureOr<dynamic> --> dynamic
-      return typeArgument;
-    }
-    if (typeArgument is VoidType) {
-      // FutureOr<void> --> void
-      return typeArgument;
-    }
-
-    if (typeArgument is InterfaceType &&
-        typeArgument.classNode == _coreTypes.objectClass) {
-      // Normalize FutureOr of Object, Object?, Object*.
-      var nullable = futureOr.nullability == Nullability.nullable ||
-          typeArgument.nullability == Nullability.nullable;
-      var legacy = futureOr.nullability == Nullability.legacy ||
-          typeArgument.nullability == Nullability.legacy;
-      var nullability = nullable
-          ? Nullability.nullable
-          : legacy
-              ? Nullability.legacy
-              : Nullability.nonNullable;
-      return typeArgument.withDeclaredNullability(nullability);
-    } else if (typeArgument is NeverType) {
-      // FutureOr<Never> --> Future<Never>
-      return InterfaceType(
-          _coreTypes.futureClass, futureOr.nullability, [typeArgument]);
-    } else if (typeArgument is NullType) {
-      // FutureOr<Null> --> Future<Null>?
-      return InterfaceType(
-          _coreTypes.futureClass, Nullability.nullable, [typeArgument]);
-    } else if (futureOr.declaredNullability == Nullability.nullable &&
-        typeArgument.nullability == Nullability.nullable) {
-      // FutureOr<T?>? --> FutureOr<T?>
-      return futureOr.withDeclaredNullability(Nullability.nonNullable);
-    }
-    // The following is not part of the normalization spec but this is a
-    // convenient place to perform this change of nullability consistently. This
-    // only applies at compile-time and is not needed in the runtime version of
-    // the FutureOr normalization.
-    // FutureOr<T%>% --> FutureOr<T%>
-    //
-    // If the type argument has undetermined nullability the CFE propagates
-    // it to the FutureOr type as well. In this case we can represent the
-    // FutureOr type without any nullability wrappers and rely on the runtime to
-    // handle the nullability of the instantiated type appropriately.
-    if (futureOr.nullability == Nullability.undetermined &&
-        typeArgument.nullability == Nullability.undetermined) {
-      return futureOr.withDeclaredNullability(Nullability.nonNullable);
-    }
-    return futureOr;
-  }
-
   @override
   js_ast.Expression visitInterfaceType(InterfaceType type) =>
       _emitInterfaceType(type);
@@ -2979,7 +2922,7 @@
 
   @override
   js_ast.Expression visitFutureOrType(FutureOrType type) {
-    var normalizedType = _normalizeFutureOr(type);
+    var normalizedType = normalizeFutureOr(type, _coreTypes);
     return normalizedType is FutureOrType
         ? _emitFutureOrType(normalizedType)
         : normalizedType.accept(this);
@@ -6534,7 +6477,7 @@
   String? _annotationName(NamedNode node, bool Function(Expression) test) {
     var annotation = findAnnotation(node, test);
     return annotation != null
-        ? _constants.getFieldValueFromAnnotation(annotation, 'name') as String
+        ? _constants.getFieldValueFromAnnotation(annotation, 'name') as String?
         : null;
   }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/future_or_normalizer.dart b/pkg/dev_compiler/lib/src/kernel/future_or_normalizer.dart
new file mode 100644
index 0000000..492167b
--- /dev/null
+++ b/pkg/dev_compiler/lib/src/kernel/future_or_normalizer.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// 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:kernel/ast.dart';
+import 'package:kernel/core_types.dart';
+import 'package:kernel/kernel.dart';
+import 'package:kernel/src/replacement_visitor.dart';
+
+/// Normalizes all `FutureOr` types found in [type].
+DartType normalizeFutureOr(DartType type, CoreTypes coreTypes) =>
+    type.accept1(_FutureOrNormalizer.instance(coreTypes), Variance.unrelated) ??
+    type;
+
+/// Visit methods returns a normalized version of `FutureOr` types or `null` if
+/// no normalization was applied.
+///
+/// The `variance` parameters in the visit methods are unused in this type
+/// replacement.
+///
+/// `FutureOr` types are normalized per the spec:
+/// https://github.com/dart-lang/language/blob/master/resources/type-system/normalization.md
+///
+/// Any changes to the normalization logic here should be mirrored in the
+/// classes.dart runtime library method named `normalizeFutureOr`.
+class _FutureOrNormalizer extends ReplacementVisitor {
+  final CoreTypes _coreTypes;
+
+  static _FutureOrNormalizer? _instance;
+
+  _FutureOrNormalizer._(this._coreTypes);
+
+  factory _FutureOrNormalizer.instance(CoreTypes coreTypes) =>
+      _instance ?? (_instance = _FutureOrNormalizer._(coreTypes));
+
+  @override
+  DartType? visitFutureOrType(FutureOrType futureOr, int variance) {
+    var normalizedTypeArg = futureOr.typeArgument.accept1(this, variance);
+    var typeArgument = normalizedTypeArg ?? futureOr.typeArgument;
+    if (typeArgument is DynamicType) {
+      // FutureOr<dynamic> --> dynamic
+      return typeArgument;
+    }
+    if (typeArgument is VoidType) {
+      // FutureOr<void> --> void
+      return typeArgument;
+    }
+
+    if (typeArgument is InterfaceType &&
+        typeArgument.classNode == _coreTypes.objectClass) {
+      // Normalize FutureOr of Object, Object?, Object*.
+      var nullable = futureOr.nullability == Nullability.nullable ||
+          typeArgument.nullability == Nullability.nullable;
+      var legacy = futureOr.nullability == Nullability.legacy ||
+          typeArgument.nullability == Nullability.legacy;
+      var nullability = nullable
+          ? Nullability.nullable
+          : legacy
+              ? Nullability.legacy
+              : Nullability.nonNullable;
+      return typeArgument.withDeclaredNullability(nullability);
+    } else if (typeArgument is NeverType) {
+      // FutureOr<Never> --> Future<Never>
+      return InterfaceType(
+          _coreTypes.futureClass, futureOr.nullability, [typeArgument]);
+    } else if (typeArgument is NullType) {
+      // FutureOr<Null> --> Future<Null>?
+      return InterfaceType(
+          _coreTypes.futureClass, Nullability.nullable, [typeArgument]);
+    } else if (futureOr.declaredNullability == Nullability.nullable &&
+        typeArgument.nullability == Nullability.nullable) {
+      // FutureOr<T?>? --> FutureOr<T?>
+      return futureOr.withDeclaredNullability(Nullability.nonNullable);
+    }
+    // The following is not part of the normalization spec but this is a
+    // convenient place to perform this change of nullability consistently. This
+    // only applies at compile-time and is not needed in the runtime version of
+    // the FutureOr normalization.
+    // FutureOr<T%>% --> FutureOr<T%>
+    //
+    // If the type argument has undetermined nullability the CFE propagates
+    // it to the FutureOr type as well. In this case we can represent the
+    // FutureOr type without any nullability wrappers and rely on the runtime to
+    // handle the nullability of the instantiated type appropriately.
+    if (futureOr.declaredNullability == Nullability.undetermined &&
+        typeArgument.declaredNullability == Nullability.undetermined) {
+      return futureOr.withDeclaredNullability(Nullability.nonNullable);
+    }
+    return null;
+  }
+}
diff --git a/pkg/language_versioning_2.7_test/pubspec.yaml b/pkg/language_versioning_2.7_test/pubspec.yaml
deleted file mode 100644
index 5ee0691..0000000
--- a/pkg/language_versioning_2.7_test/pubspec.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-name: language_versioning_2.7_test
-version: 1.0.0
-
-description: >
-  Tests of language versioning.
-  Stored as a package in order to have its own package configuration
-  and default language version
-
-# This package is not intended for consumption on pub.dev. DO NOT publish.
-publish_to: none
-
-environment:
-  sdk: '>=2.7.0 <3.0.0'
diff --git a/pkg/language_versioning_2.7_test/OWNERS b/pkg/language_versioning_2_7_test/OWNERS
similarity index 100%
rename from pkg/language_versioning_2.7_test/OWNERS
rename to pkg/language_versioning_2_7_test/OWNERS
diff --git a/pkg/language_versioning_2_7_test/analysis_options.yaml b/pkg/language_versioning_2_7_test/analysis_options.yaml
new file mode 100644
index 0000000..9cd4fca
--- /dev/null
+++ b/pkg/language_versioning_2_7_test/analysis_options.yaml
@@ -0,0 +1,8 @@
+include: package:lints/recommended.yaml
+
+analyzer:
+  exclude:
+    # These files have intentional errors.
+    - test/lib_ex2.7_test.dart
+    - test/lib_ex2.8_test.dart
+    - test/lib_im2.7_test.dart
diff --git a/pkg/language_versioning_2_7_test/pubspec.yaml b/pkg/language_versioning_2_7_test/pubspec.yaml
new file mode 100644
index 0000000..7e17122
--- /dev/null
+++ b/pkg/language_versioning_2_7_test/pubspec.yaml
@@ -0,0 +1,14 @@
+name: language_versioning_2_7_test
+version: 1.0.0
+description: >
+  Tests of language versioning. Stored as a package in order to have its own
+  package configuration and default language version
+
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+
+environment:
+  sdk: '>=2.7.0 <3.0.0'
+
+dev_dependencies:
+  lints: any
diff --git a/pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart b/pkg/language_versioning_2_7_test/test/lib_ex2.7_test.dart
similarity index 95%
rename from pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart
rename to pkg/language_versioning_2_7_test/test/lib_ex2.7_test.dart
index e0756e3..10f7d4d 100644
--- a/pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart
+++ b/pkg/language_versioning_2_7_test/test/lib_ex2.7_test.dart
@@ -8,7 +8,7 @@
 part "src/part_of_ex2.7_v_ex2.7.dart";
 
 // Specification requires the part file to have
-// the same explicit langauge version marker
+// the same explicit language version marker
 // as the including library,
 // not just the same languge version.
 part "src/part_of_ex2.7_v_im2.7.dart";
diff --git a/pkg/language_versioning_2.7_test/test/lib_ex2.8_test.dart b/pkg/language_versioning_2_7_test/test/lib_ex2.8_test.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/lib_ex2.8_test.dart
rename to pkg/language_versioning_2_7_test/test/lib_ex2.8_test.dart
diff --git a/pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart b/pkg/language_versioning_2_7_test/test/lib_im2.7_test.dart
similarity index 95%
rename from pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart
rename to pkg/language_versioning_2_7_test/test/lib_im2.7_test.dart
index 44d541e..646a282 100644
--- a/pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart
+++ b/pkg/language_versioning_2_7_test/test/lib_im2.7_test.dart
@@ -7,7 +7,7 @@
 part "src/part_of_im2.7_v_im2.7.dart";
 
 // Specification requires the part fsrc/ile to have
-// the same explicit langauge version marker
+// the same explicit language version marker
 // as the including library,
 // not just the same languge version.
 part "src/part_of_im2.7_v_ex2.7.dart";
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_ex2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_ex2.7.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.8.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_ex2.8.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.8.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_ex2.8.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_im2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_im2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_im2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.7_v_im2.7.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_ex2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_ex2.7.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.8.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_ex2.8.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.8.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_ex2.8.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_im2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_im2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_im2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_ex2.8_v_im2.7.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_ex2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_ex2.7.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.8.dart b/pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_ex2.8.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.8.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_ex2.8.dart
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_im2.7.dart b/pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_im2.7.dart
similarity index 100%
rename from pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_im2.7.dart
rename to pkg/language_versioning_2_7_test/test/src/part_of_im2.7_v_im2.7.dart
diff --git a/pkg/test_runner/lib/src/build_configurations.dart b/pkg/test_runner/lib/src/build_configurations.dart
index f684531..6ceccbc 100644
--- a/pkg/test_runner/lib/src/build_configurations.dart
+++ b/pkg/test_runner/lib/src/build_configurations.dart
@@ -85,7 +85,7 @@
     Compiler.fasta: ['create_sdk', 'dartdevc_test', 'kernel_platform_files'],
     Compiler.dartdevk: ['dartdevc_test'],
     Compiler.dart2js: ['create_sdk'],
-    Compiler.dart2analyzer: ['create_sdk'],
+    Compiler.dart2analyzer: ['create_sdk', 'utils/dartanalyzer'],
     Compiler.specParser: <String>[],
   };
   final result = [...targetsForCompilers[compiler]!];
diff --git a/pkg/test_runner/lib/src/command.dart b/pkg/test_runner/lib/src/command.dart
index 07241ef..9f5933a 100644
--- a/pkg/test_runner/lib/src/command.dart
+++ b/pkg/test_runner/lib/src/command.dart
@@ -559,20 +559,37 @@
 }
 
 class AnalysisCommand extends ProcessCommand {
+  final List<String> commonAnalyzerCliArguments;
+
   AnalysisCommand(String executable, List<String> arguments,
-      Map<String, String> environmentOverrides, {int index = 0})
+      this.commonAnalyzerCliArguments, Map<String, String> environmentOverrides,
+      {int index = 0})
       : super('dart2analyzer', executable, arguments, environmentOverrides,
             null, index);
 
-  AnalysisCommand indexedCopy(int index) =>
-      AnalysisCommand(executable, arguments, environmentOverrides,
-          index: index);
+  AnalysisCommand indexedCopy(int index) => AnalysisCommand(
+      executable, arguments, commonAnalyzerCliArguments, environmentOverrides,
+      index: index);
 
   CommandOutput createOutput(int exitCode, bool timedOut, List<int> stdout,
           List<int> stderr, Duration time, bool compilationSkipped,
           [int? pid = 0]) =>
       AnalysisCommandOutput(
           this, exitCode, timedOut, stdout, stderr, time, compilationSkipped);
+
+  @override
+  List<String> get batchArguments => commonAnalyzerCliArguments;
+
+  @override
+  List<String> get nonBatchArguments => commonAnalyzerCliArguments;
+
+  @override
+  bool _equal(covariant ProcessCommand other) {
+    return other is AnalysisCommand &&
+        super._equal(other) &&
+        deepJsonCompare(
+            commonAnalyzerCliArguments, other.commonAnalyzerCliArguments);
+  }
 }
 
 class CompareAnalyzerCfeCommand extends ProcessCommand {
diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart
index 7af6b8e..85a8fc1 100644
--- a/pkg/test_runner/lib/src/compiler_configuration.dart
+++ b/pkg/test_runner/lib/src/compiler_configuration.dart
@@ -1188,6 +1188,7 @@
 
   int get timeoutMultiplier => 4;
 
+  @override
   String computeCompilerPath() {
     var prefix = 'sdk/bin';
     if (_isHostChecked) {
@@ -1196,31 +1197,55 @@
     if (_useSdk) {
       prefix = '${_configuration.buildDirectory}/dart-sdk/bin';
     }
-    return '$prefix/dartanalyzer$shellScriptExtension';
+    return '$prefix/dart$shellScriptExtension';
   }
 
+  String computeAnalyzerCliPath() {
+    if (_useSdk) {
+      // This is a non-standard use of _useSdk, as dartanalyzer is not part
+      // of the SDK anymore, but there is no way to specify "use generated
+      // snapshot" directly.
+      return '${_configuration.buildDirectory}/gen/dartanalyzer.dart.snapshot';
+    }
+    return 'pkg/analyzer_cli/bin/analyzer.dart';
+  }
+
+  late final String compilerPath = computeCompilerPath();
+
+  // TODO(jcollins-g): move most of this into analyzer.dart defaults once it
+  // becomes an unpublished utility.
+  late final List<String> analyzerCliCommonArgs = [
+    ...computeDartOptions(),
+    computeAnalyzerCliPath(),
+    ...computeDartAnalyzerOptions(),
+  ];
+
+  /// [arguments].last must be the Dart source file.
   CommandArtifact computeCompilationArtifact(String tempDir,
       List<String> arguments, Map<String, String> environmentOverrides) {
-    var args = [
-      ...arguments,
+    // Since this is not a real compilation, no artifacts are produced.
+    return CommandArtifact([
+      AnalysisCommand(
+          compilerPath, arguments, analyzerCliCommonArgs, environmentOverrides)
+    ], arguments.last, 'application/vnd.dart');
+  }
+
+  /// Arguments passed to the Dart VM.
+  List<String> computeDartOptions() {
+    return _useSdk ? [] : ['--packages=.dart_tool/package_config.json'];
+  }
+
+  /// Arguments passed to the snapshot or CLI dart file.
+  List<String> computeDartAnalyzerOptions() {
+    return [
+      // analyzer.dart requires normalized path for dart-sdk.
+      if (!_useSdk) ...[
+        '--use-analysis-driver-memory-byte-store',
+        '--dart-sdk=${Repository.dir.absolute.join(Path('sdk'))}'
+      ],
       if (_configuration.useAnalyzerCfe) '--use-cfe',
       if (_configuration.useAnalyzerFastaParser) '--use-fasta-parser',
     ];
-
-    // Since this is not a real compilation, no artifacts are produced.
-    return CommandArtifact(
-        [AnalysisCommand(computeCompilerPath(), args, environmentOverrides)],
-        args.singleWhere((arg) => arg.endsWith('.dart')),
-        'application/vnd.dart');
-  }
-
-  List<String> computeRuntimeArguments(
-      RuntimeConfiguration runtimeConfiguration,
-      TestFile testFile,
-      List<String> vmOptions,
-      List<String> originalArguments,
-      CommandArtifact? artifact) {
-    return [];
   }
 }
 
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 1e4b8f1..087a32d 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -37,13 +37,11 @@
 # ......dart.lib (import library for VM native extensions on Windows)
 # ......dartaotruntime or dartaotruntime.exe (executable)
 # ......dart2js
-# ......dartanalyzer
 # ......dartdevc
 # ......utils/gen_snapshot or utils/gen_snapshot.exe (if not on ia32)
 # ......snapshots/
 # ........analysis_server.dart.snapshot
 # ........dart2js.dart.snapshot
-# ........dartanalyzer.dart.snapshot
 # ........dartdev.dart.snapshot
 # ........dartdev.dill
 # ........dartdevc.dart.snapshot
@@ -88,9 +86,9 @@
 # ......api_readme.md
 
 # Scripts that go under bin/
-_platform_sdk_scripts = [ "dartanalyzer" ]
+_platform_sdk_scripts = []
 
-_full_sdk_scripts = [ "dartanalyzer" ]
+_full_sdk_scripts = []
 
 # Snapshots that go under bin/snapshots
 _platform_sdk_snapshots = [
@@ -99,10 +97,6 @@
     "../utils/analysis_server",
   ],
   [
-    "dartanalyzer",
-    "../utils/dartanalyzer:generate_dartanalyzer_snapshot",
-  ],
-  [
     "dartdev",
     "../utils/dartdev:dartdev",
   ],
diff --git a/sdk/bin/dartanalyzer b/sdk/bin/dartanalyzer
deleted file mode 100755
index 6525627..0000000
--- a/sdk/bin/dartanalyzer
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# 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.
-
-# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart repo's
-# directory structure.
-
-echo "Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'." 1>&2
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-
-SDK_ARG="--dart-sdk=$SDK_DIR"
-
-DART="$BIN_DIR/dart"
-
-unset EXTRA_VM_OPTIONS
-declare -a EXTRA_VM_OPTIONS
-EXTRA_VM_OPTIONS+=("--enable_experiment=non-nullable")
-
-case $0 in
-  *_developer)
-    EXTRA_VM_OPTIONS+=('--enable-asserts')
-    ;;
-esac
-
-# We allow extra vm options to be passed in through an environment variable.
-if [[ $DART_VM_OPTIONS ]]; then
-  read -a OPTIONS <<< "$DART_VM_OPTIONS"
-  EXTRA_VM_OPTIONS+=("${OPTIONS[@]}")
-fi
-
-DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
-
-ANALYZER="$DART_ROOT/pkg/analyzer_cli/bin/analyzer.dart"
-
-DEV_OPTIONS="--use-analysis-driver-memory-byte-store"
-
-exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$ANALYZER" "$DEV_OPTIONS" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer.bat b/sdk/bin/dartanalyzer.bat
deleted file mode 100644
index 122e9b3..0000000
--- a/sdk/bin/dartanalyzer.bat
+++ /dev/null
@@ -1,72 +0,0 @@
-@echo off
-REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-echo Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'. 1>&2
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-set DART=%BIN_DIR%\dart
-
-rem Get absolute full name for SDK_DIR.
-for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
-
-rem Remove trailing backslash if there is one
-if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-
-set SDK_ARG=--dart-sdk=%SDK_DIR%
-
-set EXTRA_VM_OPTIONS=
-
-if _%DARTANALYZER_DEVELOPER_MODE%_ == _1_ (
-  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% --enable_asserts
-)
-
-rem We allow extra vm options to be passed in through an environment variable.
-if not "_%DART_VM_OPTIONS%_" == "__" (
-  set EXTRA_VM_OPTIONS=%EXTRA_VM_OPTIONS% %DART_VM_OPTIONS%
-)
-
-rem Get absolute full name for DART_ROOT.
-for %%i in ("%SDK_DIR%\..\") do set DART_ROOT=%%~fi
-
-rem Remove trailing backslash if there is one
-if %DART_ROOT:~-1%==\ set DART_ROOT=%DART_ROOT:~0,-1%
-
-set ANALYZER=%DART_ROOT%\pkg\analyzer_cli\bin\analyzer.dart
-
-"%DART%" "--packages=%DART_ROOT%\.packages" %EXTRA_VM_OPTIONS% "%ANALYZER%" "%SDK_ARG%" %*
-
-endlocal
-
-exit /b %errorlevel%
-
-rem Follow the symbolic links (junctions points) using `dir to determine the
-rem canonical path. Output with a link looks something like this
-rem
-rem 01/03/2013  10:11 PM    <JUNCTION>     abc def
-rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk]
-rem
-rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
-rem surrounded by right angle bracket and left square bracket. Once we get
-rem the filename, which is name of the link, we recursively follow that.
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 [" 2^>nul`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/sdk/bin/dartanalyzer_sdk b/sdk/bin/dartanalyzer_sdk
deleted file mode 100755
index bb7b84a..0000000
--- a/sdk/bin/dartanalyzer_sdk
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env bash
-# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-# 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.
-
-# Run dartanalyzer.dart on the Dart VM. This script assumes the Dart SDK's
-# directory structure.
-
-echo "Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'." 1>&2
-
-function follow_links() {
-  file="$1"
-  while [ -h "$file" ]; do
-    # On Mac OS, readlink -f doesn't work.
-    file="$(readlink "$file")"
-  done
-  echo "$file"
-}
-
-# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
-PROG_NAME="$(follow_links "$BASH_SOURCE")"
-
-# Handle the case where dart-sdk/bin has been symlinked to.
-BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
-SDK_DIR="$(cd "${BIN_DIR}/.." ; pwd -P)"
-
-SDK_ARG="--dart-sdk=$SDK_DIR"
-
-SNAPSHOT="$BIN_DIR/snapshots/dartanalyzer.dart.snapshot"
-
-# We are running the snapshot in the built SDK.
-DART="$BIN_DIR/dart"
-exec "$DART" --enable_experiment=non-nullable "$SNAPSHOT" "$SDK_ARG" "$@"
diff --git a/sdk/bin/dartanalyzer_sdk.bat b/sdk/bin/dartanalyzer_sdk.bat
deleted file mode 100644
index 7b1e03b..0000000
--- a/sdk/bin/dartanalyzer_sdk.bat
+++ /dev/null
@@ -1,54 +0,0 @@
-@echo off
-REM Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-echo Warning: 'dartanalyzer' is deprecated. Please use 'dart analyze'. 1>&2
-
-setlocal
-rem Handle the case where dart-sdk/bin has been symlinked to.
-set DIR_NAME_WITH_SLASH=%~dp0
-set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%%
-call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR
-rem Get rid of surrounding quotes.
-for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi
-
-set DART=%BIN_DIR%\dart
-set SNAPSHOT=%BIN_DIR%\snapshots\dartanalyzer.dart.snapshot
-
-rem Get absolute full name for SDK_DIR.
-for %%i in ("%BIN_DIR%\..\") do set SDK_DIR=%%~fi
-
-rem Remove trailing backslash if there is one
-if %SDK_DIR:~-1%==\ set SDK_DIR=%SDK_DIR:~0,-1%
-
-set SDK_ARG=--dart-sdk=%SDK_DIR%
-
-"%DART%" "%SNAPSHOT%" "%SDK_ARG%" %*
-
-endlocal
-
-exit /b %errorlevel%
-
-rem Follow the symbolic links (junctions points) using `dir to determine the
-rem canonical path. Output with a link looks something like this
-rem
-rem 01/03/2013  10:11 PM    <JUNCTION>     abc def
-rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk]
-rem
-rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename
-rem surrounded by right angle bracket and left square bracket. Once we get
-rem the filename, which is name of the link, we recursively follow that.
-:follow_links
-setlocal
-for %%i in (%1) do set result=%%~fi
-set current=
-for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^
-                                             ^| %SystemRoot%\System32\find.exe ">     %~n1 [" 2^>nul`) do (
-  set current=%%i
-)
-if not "%current%"=="" call :follow_links "%current%", result
-endlocal & set %~2=%result%
-goto :eof
-
-:end
diff --git a/tools/VERSION b/tools/VERSION
index 9bc408b..8bf1802 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 246
+PRERELEASE 247
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 15cb7565..efecd15 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3262,7 +3262,8 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "create_sdk"
+            "create_sdk",
+            "utils/dartanalyzer"
           ]
         },
         {
@@ -3352,7 +3353,8 @@
           "name": "build dart",
           "script": "tools/build.py",
           "arguments": [
-            "create_sdk"
+            "create_sdk",
+            "utils/dartanalyzer"
           ]
         },
         {
diff --git a/tools/dom/dom.py b/tools/dom/dom.py
index 9fcdf99..9db43b3 100755
--- a/tools/dom/dom.py
+++ b/tools/dom/dom.py
@@ -14,7 +14,7 @@
 sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
 import utils
 
-dart_out_dir = utils.GetBuildRoot(utils.GuessOS(), 'release', 'ia32')
+dart_out_dir = utils.GetBuildRoot(utils.GuessOS(), 'release', '64')
 if utils.IsWindows():
     dart_bin = os.path.join(dart_out_dir, 'dart.exe')
 else:
@@ -43,10 +43,9 @@
 def analyze():
     ''' Runs the dart analyzer. '''
     return call([
-        os.path.join(dart_out_dir, 'dart-sdk', 'bin', 'dartanalyzer'),
-        os.path.join('tests', 'html', 'element_test.dart'),
-        '--dart-sdk=sdk',
-        '--show-package-warnings',
+        os.path.join(dart_out_dir, 'dart-sdk', 'bin', 'dart'),
+        'analyze',
+        os.path.join('tests', 'lib', 'html', 'element_test.dart'),
     ])
 
 
