Version 2.17.0-117.0.dev

Merge commit 'deba7fee1d90227020301833951b87da27d9a90c' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 66d9ee6..b671ff4 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2022-02-02T12:23:40.780016",
+  "generated": "2022-02-16T14:11:48.394602",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
@@ -136,7 +136,7 @@
       "name": "boolean_selector",
       "rootUri": "../third_party/pkg/boolean_selector",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "browser_launcher",
@@ -172,7 +172,7 @@
       "name": "clock",
       "rootUri": "../third_party/pkg/clock",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "collection",
@@ -316,7 +316,7 @@
       "name": "file_testing",
       "rootUri": "../third_party/pkg/file/packages/file_testing",
       "packageUri": "lib/",
-      "languageVersion": "2.1"
+      "languageVersion": "2.12"
     },
     {
       "name": "fixnum",
@@ -629,7 +629,7 @@
       "name": "source_map_stack_trace",
       "rootUri": "../third_party/pkg/source_map_stack_trace",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "source_maps",
@@ -677,7 +677,7 @@
       "name": "string_scanner",
       "rootUri": "../third_party/pkg/string_scanner",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "sync_http",
@@ -695,7 +695,7 @@
       "name": "term_glyph",
       "rootUri": "../third_party/pkg/term_glyph",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.12"
     },
     {
       "name": "test",
@@ -766,7 +766,7 @@
       "name": "vector_math",
       "rootUri": "../third_party/pkg/vector_math",
       "packageUri": "lib/",
-      "languageVersion": "2.10"
+      "languageVersion": "2.14"
     },
     {
       "name": "vm",
diff --git a/DEPS b/DEPS
index dc28abe..777bf85 100644
--- a/DEPS
+++ b/DEPS
@@ -80,7 +80,7 @@
   "async_rev": "80886150a5e6c58006c8ae5a6c2aa7108638e2a9",
   "bazel_worker_rev": "ceeba0982d4ff40d32371c9d35f3d2dc1868de20",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
-  "boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
+  "boolean_selector_rev": "437e7f06c7e416bed91e16ae1df453555897e945",
   "boringssl_gen_rev": "ced85ef0a00bbca77ce5a91261a5f2ae61b1e62f",
   "boringssl_rev" : "87f316d7748268eb56f2dc147bd593254ae93198",
   "browser-compat-data_tag": "v1.0.22",
@@ -89,7 +89,7 @@
   "charcode_rev": "84ea427711e24abf3b832923959caa7dd9a8514b",
   "chrome_rev" : "19997",
   "cli_util_rev" : "b0adbba89442b2ea6fef39c7a82fe79cb31e1168",
-  "clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
+  "clock_rev" : "5631a0612f4ac7e1b32f7c9a00fc7c00a41615e1",
   "collection_rev": "a4c941ab94044d118b2086a3f261c30377604127",
   "convert_rev": "e063fdca4bebffecbb5e6aa5525995120982d9ce",
   "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
@@ -113,9 +113,9 @@
   "devtools_rev" : "3b054edf3a14a4a51bc8019f456efcf0073cd626",
   "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
   "fixnum_rev": "848341f061359ef7ddc0cad472c2ecbb036b28ac",
-  "file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
+  "file_rev": "1ebc38852ffed24b564910317982298b56c2cedd",
   "glob_rev": "da1f4595ee2f87982cbcc663d4cac244822d9227",
-  "html_rev": "3c2448108b431dd00d3a7033d9f43f19fa5d93d3",
+  "html_rev": "f108bce59d136c584969fd24a5006914796cf213",
   "http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
   "http_multi_server_rev": "34bf7f04b61cce561f47f7f275c2cc811534a05a",
   "http_parser_rev": "202391286ddc13c4c3c284ac5b511f04697250ed",
@@ -150,23 +150,23 @@
   "shelf_proxy_tag": "v1.0.0",
   "shelf_rev": "46483f896cc4308ee3d8e997030ae799b72aa16a",
   "shelf_web_socket_rev": "24fb8a04befa75a94ac63a27047b231d1a22aab4",
-  "source_map_stack_trace_rev": "1c3026f69d9771acf2f8c176a1ab750463309cce",
+  "source_map_stack_trace_rev": "80709f2d2fe5086ab50d744a28a2d26ea4384a1b",
   "source_maps-0.9.4_rev": "38524",
   "source_maps_rev": "6499ee3adac8d469e2953e2e8ba4bdb4c2fbef90",
   "source_span_rev": "dc189b455d823e2919667f6c5dcb41ab7483bce0",
   "sse_rev": "9084339389eb441d0c0518cddac211a097e78657",
   "stack_trace_rev": "5220580872625ddee41e9ca9a5f3364789b2f0f6",
   "stream_channel_rev": "3fa3e40c75c210d617b8b943b9b8f580e9866a89",
-  "string_scanner_rev": "1b63e6e5db5933d7be0a45da6e1129fe00262734",
+  "string_scanner_rev": "0e53bf9059e8e22a3b346aac7ec755a0f8314eb6",
   "sync_http_rev": "b59c134f2e34d12acac110d4f17f83e5a7db4330",
   "test_descriptor_rev": "ead23c1e7df079ac0f6457a35f7a71432892e527",
   "test_process_rev": "7c73ec8a8a6e0e63d0ec27d70c21ca4323fb5e8f",
-  "term_glyph_rev": "6a0f9b6fb645ba75e7a00a4e20072678327a0347",
+  "term_glyph_rev": "4885b7f8af6931e23d3aa6d1767ee3f9a626923d",
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
   "usage_rev": "f0cb8f7cce8b675255c81488dbab8cf9f2f56404",
-  "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
+  "vector_math_rev": "0cbed0914d49a6a44555e6d5444c438a4a4c3fc1",
   "watcher_rev": "f76997ab0c857dc5537ac0975a9ada92b54ef949",
   "webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index bb5c37e..7312240 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -2836,6 +2836,31 @@
         r"""Enum factory constructors can't redirect to generative constructors.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateEnumImplementerContainsValuesDeclaration =
+    const Template<Message Function(String name)>(
+        problemMessageTemplate:
+            r"""'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.""",
+        withArguments: _withArgumentsEnumImplementerContainsValuesDeclaration);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeEnumImplementerContainsValuesDeclaration =
+    const Code<Message Function(String name)>(
+  "EnumImplementerContainsValuesDeclaration",
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsEnumImplementerContainsValuesDeclaration(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeEnumImplementerContainsValuesDeclaration,
+      problemMessage:
+          """'${name}' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeEnumInClass = messageEnumInClass;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
index 76a08e2..856e20d 100644
--- a/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_closingLabels.dart
@@ -51,7 +51,7 @@
 
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
-    var labelText = node.constructorName.type2.name.name;
+    var labelText = node.constructorName.type.name.name;
     var name = node.constructorName.name;
     if (name != null) {
       labelText += '.${name.name}';
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 0711fd6..303ffc6 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -687,7 +687,7 @@
   @override
   void visitConstructorReference(ConstructorReference node) {
     var constructorName = node.constructorName;
-    constructorName.type2.accept(this);
+    constructorName.type.accept(this);
 
     // We have a `ConstructorReference` only when it is resolved.
     // TODO(scheglov) The `ConstructorName` in a tear-off always has a name,
diff --git a/pkg/analysis_server/lib/src/computer/computer_signature.dart b/pkg/analysis_server/lib/src/computer/computer_signature.dart
index 04013bf..0e852c2 100644
--- a/pkg/analysis_server/lib/src/computer/computer_signature.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_signature.dart
@@ -42,7 +42,7 @@
       var element = ElementLocator.locate(parent);
       execElement = element is ExecutableElement ? element : null;
     } else if (parent is InstanceCreationExpression) {
-      name = parent.constructorName.type2.name.name;
+      name = parent.constructorName.type.name.name;
       var constructorName = parent.constructorName.name;
       if (constructorName != null) {
         name += '.${constructorName.name}';
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
index 51853fe..6aa8512 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
@@ -26,12 +26,12 @@
     var node = request.target.containingNode;
     if (node is ConstructorName) {
       if (node.parent is ConstructorReference) {
-        var element = node.type2.name.staticElement;
+        var element = node.type.name.staticElement;
         if (element is ClassElement) {
           _buildSuggestions(element);
         }
       } else {
-        var type = node.type2.type;
+        var type = node.type.type;
         if (type is InterfaceType) {
           var element = type.element;
           _buildSuggestions(element);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
index 4e1c0eb..8d9d8d4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
@@ -49,7 +49,7 @@
     //
     // Extract the information needed to build the edit.
     //
-    var constructorTypeArguments = creation.constructorName.type2.typeArguments;
+    var constructorTypeArguments = creation.constructorName.type.typeArguments;
     //
     // Build the edit.
     //
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
index 1704cda..cbc6f18 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
@@ -51,7 +51,7 @@
     //
     // Extract the information needed to build the edit.
     //
-    var constructorTypeArguments = creation.constructorName.type2.typeArguments;
+    var constructorTypeArguments = creation.constructorName.type.typeArguments;
     //
     // Build the edit.
     //
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
index 8ebe7c7..158a890 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
@@ -66,7 +66,7 @@
       //
       var name = creation.constructorName.name;
       var constructorTypeArguments =
-          creation.constructorName.type2.typeArguments;
+          creation.constructorName.type.typeArguments;
       TypeArgumentList? elementTypeArguments;
       SourceRange? elementsRange;
       if (name == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index e476729..1e367b0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -63,7 +63,7 @@
     }
 
     // prepare target interface type
-    var targetType = _constructorName.type2.type;
+    var targetType = _constructorName.type.type;
     if (targetType is! InterfaceType) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
index 34ecd3a..e57083d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateful_widget.dart
@@ -23,7 +23,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     var widgetClass = node.thisOrAncestorOfType<ClassDeclaration>();
-    var superclass = widgetClass?.extendsClause?.superclass2;
+    var superclass = widgetClass?.extendsClause?.superclass;
     if (widgetClass == null || superclass == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
index 417a2cf..82676c6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
@@ -27,7 +27,7 @@
       return;
     }
 
-    var namedType = creation.constructorName.type2;
+    var namedType = creation.constructorName.type;
     if (namedType.typeArguments != null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
index a5f687c..b1236c9 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_var.dart
@@ -67,9 +67,9 @@
               }
             }
           } else if (initializer is InstanceCreationExpression) {
-            if (initializer.constructorName.type2.typeArguments == null) {
+            if (initializer.constructorName.type.typeArguments == null) {
               typeArgumentsText = utils.getNodeText(typeArguments);
-              typeArgumentsOffset = initializer.constructorName.type2.end;
+              typeArgumentsOffset = initializer.constructorName.type.end;
             }
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
index 4f0972c..bd0dde1 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/accessor.dart
@@ -114,7 +114,7 @@
     if (node is ExtensionOverride) {
       return node.typeArguments;
     } else if (node is InstanceCreationExpression) {
-      return node.constructorName.type2.typeArguments;
+      return node.constructorName.type.typeArguments;
     } else if (node is InvocationExpression) {
       return node.typeArguments;
     } else if (node is NamedType) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
index e512626..0157194 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
@@ -96,7 +96,7 @@
       }
     } else if (node is InstanceCreationExpression) {
       var name = node.constructorName;
-      var className = _nameFromIdentifier(name.type2.name);
+      var className = _nameFromIdentifier(name.type.name);
       var constructorName = name.name?.name ?? '';
       if (components[0] == constructorName && components[1] == className) {
         return true;
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
index acceb63..beda821 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
@@ -223,7 +223,7 @@
     //  get a more exact matcher.
     // TODO(brianwilkerson) Use 'new' for the name of the unnamed constructor.
     var constructorName = node.name?.name ?? ''; // ?? 'new';
-    var className = node.type2.name.simpleName;
+    var className = node.type.name.simpleName;
     _addMatcher(
       components: [constructorName, className],
       kinds: const [ElementKind.constructorKind],
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
index 92e23b9..6d36d486 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/replaced_by.dart
@@ -99,7 +99,7 @@
         }
       }
     } else if (node is ConstructorName) {
-      var typeName = node.type2.name;
+      var typeName = node.type.name;
       SimpleIdentifier classNameNode;
       if (typeName is SimpleIdentifier) {
         classNameNode = typeName;
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
index da822b8..93de681 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -181,7 +181,7 @@
     name = expression.methodName.name;
   } else if (expression is InstanceCreationExpression) {
     var constructorName = expression.constructorName;
-    var namedType = constructorName.type2;
+    var namedType = constructorName.type;
     var typeNameIdentifier = namedType.name;
     // new ClassName()
     if (typeNameIdentifier is SimpleIdentifier) {
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index f5935dd..8f78367 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -29,6 +29,7 @@
     show SourceChange, SourceEdit;
 import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
 import 'package:analyzer_plugin/utilities/range_factory.dart';
+import 'package:collection/collection.dart';
 import 'package:path/path.dart' as path;
 
 /// Adds edits to the given [change] that ensure that all the [libraries] are
@@ -982,6 +983,39 @@
     return ClassMemberLocation(prefix, offset, suffix);
   }
 
+  ClassMemberLocation? prepareEnumNewConstructorLocation(
+    EnumDeclaration enumDeclaration,
+  ) {
+    var indent = getIndent(1);
+
+    var targetMember = enumDeclaration.members
+        .where((e) => e is FieldDeclaration || e is ConstructorDeclaration)
+        .lastOrNull;
+    if (targetMember != null) {
+      return ClassMemberLocation(
+        endOfLine + endOfLine + indent,
+        targetMember.end,
+        '',
+      );
+    }
+
+    var semicolon = enumDeclaration.semicolon;
+    if (semicolon != null) {
+      return ClassMemberLocation(
+        endOfLine + endOfLine + indent,
+        semicolon.end,
+        '',
+      );
+    }
+
+    var lastConstant = enumDeclaration.constants.last;
+    return ClassMemberLocation(
+      ';' + endOfLine + endOfLine + indent,
+      lastConstant.end,
+      '',
+    );
+  }
+
   ClassMemberLocation? prepareNewClassMemberLocation(
       CompilationUnitMember declaration,
       bool Function(ClassMember existingMember) shouldSkip) {
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index ee34219..d6832cf 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -295,15 +295,15 @@
       // ClassDeclarations) and super.visitClassTypeAlias is not sufficient.
       //
       _handleRefEdge(
-        node.superclass2.name.staticElement,
+        node.superclass.name.staticElement,
         const <String>[schema.REF_EDGE],
-        syntacticEntity: node.superclass2,
+        syntacticEntity: node.superclass,
       );
       // TODO(jwren) refactor the following lines into a method that can be used
       // by visitClassDeclaration()
       // extends
       var recordSupertypeVName = _vNameFromElement(
-          node.superclass2.name.staticElement, schema.RECORD_KIND);
+          node.superclass.name.staticElement, schema.RECORD_KIND);
       addEdge(_enclosingClassVName!, schema.EXTENDS_EDGE, recordSupertypeVName);
 
       // implements
@@ -659,7 +659,7 @@
       //   assert (element.enclosingElement != null);
     }
     // visit children
-    _safelyVisitList(constructorName.type2.typeArguments?.arguments);
+    _safelyVisitList(constructorName.type.typeArguments?.arguments);
     _safelyVisit(node.argumentList);
   }
 
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index 05e0eb3..cdb3485 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -418,7 +418,7 @@
     // Rename the class when on `new` in an instance creation.
     if (node is InstanceCreationExpression) {
       var creation = node;
-      var typeIdentifier = creation.constructorName.type2.name;
+      var typeIdentifier = creation.constructorName.type.name;
       element = typeIdentifier.staticElement;
       offset = typeIdentifier.offset;
       length = typeIdentifier.length;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
index b31755a..7eef982 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring_internal.dart
@@ -72,6 +72,9 @@
   bool get isConstructorTearOff =>
       _match.kind == MatchKind.REFERENCE_BY_CONSTRUCTOR_TEAR_OFF;
 
+  bool get isInvocationByEnumConstantWithoutArguments =>
+      _match.kind == MatchKind.INVOCATION_BY_ENUM_CONSTANT_WITHOUT_ARGUMENTS;
+
   bool get isResolved => _match.isResolved;
 
   SourceRange get range => _match.sourceRange;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
index dc58d49..5e7e7bc 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -10,8 +10,6 @@
 import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
 import 'package:analysis_server/src/services/refactoring/rename.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
-import 'package:analysis_server/src/services/search/search_engine.dart';
-import 'package:analysis_server/src/services/search/search_engine_internal.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -55,12 +53,6 @@
     // prepare references
     var matches = await searchEngine.searchReferences(element);
     var references = getSourceReferences(matches);
-    // append declaration
-    if (element.isSynthetic) {
-      await _replaceSynthetic();
-    } else {
-      references.add(_createDeclarationReference());
-    }
     // update references
     for (var reference in references) {
       String replacement;
@@ -69,8 +61,24 @@
       } else {
         replacement = reference.isConstructorTearOff ? '.new' : '';
       }
+      if (reference.isInvocationByEnumConstantWithoutArguments) {
+        replacement += '()';
+      }
       reference.addEdit(change, replacement);
     }
+    // Update the declaration.
+    if (element.isSynthetic) {
+      await _replaceSynthetic();
+    } else {
+      doSourceChange_addSourceEdit(
+        change,
+        element.source,
+        newSourceEdit_range(
+          _declarationNameRange(),
+          newName.isNotEmpty ? '.$newName' : '',
+        ),
+      );
+    }
   }
 
   void _analyzePossibleConflicts(RefactoringStatus result) {
@@ -88,25 +96,14 @@
     }
   }
 
-  SourceReference _createDeclarationReference() {
-    SourceRange sourceRange;
+  SourceRange _declarationNameRange() {
     var offset = element.periodOffset;
     var nameEnd = element.nameEnd!;
     if (offset != null) {
-      sourceRange = range.startOffsetEndOffset(offset, nameEnd);
+      return range.startOffsetEndOffset(offset, nameEnd);
     } else {
-      sourceRange = SourceRange(nameEnd, 0);
+      return SourceRange(nameEnd, 0);
     }
-    return SourceReference(SearchMatchImpl(
-        element.source.fullName,
-        element.library.source,
-        element.source,
-        element.library,
-        element,
-        true,
-        true,
-        MatchKind.DECLARATION,
-        sourceRange));
   }
 
   Future<void> _replaceSynthetic() async {
@@ -118,32 +115,46 @@
       return;
     }
 
-    var classNode = result.node;
-    if (classNode is! ClassDeclaration) {
-      return;
-    }
-
     var resolvedUnit = result.resolvedUnit;
     if (resolvedUnit == null) {
       return;
     }
 
-    var utils = CorrectionUtils(resolvedUnit);
-    var location =
-        utils.prepareNewConstructorLocation(resolvedUnit.session, classNode);
-    if (location == null) {
-      return;
-    }
+    var node = result.node;
+    if (node is ClassDeclaration) {
+      var utils = CorrectionUtils(resolvedUnit);
+      var location = utils.prepareNewConstructorLocation(session, node);
+      if (location == null) {
+        return;
+      }
 
-    var header = '${classElement.name}.$newName();';
-    doSourceChange_addElementEdit(
-      change,
-      classElement,
-      SourceEdit(
-        location.offset,
-        0,
-        location.prefix + header + location.suffix,
-      ),
-    );
+      var header = '${classElement.name}.$newName();';
+      doSourceChange_addElementEdit(
+        change,
+        classElement,
+        SourceEdit(
+          location.offset,
+          0,
+          location.prefix + header + location.suffix,
+        ),
+      );
+    } else if (node is EnumDeclaration) {
+      var utils = CorrectionUtils(resolvedUnit);
+      var location = utils.prepareEnumNewConstructorLocation(node);
+      if (location == null) {
+        return;
+      }
+
+      var header = 'const ${classElement.name}.$newName();';
+      doSourceChange_addElementEdit(
+        change,
+        classElement,
+        SourceEdit(
+          location.offset,
+          0,
+          location.prefix + header + location.suffix,
+        ),
+      );
+    }
   }
 }
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index c86b091..59847fe 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -48,7 +48,7 @@
   /// Return a list of the experiments that are to be enabled for tests in this
   /// class, an empty list if there are no experiments that should be enabled.
   List<String> get experiments => [
-        EnableString.constructor_tearoffs,
+        EnableString.enhanced_enums,
         EnableString.named_arguments_anywhere,
         EnableString.super_parameters,
       ];
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 848a1e8..47c6443 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -35,7 +35,9 @@
 
   AnalysisServerOptions get serverOptions => AnalysisServerOptions();
 
-  bool get supportsAvailableSuggestions;
+  bool get _isProtocolVersion1 {
+    return protocol == TestingCompletionProtocol.version1;
+  }
 
   Future<void> addProjectFile(String relativePath, String content) async {
     newFile('$testPackageRootPath/$relativePath', content: content);
@@ -43,7 +45,10 @@
     expect(relativePath, startsWith('lib/'));
     var packageRelativePath = relativePath.substring(4);
     var uriStr = 'package:test/$packageRelativePath';
-    await driver.waitForSetWithUri(uriStr);
+
+    if (_isProtocolVersion1) {
+      await driver.waitForSetWithUri(uriStr);
+    }
   }
 
   Future<List<CompletionSuggestion>> addTestFile(String content,
@@ -105,7 +110,7 @@
   }
 
   Future<List<CompletionSuggestion>> getSuggestions() async {
-    if (supportsAvailableSuggestions) {
+    if (_isProtocolVersion1) {
       await driver.waitForSetWithUri('dart:core');
       await driver.waitForSetWithUri('dart:async');
     }
@@ -154,7 +159,7 @@
 ''');
 
     driver = CompletionDriver(
-      supportsAvailableSuggestions: supportsAvailableSuggestions,
+      supportsAvailableSuggestions: _isProtocolVersion1,
       server: this,
     );
     await driver.createProject();
@@ -234,9 +239,6 @@
 }
 
 mixin BasicCompletionTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => false;
-
   /// Duplicates (and potentially replaces DeprecatedMemberRelevanceTest).
   Future<void> test_deprecated_member_relevance() async {
     await addTestFile('''
@@ -301,9 +303,6 @@
 }
 
 mixin CompletionWithSuggestionsTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_project_filterImports_defaultConstructor() async {
     await addProjectFile('lib/a.dart', r'''
 class A {}
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index 4ae4511..8d4e69a 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -1860,6 +1860,58 @@
     );
   }
 
+  Future<void> test_enum_constructor_add_toSynthetic() {
+    addTestFile('''
+enum E {
+  v1, v2.new()
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('new()', 'newName');
+      },
+      '''
+enum E {
+  v1.newName(), v2.newName();
+
+  const E.newName();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 17);
+        expect(renameFeedback.length, 4);
+      },
+    );
+  }
+
+  Future<void> test_enum_constructor_change() {
+    addTestFile('''
+enum E {
+  v1.test(), v2.test();
+
+  const E.test();
+}
+''');
+    return assertSuccessfulRefactoring(
+      () {
+        return sendRenameRequest('test();', 'newName');
+      },
+      '''
+enum E {
+  v1.newName(), v2.newName();
+
+  const E.newName();
+}
+''',
+      feedbackValidator: (feedback) {
+        var renameFeedback = feedback as RenameFeedback;
+        expect(renameFeedback.offset, 24);
+        expect(renameFeedback.length, 5);
+      },
+    );
+  }
+
   Future<void> test_feedback() {
     addTestFile('''
 class Test {}
diff --git a/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart b/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
index 1cbdf28..d154a6e 100644
--- a/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/declaration/enum_test.dart
@@ -28,9 +28,6 @@
 }
 
 mixin EnumTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_enumConstantName() async {
     await _check_locations(
       declaration: 'enum MyEnum { foo01 }',
diff --git a/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart b/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart
index 8d27610..d473b9f 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/class_body_test.dart
@@ -45,26 +45,19 @@
     }).toList();
   }
 
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_nothing_x() async {
     await _checkContainers(
       line: '^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
               // TODO(scheglov) Not quite right, without static.
               Keyword.CONST,
-              if (isClass || isMixin) Keyword.COVARIANT,
+              if (context.isClass || context.isMixin) Keyword.COVARIANT,
               Keyword.DYNAMIC,
               // TODO(scheglov) This does not look right, mixin.
-              if (isClass || isMixin) Keyword.FACTORY,
+              if (context.isClass || context.isMixin) Keyword.FACTORY,
               Keyword.FINAL,
               Keyword.GET,
               Keyword.LATE,
@@ -83,11 +76,7 @@
   Future<void> test_static_const_x() async {
     await _checkContainers(
       line: 'static const ^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
@@ -103,11 +92,7 @@
   Future<void> test_static_final_Ox() async {
     await _checkContainers(
       line: 'static final O^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         if (isProtocolVersion2) {
           check(response).suggestions
             ..withKindKeyword.isEmpty
@@ -129,11 +114,7 @@
   Future<void> test_static_final_x() async {
     await _checkContainers(
       line: 'static final ^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
@@ -149,11 +130,7 @@
   Future<void> test_static_fx() async {
     await _checkContainers(
       line: 'static f^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         if (isProtocolVersion2) {
           check(response).suggestions
             ..withKindKeyword.matchesInAnyOrder(
@@ -188,11 +165,7 @@
   Future<void> test_static_late_x() async {
     await _checkContainers(
       line: 'static late ^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
@@ -208,11 +181,7 @@
   Future<void> test_static_x() async {
     await _checkContainers(
       line: 'static ^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
@@ -230,11 +199,7 @@
   Future<void> test_static_x_name_eq() async {
     await _checkContainers(
       line: 'static ^ name = 0;',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         check(response).suggestions
           ..withKindKeyword.matchesInAnyOrder(
             {
@@ -258,11 +223,7 @@
   Future<void> test_sx() async {
     await _checkContainers(
       line: 's^',
-      validator: (
-        response, {
-        required bool isClass,
-        required bool isMixin,
-      }) {
+      validator: (context, response) {
         if (isProtocolVersion2) {
           check(response).suggestions
             ..withKindKeyword.matchesInAnyOrder(
@@ -282,10 +243,10 @@
               {
                 // TODO(scheglov) Not quite right, without static.
                 Keyword.CONST,
-                if (isClass || isMixin) Keyword.COVARIANT,
+                if (context.isClass || context.isMixin) Keyword.COVARIANT,
                 Keyword.DYNAMIC,
                 // TODO(scheglov) This does not look right, mixin.
-                if (isClass || isMixin) Keyword.FACTORY,
+                if (context.isClass || context.isMixin) Keyword.FACTORY,
                 Keyword.FINAL,
                 Keyword.GET,
                 Keyword.LATE,
@@ -305,10 +266,9 @@
   Future<void> _checkContainers({
     required String line,
     required void Function(
-      CompletionResponseForTesting response, {
-      required bool isClass,
-      required bool isMixin,
-    })
+      _Context context,
+      CompletionResponseForTesting response,
+    )
         validator,
   }) async {
     // class
@@ -318,11 +278,7 @@
   $line
 }
 ''');
-      validator(
-        response,
-        isClass: true,
-        isMixin: false,
-      );
+      validator(_Context(isClass: true), response);
     }
     // enum
     {
@@ -332,11 +288,7 @@
   $line
 }
 ''');
-      validator(
-        response,
-        isClass: false,
-        isMixin: false,
-      );
+      validator(_Context(), response);
     }
     // extension
     {
@@ -345,11 +297,7 @@
   $line
 }
 ''');
-      validator(
-        response,
-        isClass: false,
-        isMixin: false,
-      );
+      validator(_Context(), response);
     }
     // mixin
     {
@@ -358,11 +306,17 @@
   $line
 }
 ''');
-      validator(
-        response,
-        isClass: false,
-        isMixin: true,
-      );
+      validator(_Context(isMixin: true), response);
     }
   }
 }
+
+class _Context {
+  final bool isClass;
+  final bool isMixin;
+
+  _Context({
+    this.isClass = false,
+    this.isMixin = false,
+  });
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart b/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart
index c9d4bf1..90a8f54 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_constant_test.dart
@@ -30,9 +30,6 @@
 }
 
 mixin EnumConstantDeclarationTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_afterName_atEnd() async {
     var response = await getTestCodeSuggestions('''
 enum E {
diff --git a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
index 295cbdd..baaedd1 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/enum_test.dart
@@ -46,9 +46,6 @@
 }
 
 mixin EnumDeclarationTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_afterConstants_noSemicolon() async {
     var response = await getTestCodeSuggestions('''
 enum E {
diff --git a/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
index b34836b..41f4004 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/field_formal_parameter_test.dart
@@ -30,9 +30,6 @@
 }
 
 mixin SuperFormalParameterTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   /// https://github.com/dart-lang/sdk/issues/39028
   Future<void> test_mixin_constructor() async {
     var response = await getTestCodeSuggestions('''
diff --git a/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart b/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart
index e3fd183..c6355ea 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/named_expression_test.dart
@@ -30,9 +30,6 @@
 }
 
 mixin NamedExpressionExpressionTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_beforePositional() async {
     var response = await getTestCodeSuggestions('''
 void f(int x) {
diff --git a/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart b/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart
index a38465a..2d4144a 100644
--- a/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/location/super_formal_parameter_test.dart
@@ -30,9 +30,6 @@
 }
 
 mixin SuperFormalParameterTestCases on AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_explicit_optionalNamed_hasArgument_named() async {
     var response = await getTestCodeSuggestions('''
 class A {
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
index f353b8d..018c26d 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
@@ -8,9 +8,6 @@
 import '../../../../client/completion_driver_test.dart';
 
 abstract class CompletionRelevanceTest extends AbstractCompletionDriverTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   /// Assert that all of the given completions were produced and that the
   /// suggestions are ordered in decreasing order based on relevance scores.
   void assertOrder(List<CompletionSuggestion> suggestions) {
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
index b6ad9fc..73fa3be 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_test.dart
@@ -29,9 +29,6 @@
 }
 
 mixin InstanceMemberTestCases on CompletionRelevanceTest {
-  @override
-  bool get supportsAvailableSuggestions => true;
-
   Future<void> test_contextType() async {
     await addTestFile(r'''
 class A {}
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 79d6fe7..9a40d78 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -12,12 +12,13 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(RenameConstructorTest);
+    defineReflectiveTests(RenameConstructorClassTest);
+    defineReflectiveTests(RenameConstructorEnumTest);
   });
 }
 
 @reflectiveTest
-class RenameConstructorTest extends RenameRefactoringTest {
+class RenameConstructorClassTest extends _RenameConstructorTest {
   Future<void> test_checkInitialConditions_inSDK() async {
     await indexTestUnit('''
 main() {
@@ -285,7 +286,287 @@
         RenameRefactoring.create(workspace, testAnalysisResult, null);
     expect(refactoring, isNull);
   }
+}
 
+@reflectiveTest
+class RenameConstructorEnumTest extends _RenameConstructorTest {
+  Future<void> test_checkNewName() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+}
+''');
+    createRenameRefactoringAtString('test(); // 0');
+    expect(refactoring.oldName, 'test');
+    // same
+    refactoring.newName = 'test';
+    assertRefactoringStatus(
+        refactoring.checkNewName(), RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            'The new name must be different than the current name.');
+    // empty
+    refactoring.newName = '';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+    // OK
+    refactoring.newName = 'newName';
+    assertRefactoringStatusOK(refactoring.checkNewName());
+  }
+
+  Future<void> test_checkNewName_hasMember_constructor() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+  const E.newName(); // existing
+}
+''');
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    // check status
+    refactoring.newName = 'newName';
+    var status = refactoring.checkNewName();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Class 'E' already declares constructor with name 'newName'.",
+        expectedContextSearch: 'newName(); // existing');
+  }
+
+  Future<void> test_checkNewName_hasMember_method() async {
+    await indexTestUnit('''
+enum E {
+  v.test();
+  const E.test(); // 0
+  void newName() {} // existing
+}
+''');
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    // check status
+    refactoring.newName = 'newName';
+    var status = refactoring.checkNewName();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Class 'E' already declares method with name 'newName'.",
+        expectedContextSearch: 'newName() {} // existing');
+  }
+
+  Future<void> test_createChange_add() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3, v4.other();
+  const E(); // 0
+  const E.other() : this();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName(), v4.other();
+  const E.newName(); // 0
+  const E.other() : this.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasConstructor() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  factory E.other() => throw 0;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  factory E.other() => throw 0;
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasField() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  final int foo = 0;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  final int foo = 0;
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasMethod() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+
+  void foo() {}
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+
+  void foo() {}
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_hasSemicolon() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3;
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_add_toSynthetic_noSemicolon() async {
+    await indexTestUnit('''
+/// [E.new]
+enum E {
+  v1(), v2.new(), v3
+}
+''');
+    // configure refactoring
+    _createEnumConstantRefactoring('v1()');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, '');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.newName(), v3.newName();
+
+  const E.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_change() async {
+    await indexTestUnit('''
+/// [E.test]
+enum E {
+  v1.test(), v2.other();
+  const E.test(); // 0
+  const E.other() : this.test();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, 'test');
+    // validate change
+    refactoring.newName = 'newName';
+    return assertSuccessfulRefactoring('''
+/// [E.newName]
+enum E {
+  v1.newName(), v2.other();
+  const E.newName(); // 0
+  const E.other() : this.newName();
+}
+''');
+  }
+
+  Future<void> test_createChange_remove() async {
+    await indexTestUnit('''
+/// [E]
+enum E {
+  v1.test(), v2.other();
+  const E.test(); // 0
+  const E.other() : this.test();
+}
+''');
+    // configure refactoring
+    _createConstructorDeclarationRefactoring('test(); // 0');
+    expect(refactoring.refactoringName, 'Rename Constructor');
+    expect(refactoring.elementKindName, 'constructor');
+    expect(refactoring.oldName, 'test');
+    // validate change
+    refactoring.newName = '';
+    return assertSuccessfulRefactoring('''
+/// [E]
+enum E {
+  v1(), v2.other();
+  const E(); // 0
+  const E.other() : this();
+}
+''');
+  }
+
+  void _createEnumConstantRefactoring(String search) {
+    var enumConstant = findNode.enumConstantDeclaration(search);
+    var element = enumConstant.constructorElement;
+    createRenameRefactoringForElement(element);
+  }
+}
+
+class _RenameConstructorTest extends RenameRefactoringTest {
   void _createConstructorDeclarationRefactoring(String search) {
     var element = findNode.constructor(search).declaredElement;
     createRenameRefactoringForElement(element);
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index 53e071c..d616586 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -125,7 +125,7 @@
       var statement = statements[0] as ExpressionStatement;
       var creation = statement.expression as InstanceCreationExpression;
       var constructorName = creation.constructorName;
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       var argumentList = creation.argumentList;
       expect(_flutter.identifyWidgetExpression(creation), creation);
       expect(_flutter.identifyWidgetExpression(constructorName), creation);
@@ -142,7 +142,7 @@
       var statement = statements[1] as ExpressionStatement;
       var creation = statement.expression as InstanceCreationExpression;
       var constructorName = creation.constructorName;
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       var argumentList = creation.argumentList;
       expect(_flutter.identifyWidgetExpression(creation), creation);
       expect(_flutter.identifyWidgetExpression(constructorName), creation);
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index da9d00b..cdfd1df 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -326,7 +326,7 @@
       'abstractKeyword': node.abstractKeyword,
       'name': node.name,
       'typeParameters': node.typeParameters,
-      'superclass': node.superclass2,
+      'superclass': node.superclass,
       'withClause': node.withClause,
       'implementsClause': node.implementsClause,
     });
@@ -409,7 +409,7 @@
   @override
   void visitConstructorName(ConstructorName node) {
     _visitChildren(node, {
-      'type': node.type2,
+      'type': node.type,
       'name': node.name,
     });
     super.visitConstructorName(node);
@@ -531,7 +531,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     _visitChildren(node, {
-      'superclass': node.superclass2,
+      'superclass': node.superclass,
     });
     super.visitExtendsClause(node);
   }
@@ -775,7 +775,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _visitChildren(node, {
-      'interfaces': node.interfaces2,
+      'interfaces': node.interfaces,
     });
     super.visitImplementsClause(node);
   }
@@ -986,7 +986,7 @@
   @override
   void visitOnClause(OnClause node) {
     _visitChildren(node, {
-      'superclassConstraints': node.superclassConstraints2,
+      'superclassConstraints': node.superclassConstraints,
     });
     super.visitOnClause(node);
   }
@@ -1286,7 +1286,7 @@
   @override
   void visitWithClause(WithClause node) {
     _visitChildren(node, {
-      'mixinTypes': node.mixinTypes2,
+      'mixinTypes': node.mixinTypes,
     });
     super.visitWithClause(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index 157e2be..97f3c5c 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -456,7 +456,7 @@
   void visitClassTypeAlias(ClassTypeAlias node) {
     var wasInGenericContext = inGenericContext;
     inGenericContext = inGenericContext || node.typeParameters != null;
-    _recordDataForNode('ClassTypeAlias (superclass)', node.superclass2);
+    _recordDataForNode('ClassTypeAlias (superclass)', node.superclass);
     var context = 'superclass';
     _recordTokenType('ClassDeclaration ($context)', node.withClause);
     context = 'with';
@@ -646,7 +646,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    _recordDataForNode('ExtendsClause (type)', node.superclass2);
+    _recordDataForNode('ExtendsClause (type)', node.superclass);
     super.visitExtendsClause(node);
   }
 
@@ -845,7 +845,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces2) {
+    for (var namedType in node.interfaces) {
       _recordDataForNode('ImplementsClause (type)', namedType);
     }
     super.visitImplementsClause(node);
@@ -1068,7 +1068,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints2) {
+    for (var constraint in node.superclassConstraints) {
       _recordDataForNode('OnClause (type)', constraint);
     }
     super.visitOnClause(node);
@@ -1351,7 +1351,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes2) {
+    for (var namedType in node.mixinTypes) {
       _recordDataForNode('WithClause (type)', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index 7111493..a50093b 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -463,7 +463,7 @@
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    _recordDataForNode('ClassTypeAlias_superclass', node.superclass2);
+    _recordDataForNode('ClassTypeAlias_superclass', node.superclass);
     var context = 'superclass';
     _recordKeyword('ClassTypeAlias_$context', node.withClause);
     context = 'with';
@@ -643,7 +643,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    _recordDataForNode('ExtendsClause_superclass', node.superclass2);
+    _recordDataForNode('ExtendsClause_superclass', node.superclass);
     super.visitExtendsClause(node);
   }
 
@@ -819,7 +819,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     // At the start of each type name.
-    for (var namedType in node.interfaces2) {
+    for (var namedType in node.interfaces) {
       _recordDataForNode('ImplementsClause_interface', namedType);
     }
     super.visitImplementsClause(node);
@@ -998,7 +998,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (var constraint in node.superclassConstraints2) {
+    for (var constraint in node.superclassConstraints) {
       _recordDataForNode('OnClause_superclassConstraint', constraint);
     }
     super.visitOnClause(node);
@@ -1251,7 +1251,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (var namedType in node.mixinTypes2) {
+    for (var namedType in node.mixinTypes) {
       _recordDataForNode('WithClause_mixinType', namedType);
     }
     super.visitWithClause(node);
diff --git a/pkg/analysis_server/tool/code_completion/visitors.dart b/pkg/analysis_server/tool/code_completion/visitors.dart
index f65c8b6..5783758 100644
--- a/pkg/analysis_server/tool/code_completion/visitors.dart
+++ b/pkg/analysis_server/tool/code_completion/visitors.dart
@@ -653,7 +653,7 @@
           if (constructorName is ConstructorName) {
             var instanceCreationExpression = constructorName.parent;
             if (instanceCreationExpression is InstanceCreationExpression &&
-                constructorName.type2.name == node) {
+                constructorName.type.name == node) {
               if (instanceCreationExpression.keyword != null ||
                   constructorName.name == null) {
                 elementKind = protocol.ElementKind.CONSTRUCTOR;
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index e75af1d..64571a3 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -2,6 +2,7 @@
 * Added `getField` to `ExtensionElement`.
 * Added `isGenerative` to `ConstructorElement`.
 * Added `isDartCoreEnum` to `ClassElement` and `DartType`.
+* Deprecated `superclass2`, `mixinTypes2`, etc. Use `superclass`, `mixinTypes`, etc.
 
 ## 3.2.0
 * Deprecated `changes` getter in `File` and `Folder`, use `watch()` instead.
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index 0d9c573..5719d83 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -916,6 +916,10 @@
   SimpleIdentifier get name;
 
   /// Return the name of the superclass of the class being declared.
+  NamedType get superclass;
+
+  /// Return the name of the superclass of the class being declared.
+  @Deprecated('Use superclass instead')
   NamedType get superclass2;
 
   /// Return the type parameters for the class, or `null` if the class does not
@@ -1342,6 +1346,10 @@
   Token? get period;
 
   /// Return the name of the type defining the constructor.
+  NamedType get type;
+
+  /// Return the name of the type defining the constructor.
+  @Deprecated('Use type instead')
   NamedType get type2;
 }
 
@@ -1783,6 +1791,10 @@
   Token get extendsKeyword;
 
   /// Return the name of the class that is being extended.
+  NamedType get superclass;
+
+  /// Return the name of the class that is being extended.
+  @Deprecated('Use superclass instead')
   NamedType get superclass2;
 }
 
@@ -2680,6 +2692,10 @@
   Token get implementsKeyword;
 
   /// Return the list of the interfaces that are being implemented.
+  NodeList<NamedType> get interfaces;
+
+  /// Return the list of the interfaces that are being implemented.
+  @Deprecated('Use interfaces instead')
   NodeList<NamedType> get interfaces2;
 }
 
@@ -3532,6 +3548,10 @@
   Token get onKeyword;
 
   /// Return the list of the classes are superclass constraints for the mixin.
+  NodeList<NamedType> get superclassConstraints;
+
+  /// Return the list of the classes are superclass constraints for the mixin.
+  @Deprecated('Use superclassConstraints instead')
   NodeList<NamedType> get superclassConstraints2;
 }
 
@@ -4615,6 +4635,10 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class WithClause implements AstNode {
   /// Return the names of the mixins that were specified.
+  NodeList<NamedType> get mixinTypes;
+
+  /// Return the names of the mixins that were specified.
+  @Deprecated('Use mixinTypes instead')
   NodeList<NamedType> get mixinTypes2;
 
   /// Return the token representing the 'with' keyword.
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
index d65f695..b8a21dc 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/library_builder.dart
@@ -173,7 +173,7 @@
 
     NamedType? enclosingSuperClass;
     if (node is ClassDeclaration) {
-      enclosingSuperClass = node.extendsClause?.superclass2;
+      enclosingSuperClass = node.extendsClause?.superclass;
     }
 
     enclosingClassNameSignature =
@@ -290,7 +290,7 @@
     var api = referenceCollector.collect(
       apiTokenSignature,
       typeParameters: node.typeParameters,
-      superClass: node.superclass2,
+      superClass: node.superclass,
       withClause: node.withClause,
       implementsClause: node.implementsClause,
     );
diff --git a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
index b9b7403..706248e 100644
--- a/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/dependency/reference_collector.dart
@@ -88,11 +88,11 @@
     _visitTypeParameterList(typeParameters2);
 
     // Parts of classes.
-    _visitTypeAnnotation(extendsClause?.superclass2);
+    _visitTypeAnnotation(extendsClause?.superclass);
     _visitTypeAnnotation(superClass);
-    _visitTypeAnnotations(withClause?.mixinTypes2);
-    _visitTypeAnnotations(onClause?.superclassConstraints2);
-    _visitTypeAnnotations(implementsClause?.interfaces2);
+    _visitTypeAnnotations(withClause?.mixinTypes);
+    _visitTypeAnnotations(onClause?.superclassConstraints);
+    _visitTypeAnnotations(implementsClause?.interfaces);
 
     // Parts of executables.
     _visitFormalParameterList(formalParameters);
@@ -305,7 +305,7 @@
   void _visitConstructorName(ConstructorName? node) {
     if (node == null) return;
 
-    _visitConstructor(node.type2, node.name);
+    _visitConstructor(node.type, node.name);
   }
 
   void _visitExpression(Expression? node, {bool get = true, bool set = false}) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index b703443..ba8cdd5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -634,13 +634,13 @@
       offset = node.period!.offset;
       length = node.name!.end - offset;
     } else {
-      offset = node.type2.end;
+      offset = node.type.end;
       length = 0;
     }
 
     recordRelationOffset(element, kind, offset, length, true);
 
-    node.type2.accept(this);
+    node.type.accept(this);
   }
 
   @override
@@ -690,7 +690,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    recordSuperType(node.superclass2, IndexRelationKind.IS_EXTENDED_BY);
+    recordSuperType(node.superclass, IndexRelationKind.IS_EXTENDED_BY);
   }
 
   @override
@@ -709,7 +709,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    for (NamedType namedType in node.interfaces2) {
+    for (NamedType namedType in node.interfaces) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -763,7 +763,7 @@
   @override
   void visitNamedType(NamedType node) {
     AstNode parent = node.parent!;
-    if (parent is ClassTypeAlias && parent.superclass2 == node) {
+    if (parent is ClassTypeAlias && parent.superclass == node) {
       recordSuperType(node, IndexRelationKind.IS_EXTENDED_BY);
     } else {
       super.visitNamedType(node);
@@ -772,7 +772,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    for (NamedType namedType in node.superclassConstraints2) {
+    for (NamedType namedType in node.superclassConstraints) {
       recordSuperType(namedType, IndexRelationKind.IS_IMPLEMENTED_BY);
     }
   }
@@ -893,7 +893,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    for (NamedType namedType in node.mixinTypes2) {
+    for (NamedType namedType in node.mixinTypes) {
       recordSuperType(namedType, IndexRelationKind.IS_MIXED_IN_BY);
     }
   }
@@ -925,9 +925,9 @@
     }
 
     addSupertype(superclass);
-    withClause?.mixinTypes2.forEach(addSupertype);
-    onClause?.superclassConstraints2.forEach(addSupertype);
-    implementsClause?.interfaces2.forEach(addSupertype);
+    withClause?.mixinTypes.forEach(addSupertype);
+    onClause?.superclassConstraints.forEach(addSupertype);
+    implementsClause?.interfaces.forEach(addSupertype);
 
     void addMemberName(SimpleIdentifier identifier) {
       String name = identifier.name;
@@ -955,7 +955,7 @@
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassDeclaration(ClassDeclaration node) {
     _addSubtype(node.name.name,
-        superclass: node.extendsClause?.superclass2,
+        superclass: node.extendsClause?.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
         memberNodes: node.members);
@@ -964,7 +964,7 @@
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassTypeAlis(ClassTypeAlias node) {
     _addSubtype(node.name.name,
-        superclass: node.superclass2,
+        superclass: node.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
         memberNodes: const []);
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 2d5e347..073d6f6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
@@ -34,16 +34,16 @@
 
   for (CompilationUnitMember declaration in unit.declarations) {
     if (declaration is ClassDeclaration) {
-      _addSubtypedName(declaration.extendsClause?.superclass2);
-      _addSubtypedNames(declaration.withClause?.mixinTypes2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedName(declaration.extendsClause?.superclass);
+      _addSubtypedNames(declaration.withClause?.mixinTypes);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     } else if (declaration is ClassTypeAlias) {
-      _addSubtypedName(declaration.superclass2);
-      _addSubtypedNames(declaration.withClause.mixinTypes2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedName(declaration.superclass);
+      _addSubtypedNames(declaration.withClause.mixinTypes);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     } else if (declaration is MixinDeclaration) {
-      _addSubtypedNames(declaration.onClause?.superclassConstraints2);
-      _addSubtypedNames(declaration.implementsClause?.interfaces2);
+      _addSubtypedNames(declaration.onClause?.superclassConstraints);
+      _addSubtypedNames(declaration.implementsClause?.interfaces);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 50f88f8..0424dc2 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1729,10 +1729,14 @@
   @override
   bool get isAbstract => abstractKeyword != null;
 
+  @override
+  NamedTypeImpl get superclass => _superclass;
+
   set superclass(NamedType superclass) {
     _superclass = _becomeParentOf(superclass as NamedTypeImpl);
   }
 
+  @Deprecated('Use superclass instead')
   @override
   NamedTypeImpl get superclass2 => _superclass;
 
@@ -2675,10 +2679,14 @@
     _name = _becomeParentOf(name as SimpleIdentifierImpl?);
   }
 
+  @override
+  NamedTypeImpl get type => _type;
+
   set type(NamedType type) {
     _type = _becomeParentOf(type as NamedTypeImpl);
   }
 
+  @Deprecated('Use type instead')
   @override
   NamedTypeImpl get type2 => _type;
 
@@ -3856,10 +3864,14 @@
   @override
   Token get endToken => _superclass.endToken;
 
+  @override
+  NamedTypeImpl get superclass => _superclass;
+
   set superclass(NamedType name) {
     _superclass = _becomeParentOf(name as NamedTypeImpl);
   }
 
+  @Deprecated('Use superclass instead')
   @override
   NamedTypeImpl get superclass2 => _superclass;
 
@@ -6002,12 +6014,16 @@
   // TODO(paulberry): add commas.
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(implementsKeyword)
-    ..addAll(interfaces2);
+    ..addAll(interfaces);
 
   @override
   Token get endToken => _interfaces.endToken!;
 
   @override
+  NodeListImpl<NamedType> get interfaces => _interfaces;
+
+  @Deprecated('Use interfaces instead')
+  @override
   NodeListImpl<NamedType> get interfaces2 => _interfaces;
 
   @override
@@ -8217,12 +8233,16 @@
   // TODO(paulberry): add commas.
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(onKeyword)
-    ..addAll(superclassConstraints2);
+    ..addAll(superclassConstraints);
 
   @override
   Token get endToken => _superclassConstraints.endToken!;
 
   @override
+  NodeListImpl<NamedType> get superclassConstraints => _superclassConstraints;
+
+  @Deprecated('Use superclassConstraints instead')
+  @override
   NodeListImpl<NamedType> get superclassConstraints2 => _superclassConstraints;
 
   @override
@@ -11315,6 +11335,10 @@
   Token get endToken => _mixinTypes.endToken!;
 
   @override
+  NodeListImpl<NamedType> get mixinTypes => _mixinTypes;
+
+  @Deprecated('Use mixinTypes instead')
+  @override
   NodeListImpl<NamedType> get mixinTypes2 => _mixinTypes;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 8159d3a..e0bfc35 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -52,6 +52,18 @@
   }
 
   @override
+  Element? visitConstructorSelector(ConstructorSelector node) {
+    var parent = node.parent;
+    if (parent is EnumConstantArguments) {
+      var parent2 = parent.parent;
+      if (parent2 is EnumConstantDeclaration) {
+        return parent2.constructorElement;
+      }
+    }
+    return null;
+  }
+
+  @override
   Element? visitExportDirective(ExportDirective node) {
     return node.element;
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
index 2fc1149..960f2cf 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -174,7 +174,7 @@
     _visitNode(node.name);
     _visitNode(node.typeParameters);
     sink.write(' = ');
-    _visitNode(node.superclass2);
+    _visitNode(node.superclass);
     _visitNode(node.withClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
     sink.write(';');
@@ -239,7 +239,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    _visitNode(node.type2);
+    _visitNode(node.type);
     _visitNode(node.name, prefix: '.');
   }
 
@@ -376,7 +376,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     sink.write('extends ');
-    _visitNode(node.superclass2);
+    _visitNode(node.superclass);
   }
 
   @override
@@ -622,7 +622,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     sink.write('implements ');
-    _visitNodeList(node.interfaces2, separator: ', ');
+    _visitNodeList(node.interfaces, separator: ', ');
   }
 
   @override
@@ -813,7 +813,7 @@
   @override
   void visitOnClause(OnClause node) {
     sink.write('on ');
-    _visitNodeList(node.superclassConstraints2, separator: ', ');
+    _visitNodeList(node.superclassConstraints, separator: ', ');
   }
 
   @override
@@ -1113,7 +1113,7 @@
   @override
   void visitWithClause(WithClause node) {
     sink.write('with ');
-    _visitNodeList(node.mixinTypes2, separator: ', ');
+    _visitNodeList(node.mixinTypes, separator: ', ');
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 1aca07f..dd78df6 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -255,7 +255,7 @@
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualTokens(node.equals, other.equals) &&
         isEqualTokens(node.abstractKeyword, other.abstractKeyword) &&
-        isEqualNodes(node.superclass2, other.superclass2) &&
+        isEqualNodes(node.superclass, other.superclass) &&
         isEqualNodes(node.withClause, other.withClause) &&
         isEqualNodes(node.implementsClause, other.implementsClause) &&
         isEqualTokens(node.semicolon, other.semicolon);
@@ -338,7 +338,7 @@
   @override
   bool visitConstructorName(ConstructorName node) {
     ConstructorName other = _other as ConstructorName;
-    return isEqualNodes(node.type2, other.type2) &&
+    return isEqualNodes(node.type, other.type) &&
         isEqualTokens(node.period, other.period) &&
         isEqualNodes(node.name, other.name);
   }
@@ -482,7 +482,7 @@
   bool visitExtendsClause(ExtendsClause node) {
     ExtendsClause other = _other as ExtendsClause;
     return isEqualTokens(node.extendsKeyword, other.extendsKeyword) &&
-        isEqualNodes(node.superclass2, other.superclass2);
+        isEqualNodes(node.superclass, other.superclass);
   }
 
   @override
@@ -733,7 +733,7 @@
   bool visitImplementsClause(ImplementsClause node) {
     ImplementsClause other = _other as ImplementsClause;
     return isEqualTokens(node.implementsKeyword, other.implementsKeyword) &&
-        _isEqualNodeLists(node.interfaces2, other.interfaces2);
+        _isEqualNodeLists(node.interfaces, other.interfaces);
   }
 
   @override
@@ -938,7 +938,7 @@
     OnClause other = _other as OnClause;
     return isEqualTokens(node.onKeyword, other.onKeyword) &&
         _isEqualNodeLists(
-            node.superclassConstraints2, other.superclassConstraints2);
+            node.superclassConstraints, other.superclassConstraints);
   }
 
   @override
@@ -1281,7 +1281,7 @@
   bool visitWithClause(WithClause node) {
     WithClause other = _other as WithClause;
     return isEqualTokens(node.withKeyword, other.withKeyword) &&
-        _isEqualNodeLists(node.mixinTypes2, other.mixinTypes2);
+        _isEqualNodeLists(node.mixinTypes, other.mixinTypes);
   }
 
   @override
@@ -1797,7 +1797,7 @@
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
-    } else if (identical(node.superclass2, _oldNode)) {
+    } else if (identical(node.superclass, _oldNode)) {
       node.superclass = _newNode as NamedType;
       return true;
     } else if (identical(node.withClause, _oldNode)) {
@@ -1908,7 +1908,7 @@
 
   @override
   bool visitConstructorName(covariant ConstructorNameImpl node) {
-    if (identical(node.type2, _oldNode)) {
+    if (identical(node.type, _oldNode)) {
       node.type = _newNode as NamedType;
       return true;
     } else if (identical(node.name, _oldNode)) {
@@ -2061,7 +2061,7 @@
 
   @override
   bool visitExtendsClause(covariant ExtendsClauseImpl node) {
-    if (identical(node.superclass2, _oldNode)) {
+    if (identical(node.superclass, _oldNode)) {
       node.superclass = _newNode as NamedType;
       return true;
     }
@@ -2402,7 +2402,7 @@
 
   @override
   bool visitImplementsClause(covariant ImplementsClauseImpl node) {
-    if (_replaceInList(node.interfaces2)) {
+    if (_replaceInList(node.interfaces)) {
       return true;
     }
     return visitNode(node);
@@ -2674,7 +2674,7 @@
 
   @override
   bool visitOnClause(covariant OnClauseImpl node) {
-    if (_replaceInList(node.superclassConstraints2)) {
+    if (_replaceInList(node.superclassConstraints)) {
       return true;
     }
     return visitNode(node);
@@ -3046,7 +3046,7 @@
 
   @override
   bool visitWithClause(covariant WithClauseImpl node) {
-    if (_replaceInList(node.mixinTypes2)) {
+    if (_replaceInList(node.mixinTypes)) {
       return true;
     }
     return visitNode(node);
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 1202cc6..92f15c0 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -118,7 +118,7 @@
   void visitConstructorReference(ConstructorReference node) {
     super.visitConstructorReference(node);
     if (node.inConstantContext || node.inConstantExpression) {
-      _checkForConstWithTypeParameters(node.constructorName.type2,
+      _checkForConstWithTypeParameters(node.constructorName.type,
           CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS_CONSTRUCTOR_TEAROFF);
     }
   }
@@ -169,7 +169,7 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     if (node.isConst) {
-      NamedType namedType = node.constructorName.type2;
+      NamedType namedType = node.constructorName.type;
       _checkForConstWithTypeParameters(
           namedType, CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS);
 
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 0e8ee0a..49ca24e 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -662,7 +662,7 @@
     // The result is already instantiated during resolution;
     // [_dartObjectComputer.typeInstantiate] is unnecessary.
     var typeElement =
-        node.constructorName.type2.name.staticElement as TypeDefiningElement;
+        node.constructorName.type.name.staticElement as TypeDefiningElement;
 
     TypeAliasElement? viaTypeAlias;
     if (typeElement is TypeAliasElementImpl) {
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index ae554f5..66503bc 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -188,7 +188,7 @@
     }
 
     if (node is ConstructorReference) {
-      _typeArgumentList(node.constructorName.type2.typeArguments);
+      _typeArgumentList(node.constructorName.type.typeArguments);
       return;
     }
 
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index 06fb704..f4077d4 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -551,10 +551,10 @@
       return;
     }
     if (errorNode is ConstructorName &&
-        !(errorNode.type2.type as InterfaceType).element.hasOptionalTypeArgs) {
+        !(errorNode.type.type as InterfaceType).element.hasOptionalTypeArgs) {
       String constructorName = errorNode.name == null
-          ? errorNode.type2.name.name
-          : '${errorNode.type2}.${errorNode.name}';
+          ? errorNode.type.name.name
+          : '${errorNode.type}.${errorNode.name}';
       errorReporter.reportErrorForNode(
           HintCode.INFERENCE_FAILURE_ON_INSTANCE_CREATION,
           errorNode,
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 61f364e..1ab0674 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -45,7 +45,7 @@
       // Either `new` or `const` has been specified.
       return node;
     }
-    var typeName = node.constructorName.type2.name;
+    var typeName = node.constructorName.type.name;
     if (typeName is SimpleIdentifier) {
       var element = nameScope.lookup(typeName.name).getter;
       if (element is FunctionElement ||
@@ -525,8 +525,8 @@
     required TypeAliasElement element,
   }) {
     var typeName = astFactory.namedType(
-      name: node.constructorName.type2.name,
-      typeArguments: node.constructorName.type2.typeArguments,
+      name: node.constructorName.type.name,
+      typeArguments: node.constructorName.type.typeArguments,
     );
     typeName.type = element.aliasedType;
     typeName.name.staticType = element.aliasedType;
@@ -549,7 +549,7 @@
   }) {
     var functionReference = astFactory.functionReference(
       function: function,
-      typeArguments: node.constructorName.type2.typeArguments,
+      typeArguments: node.constructorName.type.typeArguments,
     );
     var methodInvocation = astFactory.methodInvocation(
       functionReference,
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
index 4ef8323..bd133e5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -20,7 +20,7 @@
 
   void resolve(ConstructorReferenceImpl node) {
     if (!_resolver.isConstructorTearoffsEnabled &&
-        node.constructorName.type2.typeArguments == null) {
+        node.constructorName.type.typeArguments == null) {
       // Only report this if [node] has no explicit type arguments; otherwise
       // the parser has already reported an error.
       _resolver.errorReporter.reportErrorForNode(
@@ -49,7 +49,7 @@
       //
       // Only report errors when the constructor tearoff feature is enabled,
       // to avoid reporting redundant errors.
-      var enclosingElement = node.constructorName.type2.name.staticElement;
+      var enclosingElement = node.constructorName.type.name.staticElement;
       if (enclosingElement is TypeAliasElement) {
         enclosingElement = enclosingElement.aliasedType.element;
       }
@@ -124,7 +124,7 @@
         constructorName.name?.staticElement = constructorElement.declaration;
         node.staticType = inferred;
         // The NamedType child of `constructorName` doesn't have a static type.
-        constructorName.type2.type = null;
+        constructorName.type.type = null;
       }
     } else {
       var constructorElement = constructorName.staticElement;
@@ -134,7 +134,7 @@
         node.staticType = constructorElement.type;
       }
       // The NamedType child of `constructorName` doesn't have a static type.
-      constructorName.type2.type = null;
+      constructorName.type.type = null;
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index dedb7b5..41802d0 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -65,7 +65,7 @@
           CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
           typeArguments,
           [
-            function.constructorName.type2.name.toSource(),
+            function.constructorName.type.name.toSource(),
             function.constructorName.name!.name
           ],
         );
diff --git a/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
index 2e12dd0..fff2325 100644
--- a/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
@@ -38,7 +38,7 @@
     // InstanceCreationExpression needs to be rewritten as a MethodInvocation
     // with a target of `a.m<int>` (a FunctionReference) and a name of `apply`.
     if (node.keyword == null) {
-      var typeNameTypeArguments = node.constructorName.type2.typeArguments;
+      var typeNameTypeArguments = node.constructorName.type.typeArguments;
       if (typeNameTypeArguments != null) {
         // This could be a method call on a function reference or a constructor
         // reference.
@@ -60,7 +60,7 @@
       constructorName: constructorName,
       definingLibrary: _resolver.definingLibrary,
     );
-    var typeName = constructorName.type2;
+    var typeName = constructorName.type;
     var constructorElement = constructorName.staticElement;
     var inferenceResult = inferArgumentTypes(
         inferenceNode: node,
@@ -93,7 +93,7 @@
     InstanceCreationExpressionImpl node,
     TypeArgumentListImpl typeNameTypeArguments,
   ) {
-    var typeNameName = node.constructorName.type2.name;
+    var typeNameName = node.constructorName.type.name;
     if (typeNameName is SimpleIdentifierImpl) {
       // TODO(srawlins): Lookup the name and potentially rewrite `node` as a
       // [MethodInvocation].
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index e31ad4c..598cae9 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -97,7 +97,7 @@
     List<TypeParameterElement>? typeParameters;
     ConstructorElement? rawElement;
 
-    var typeName = constructorName.type2;
+    var typeName = constructorName.type;
     var typeArguments = typeName.typeArguments;
     var typeElement = typeName.name.staticElement;
     if (typeElement is ClassElement) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index d41a3b6..0cef5e5 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -235,7 +235,7 @@
           ErrorCode errorCode = withClause == null
               ? CompileTimeErrorCode.EXTENDS_NON_CLASS
               : CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS;
-          _resolveType(extendsClause.superclass2, errorCode, asClass: true);
+          _resolveType(extendsClause.superclass, errorCode, asClass: true);
         }
 
         _resolveWithClause(withClause);
@@ -265,7 +265,7 @@
         node.typeParameters?.accept(this);
 
         _resolveType(
-          node.superclass2,
+          node.superclass,
           CompileTimeErrorCode.MIXIN_WITH_NON_CLASS_SUPERCLASS,
           asClass: true,
         );
@@ -780,7 +780,7 @@
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     var newNode = _astRewriter.instanceCreationExpression(_nameScope, node);
     if (newNode != node) {
-      if (node.constructorName.type2.typeArguments != null &&
+      if (node.constructorName.type.typeArguments != null &&
           newNode is MethodInvocation &&
           newNode.target is FunctionReference &&
           !_libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
@@ -1293,7 +1293,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.interfaces2,
+      clause.interfaces,
       CompileTimeErrorCode.IMPLEMENTS_NON_CLASS,
     );
   }
@@ -1302,7 +1302,7 @@
     if (clause == null) return;
 
     _resolveTypes(
-      clause.superclassConstraints2,
+      clause.superclassConstraints,
       CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_NON_INTERFACE,
     );
   }
@@ -1311,7 +1311,7 @@
     var redirectedConstructor = node.redirectedConstructor;
     if (redirectedConstructor == null) return;
 
-    var namedType = redirectedConstructor.type2;
+    var namedType = redirectedConstructor.type;
     _namedTypeResolver.redirectedConstructor_namedType = namedType;
 
     redirectedConstructor.accept(this);
@@ -1372,7 +1372,7 @@
   void _resolveWithClause(WithClause? clause) {
     if (clause == null) return;
 
-    for (var namedType in clause.mixinTypes2) {
+    for (var namedType in clause.mixinTypes) {
       _namedTypeResolver.withClause_namedType = namedType;
       _resolveType(
         namedType as NamedTypeImpl,
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 74bf441..a151c37 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -1197,7 +1197,7 @@
       // TODO(jwren) We should modify ConstructorElement.getDisplayName(), or
       // have the logic centralized elsewhere, instead of doing this logic
       // here.
-      String fullConstructorName = constructorName.type2.name.name;
+      String fullConstructorName = constructorName.type.name.name;
       if (constructorName.name != null) {
         fullConstructorName = '$fullConstructorName.${constructorName.name}';
       }
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index e7d450e..5e6859d 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -45,7 +45,7 @@
           classNameNode: declaration.name,
           implementsClause: declaration.implementsClause,
           members: declaration.members,
-          superclass: declaration.extendsClause?.superclass2,
+          superclass: declaration.extendsClause?.superclass,
           withClause: declaration.withClause,
         ).verify();
       } else if (declaration is ClassTypeAlias) {
@@ -58,7 +58,7 @@
           library: library,
           classNameNode: declaration.name,
           implementsClause: declaration.implementsClause,
-          superclass: declaration.superclass2,
+          superclass: declaration.superclass,
           withClause: declaration.withClause,
         ).verify();
       } else if (declaration is EnumDeclaration) {
@@ -178,7 +178,7 @@
     //   class C extends S&M2 { ...members of C... }
     // So, we need to check members of each mixin against superinterfaces
     // of `S`, and superinterfaces of all previous mixins.
-    var mixinNodes = withClause?.mixinTypes2;
+    var mixinNodes = withClause?.mixinTypes;
     var mixinTypes = classElement.mixins;
     for (var i = 0; i < mixinTypes.length; i++) {
       var mixinType = mixinTypes[i];
@@ -398,7 +398,7 @@
   bool _checkDirectSuperTypes() {
     var hasError = false;
     if (implementsClause != null) {
-      for (var namedType in implementsClause!.interfaces2) {
+      for (var namedType in implementsClause!.interfaces) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS,
@@ -408,7 +408,7 @@
       }
     }
     if (onClause != null) {
-      for (var namedType in onClause!.superclassConstraints2) {
+      for (var namedType in onClause!.superclassConstraints) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_SUPER_CLASS_CONSTRAINT_DISALLOWED_CLASS,
@@ -426,7 +426,7 @@
       }
     }
     if (withClause != null) {
-      for (var namedType in withClause!.mixinTypes2) {
+      for (var namedType in withClause!.mixinTypes) {
         if (_checkDirectSuperType(
           namedType,
           CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS,
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index db01b0b..aadad6e 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -33,7 +33,7 @@
       _libraryElement.typeSystem as TypeSystemImpl;
 
   void checkConstructorReference(ConstructorReference node) {
-    var classElement = node.constructorName.type2.name.staticElement;
+    var classElement = node.constructorName.type.name.staticElement;
     List<TypeParameterElement> typeParameters;
     if (classElement is TypeAliasElement) {
       typeParameters = classElement.typeParameters;
@@ -46,7 +46,7 @@
     if (typeParameters.isEmpty) {
       return;
     }
-    var typeArgumentList = node.constructorName.type2.typeArguments;
+    var typeArgumentList = node.constructorName.type.typeArguments;
     if (typeArgumentList == null) {
       return;
     }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 8046f63..68ee0dc 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -2821,7 +2821,7 @@
     if (!enableEnhancedEnums &&
         (tmpArguments != null ||
             tmpConstructor != null &&
-                (tmpConstructor.type2.typeArguments != null ||
+                (tmpConstructor.type.typeArguments != null ||
                     tmpConstructor.name != null))) {
       Token token = tmpArguments != null
           ? tmpArguments.argumentList.beginToken
@@ -2842,7 +2842,7 @@
     TypeArgumentListImpl? typeArguments;
     ConstructorSelectorImpl? constructorSelector;
     if (tmpConstructor != null) {
-      typeArguments = tmpConstructor.type2.typeArguments;
+      typeArguments = tmpConstructor.type.typeArguments;
       var constructorNamePeriod = tmpConstructor.period;
       var constructorNameId = tmpConstructor.name;
       if (constructorNamePeriod != null && constructorNameId != null) {
@@ -3744,7 +3744,7 @@
     var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
     var declaration = declarations.last as ClassDeclarationImpl;
     if (extendsClause != null) {
-      if (declaration.extendsClause?.superclass2 == null) {
+      if (declaration.extendsClause?.superclass == null) {
         declaration.extendsClause = extendsClause;
       }
     }
@@ -3752,15 +3752,15 @@
       if (declaration.withClause == null) {
         declaration.withClause = withClause;
       } else {
-        declaration.withClause!.mixinTypes2.addAll(withClause.mixinTypes2);
+        declaration.withClause!.mixinTypes.addAll(withClause.mixinTypes);
       }
     }
     if (implementsClause != null) {
       if (declaration.implementsClause == null) {
         declaration.implementsClause = implementsClause;
       } else {
-        declaration.implementsClause!.interfaces2
-            .addAll(implementsClause.interfaces2);
+        declaration.implementsClause!.interfaces
+            .addAll(implementsClause.interfaces);
       }
     }
   }
@@ -3802,16 +3802,16 @@
       if (mixinDeclaration!.onClause == null) {
         mixinDeclaration!.onClause = onClause;
       } else {
-        mixinDeclaration!.onClause!.superclassConstraints2
-            .addAll(onClause.superclassConstraints2);
+        mixinDeclaration!.onClause!.superclassConstraints
+            .addAll(onClause.superclassConstraints);
       }
     }
     if (implementsClause != null) {
       if (mixinDeclaration!.implementsClause == null) {
         mixinDeclaration!.implementsClause = implementsClause;
       } else {
-        mixinDeclaration!.implementsClause!.interfaces2
-            .addAll(implementsClause.interfaces2);
+        mixinDeclaration!.implementsClause!.interfaces
+            .addAll(implementsClause.interfaces);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index b32cea7..07b58e3 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -153,7 +153,7 @@
   }
 
   void visitConstructorName(covariant ConstructorNameImpl node) {
-    var type = node.type2.type;
+    var type = node.type.type;
     if (type == null) {
       return;
     }
@@ -368,7 +368,7 @@
     // TODO(brianwilkerson) Defer this check until we know there's an error (by
     // in-lining _resolveArgumentsToFunction below).
     var declaration = node.thisOrAncestorOfType<ClassDeclaration>();
-    var superclassName = declaration?.extendsClause?.superclass2.name;
+    var superclassName = declaration?.extendsClause?.superclass.name;
     if (superclassName != null &&
         _resolver.definingLibrary
             .shouldIgnoreUndefinedIdentifier(superclassName)) {
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 2eafede..83d50a2 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -432,7 +432,7 @@
       _checkForBuiltInIdentifierAsName(
           node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       _checkForConflictingClassTypeVariableErrorCodes();
-      var superclass = node.extendsClause?.superclass2;
+      var superclass = node.extendsClause?.superclass;
       var implementsClause = node.implementsClause;
       var withClause = node.withClause;
 
@@ -471,7 +471,7 @@
     try {
       _enclosingClass = node.declaredElement as ClassElementImpl;
       _checkClassInheritance(
-          node, node.superclass2, node.withClause, node.implementsClause);
+          node, node.superclass, node.withClause, node.implementsClause);
       _checkForMainFunction(node.name);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
     } finally {
@@ -844,7 +844,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.forEach(_checkForImplicitDynamicType);
+    node.interfaces.forEach(_checkForImplicitDynamicType);
     super.visitImplementsClause(node);
   }
 
@@ -879,7 +879,7 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     ConstructorName constructorName = node.constructorName;
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     DartType type = namedType.typeOrThrow;
     if (type is InterfaceType) {
       _checkForConstOrNewWithAbstractClass(node, namedType, type);
@@ -1333,7 +1333,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.forEach(_checkForImplicitDynamicType);
+    node.mixinTypes.forEach(_checkForImplicitDynamicType);
     super.visitWithClause(node);
   }
 
@@ -1353,7 +1353,7 @@
         !_checkForNoGenerativeConstructorsInSuperclass(superclass)) {
       _checkForImplicitDynamicType(superclass);
       _checkForExtendsDeferredClass(superclass);
-      _checkForRepeatedType(implementsClause?.interfaces2,
+      _checkForRepeatedType(implementsClause?.interfaces,
           CompileTimeErrorCode.IMPLEMENTS_REPEATED);
       _checkImplementsSuperClass(implementsClause);
       _checkMixinsSuperClass(withClause);
@@ -1427,9 +1427,9 @@
     bool problemReported = false;
     int mixinTypeIndex = -1;
     for (int mixinNameIndex = 0;
-        mixinNameIndex < withClause.mixinTypes2.length;
+        mixinNameIndex < withClause.mixinTypes.length;
         mixinNameIndex++) {
-      NamedType mixinName = withClause.mixinTypes2[mixinNameIndex];
+      NamedType mixinName = withClause.mixinTypes[mixinNameIndex];
       DartType mixinType = mixinName.typeOrThrow;
       if (mixinType is InterfaceType) {
         mixinTypeIndex++;
@@ -1479,7 +1479,7 @@
     if (redirectedElement == null) {
       // If the element is null, we check for the
       // REDIRECT_TO_MISSING_CONSTRUCTOR case
-      NamedType constructorNamedType = redirectedConstructor.type2;
+      NamedType constructorNamedType = redirectedConstructor.type;
       DartType redirectedType = constructorNamedType.typeOrThrow;
       if (redirectedType.element != null && !redirectedType.isDynamic) {
         // Prepare the constructor name
@@ -1659,15 +1659,15 @@
     }
 
     if (extendsClause != null) {
-      var superElement = extendsClause.superclass2.name.staticElement;
+      var superElement = extendsClause.superclass.name.staticElement;
       if (superElement != null && superElement.name == "Function") {
         errorReporter.reportErrorForNode(
-            HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass2);
+            HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass);
       }
     }
 
     if (implementsClause != null) {
-      for (var interface in implementsClause.interfaces2) {
+      for (var interface in implementsClause.interfaces) {
         var type = interface.type;
         if (type != null && type.isDartCoreFunction) {
           errorReporter.reportErrorForNode(
@@ -1680,7 +1680,7 @@
     }
 
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes2) {
+      for (NamedType type in withClause.mixinTypes) {
         var mixinElement = type.name.staticElement;
         if (mixinElement != null && mixinElement.name == "Function") {
           errorReporter.reportErrorForNode(
@@ -2802,7 +2802,7 @@
       return false;
     }
     bool foundError = false;
-    for (NamedType type in clause.interfaces2) {
+    for (NamedType type in clause.interfaces) {
       if (_checkForExtendsOrImplementsDisallowedClass(
           type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)) {
         foundError = true;
@@ -3007,7 +3007,7 @@
       } else {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.INSTANTIATE_ENUM,
-          node.type2,
+          node.type,
         );
       }
     }
@@ -3506,7 +3506,7 @@
       return false;
     }
 
-    for (NamedType mixinType in withClause.mixinTypes2) {
+    for (NamedType mixinType in withClause.mixinTypes) {
       DartType type = mixinType.typeOrThrow;
       if (type is InterfaceType) {
         LibraryElement library = type.element.library;
@@ -3830,7 +3830,7 @@
       return false;
     }
     bool problemReported = false;
-    for (NamedType namedType in onClause.superclassConstraints2) {
+    for (NamedType namedType in onClause.superclassConstraints) {
       DartType type = namedType.typeOrThrow;
       if (type is InterfaceType) {
         if (_checkForExtendsOrImplementsDisallowedClass(
@@ -4867,7 +4867,7 @@
       return;
     }
 
-    for (var interfaceNode in implementsClause.interfaces2) {
+    for (var interfaceNode in implementsClause.interfaces) {
       var type = interfaceNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
@@ -4889,11 +4889,11 @@
         !_checkForImplementsClauseErrorCodes(implementsClause)) {
 //      _checkForImplicitDynamicType(superclass);
       _checkForRepeatedType(
-        onClause?.superclassConstraints2,
+        onClause?.superclassConstraints,
         CompileTimeErrorCode.ON_REPEATED,
       );
       _checkForRepeatedType(
-        implementsClause?.interfaces2,
+        implementsClause?.interfaces,
         CompileTimeErrorCode.IMPLEMENTS_REPEATED,
       );
       _checkForConflictingGenerics(node);
@@ -4914,7 +4914,7 @@
       return;
     }
 
-    for (var mixinNode in withClause.mixinTypes2) {
+    for (var mixinNode in withClause.mixinTypes) {
       var type = mixinNode.type;
       if (type is InterfaceType && type.element == superElement) {
         errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 3735ddd..34d16ab 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -78,7 +78,7 @@
     // Only the Allocator, Opaque and Struct class may be extended.
     var extendsClause = node.extendsClause;
     if (extendsClause != null) {
-      final NamedType superclass = extendsClause.superclass2;
+      final NamedType superclass = extendsClause.superclass;
       final ffiClass = superclass.ffiClass;
       if (ffiClass != null) {
         final className = ffiClass.name;
@@ -133,14 +133,14 @@
 
     var implementsClause = node.implementsClause;
     if (implementsClause != null) {
-      for (NamedType type in implementsClause.interfaces2) {
+      for (NamedType type in implementsClause.interfaces) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_IMPLEMENTS,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_IMPLEMENTS);
       }
     }
     var withClause = node.withClause;
     if (withClause != null) {
-      for (NamedType type in withClause.mixinTypes2) {
+      for (NamedType type in withClause.mixinTypes) {
         checkSupertype(type, FfiCode.SUBTYPE_OF_FFI_CLASS_IN_WITH,
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_WITH);
       }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 512107b..d07e3e9 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1455,7 +1455,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     elementResolver.visitConstructorName(node as ConstructorNameImpl);
   }
 
@@ -1572,7 +1572,7 @@
           );
         }
       } else {
-        var typeName = constructorName.type2.name;
+        var typeName = constructorName.type.name;
         if (typeName.staticElement is EnumElementImpl) {
           var nameNode = node.arguments?.constructorSelector?.name;
           if (nameNode != null) {
@@ -3047,7 +3047,7 @@
     node.documentationComment?.accept(this);
     node.name.accept(this);
     node.typeParameters?.accept(this);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
   }
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index b5c5db4..c9a8835 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -152,7 +152,7 @@
       covariant InstanceCreationExpressionImpl node) {
     _inferInstanceCreationExpression(node);
     _inferenceHelper.recordStaticType(
-        node, node.constructorName.type2.typeOrThrow);
+        node, node.constructorName.type.typeOrThrow);
   }
 
   /// <blockquote>
@@ -322,7 +322,7 @@
       return;
     }
 
-    var typeName = constructorName.type2;
+    var typeName = constructorName.type;
     var typeArguments = typeName.typeArguments;
 
     var constructorType = elementToInfer.asType;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index e03af22..d9a70fa 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -166,7 +166,7 @@
     // We need to inform the applier about the right shape of the AST.
     // _sink.writeByte(node.name != null ? 1 : 0);
 
-    _writeNode(node.type2);
+    _writeNode(node.type);
     _writeOptionalNode(node.name);
 
     _sink.writeElement(node.staticElement);
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index b30141a..1c36d87 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -167,7 +167,7 @@
     node.name.accept(this);
     node.typeParameters?.accept(this);
     _token(node.equals);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
     _token(node.semicolon);
@@ -231,7 +231,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     _token(node.period);
     node.name?.accept(this);
   }
@@ -338,7 +338,7 @@
   @override
   void visitExtendsClause(ExtendsClause node) {
     _token(node.extendsKeyword);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -572,7 +572,7 @@
   @override
   void visitImplementsClause(ImplementsClause node) {
     _token(node.implementsKeyword);
-    _nodeList(node.interfaces2, node.endToken.next);
+    _nodeList(node.interfaces, node.endToken.next);
   }
 
   @override
@@ -740,7 +740,7 @@
   @override
   void visitOnClause(OnClause node) {
     _token(node.onKeyword);
-    _nodeList(node.superclassConstraints2, node.endToken.next);
+    _nodeList(node.superclassConstraints, node.endToken.next);
   }
 
   @override
@@ -1005,7 +1005,7 @@
   @override
   void visitWithClause(WithClause node) {
     _token(node.withKeyword);
-    _nodeList(node.mixinTypes2, node.endToken.next);
+    _nodeList(node.mixinTypes, node.endToken.next);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index e159199..a3d32ce 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -150,7 +150,7 @@
       }
     });
 
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
   }
@@ -387,7 +387,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -741,7 +741,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.accept(this);
+    node.interfaces.accept(this);
   }
 
   @override
@@ -897,7 +897,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints2.accept(this);
+    node.superclassConstraints.accept(this);
   }
 
   @override
@@ -1094,7 +1094,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.accept(this);
+    node.mixinTypes.accept(this);
   }
 
   List<ElementAnnotation> _buildAnnotations(List<Annotation> nodeList) {
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 1d68050..4d66405 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -1740,7 +1740,7 @@
   void _applyToEnumConstantInitializer(ConstFieldElementImpl element) {
     var initializer = element.constantInitializer;
     if (initializer is InstanceCreationExpression) {
-      initializer.constructorName.type2.typeArguments?.accept(this);
+      initializer.constructorName.type.typeArguments?.accept(this);
       for (var argument in initializer.argumentList.arguments) {
         argument.accept(this);
       }
@@ -1811,7 +1811,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    node.type2.accept(this);
+    node.type.accept(this);
     _tokenOrNull(node.period);
     node.name?.accept(this);
   }
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 57e276a..1cecbd4 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -80,7 +80,7 @@
     LinkingNodeContext(node, scope);
 
     node.typeParameters?.accept(this);
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
     node.withClause.accept(this);
     node.implementsClause?.accept(this);
     nodesToBuildType.addDeclaration(node);
@@ -139,7 +139,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    node.superclass2.accept(this);
+    node.superclass.accept(this);
   }
 
   @override
@@ -287,7 +287,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    node.interfaces2.accept(this);
+    node.interfaces.accept(this);
   }
 
   @override
@@ -384,7 +384,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    node.superclassConstraints2.accept(this);
+    node.superclassConstraints.accept(this);
   }
 
   @override
@@ -442,7 +442,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    node.mixinTypes2.accept(this);
+    node.mixinTypes.accept(this);
   }
 
   NullabilitySuffix _getNullabilitySuffix(bool hasQuestion) {
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 03daeed..f69284f 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -122,7 +122,7 @@
 
     var extendsClause = node.extendsClause;
     if (extendsClause != null) {
-      var type = extendsClause.superclass2.type;
+      var type = extendsClause.superclass.type;
       if (type is InterfaceType && _isInterfaceTypeClass(type)) {
         element.supertype = type;
       } else {
@@ -135,18 +135,18 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause?.mixinTypes2,
+      node.withClause?.mixinTypes,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
   void _classTypeAlias(ClassTypeAlias node) {
     var element = node.declaredElement as ClassElementImpl;
 
-    var superType = node.superclass2.type;
+    var superType = node.superclass.type;
     if (superType is InterfaceType && _isInterfaceTypeInterface(superType)) {
       element.supertype = superType;
     } else {
@@ -154,11 +154,11 @@
     }
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause.mixinTypes2,
+      node.withClause.mixinTypes,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
@@ -226,11 +226,11 @@
     var element = node.declaredElement as EnumElementImpl;
 
     element.mixins = _toInterfaceTypeList(
-      node.withClause?.mixinTypes2,
+      node.withClause?.mixinTypes,
     );
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
@@ -302,7 +302,7 @@
     var element = node.declaredElement as MixinElementImpl;
 
     var constraints = _toInterfaceTypeList(
-      node.onClause?.superclassConstraints2,
+      node.onClause?.superclassConstraints,
     );
     if (constraints.isEmpty) {
       constraints = [_objectType(element)];
@@ -310,7 +310,7 @@
     element.superclassConstraints = constraints;
 
     element.interfaces = _toInterfaceTypeList(
-      node.implementsClause?.interfaces2,
+      node.implementsClause?.interfaces,
     );
   }
 
@@ -395,7 +395,7 @@
   void perform(WithClause? withClause) {
     if (withClause == null) return;
 
-    for (var mixinNode in withClause.mixinTypes2) {
+    for (var mixinNode in withClause.mixinTypes) {
       var mixinType = _inferSingle(mixinNode as NamedTypeImpl);
       interfacesMerger.addWithSupertypes(mixinType);
     }
@@ -546,7 +546,7 @@
       } finally {
         element.mixinInferenceCallback = null;
         element.mixins = _toInterfaceTypeList(
-          withClause.mixinTypes2,
+          withClause.mixinTypes,
         );
       }
     }
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index b25d26f..d137ec9 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -127,6 +127,10 @@
     return _node(search, (n) => n is ConstructorReference);
   }
 
+  ConstructorSelector constructorSelector(String search) {
+    return _node(search, (n) => n is ConstructorSelector);
+  }
+
   ContinueStatement continueStatement(String search) {
     return _node(search, (n) => n is ContinueStatement);
   }
diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
index 0cce128..afad0dc 100644
--- a/pkg/analyzer/test/error/error_test.dart
+++ b/pkg/analyzer/test/error/error_test.dart
@@ -37,7 +37,7 @@
       if (declaration is ClassDeclaration) {
         var extendsClause = declaration.extendsClause;
         if (extendsClause != null &&
-            extendsClause.superclass2.name.name == 'ErrorCode') {
+            extendsClause.superclass.name.name == 'ErrorCode') {
           String className = declaration.name.name;
           for (ClassMember member in declaration.members) {
             if (member is FieldDeclaration && member.isStatic) {
diff --git a/pkg/analyzer/test/generated/class_member_parser_test.dart b/pkg/analyzer/test/generated/class_member_parser_test.dart
index 28b8faf..fe8509a 100644
--- a/pkg/analyzer/test/generated/class_member_parser_test.dart
+++ b/pkg/analyzer/test/generated/class_member_parser_test.dart
@@ -1137,7 +1137,7 @@
     expect(constructor.separator!.type, TokenType.EQ);
     expect(constructor.initializers, isEmpty);
     expect(constructor.redirectedConstructor, isNotNull);
-    expect(constructor.redirectedConstructor!.type2.name.name, 'prefix.B');
+    expect(constructor.redirectedConstructor!.type.name.name, 'prefix.B');
     expect(constructor.redirectedConstructor!.period!.type, TokenType.PERIOD);
     expect(constructor.redirectedConstructor!.name!.name, 'foo');
     expect(constructor.body, isEmptyFunctionBody);
@@ -1187,7 +1187,7 @@
     expect(constructor.separator!.type, TokenType.EQ);
     expect(constructor.initializers, isEmpty);
     expect(constructor.redirectedConstructor, isNotNull);
-    expect(constructor.redirectedConstructor!.type2.name.name, 'B');
+    expect(constructor.redirectedConstructor!.type.name.name, 'B');
     expect(constructor.redirectedConstructor!.period, isNull);
     expect(constructor.redirectedConstructor!.name, isNull);
     expect(constructor.body, isEmptyFunctionBody);
diff --git a/pkg/analyzer/test/generated/expression_parser_test.dart b/pkg/analyzer/test/generated/expression_parser_test.dart
index 356ecc9..ec3df10 100644
--- a/pkg/analyzer/test/generated/expression_parser_test.dart
+++ b/pkg/analyzer/test/generated/expression_parser_test.dart
@@ -671,7 +671,7 @@
     expect(instanceCreation.keyword, isNotNull);
     ConstructorName name = instanceCreation.constructorName;
     expect(name, isNotNull);
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(instanceCreation.argumentList, isNotNull);
@@ -1044,7 +1044,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type.name.name, 'A.B');
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1061,7 +1061,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNotNull);
@@ -1079,7 +1079,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNotNull);
@@ -1096,7 +1096,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNull);
@@ -1113,7 +1113,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1130,7 +1130,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNull);
@@ -1147,7 +1147,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNotNull);
@@ -1164,7 +1164,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments, isNull);
     expect(name.period, isNotNull);
@@ -1182,7 +1182,7 @@
     expect(expression.keyword!.keyword, Keyword.NEW);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    NamedType type = name.type2;
+    NamedType type = name.type;
     expect(type, isNotNull);
     expect(type.typeArguments!.arguments, hasLength(1));
     expect(name.period, isNull);
@@ -1427,7 +1427,7 @@
     expect(expression.keyword, isNotNull);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(expression.argumentList, isNotNull);
diff --git a/pkg/analyzer/test/generated/function_reference_parser_test.dart b/pkg/analyzer/test/generated/function_reference_parser_test.dart
index 2c0c918..07f8755 100644
--- a/pkg/analyzer/test/generated/function_reference_parser_test.dart
+++ b/pkg/analyzer/test/generated/function_reference_parser_test.dart
@@ -113,7 +113,7 @@
         parseExpression('f<a, b>.toString()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var type = constructorName.type2;
+    var type = constructorName.type;
     expect((type.name as SimpleIdentifier).name, 'f');
     var typeArgs = type.typeArguments!.arguments;
     expect(typeArgs, hasLength(2));
diff --git a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
index bd35b65..a7e7d3d 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -51,10 +51,10 @@
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'C');
     expect(typeName.identifier.name, 'new');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name, isNull);
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -64,9 +64,9 @@
         parseExpression('const C<int>.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -76,10 +76,10 @@
         parseExpression('const prefix.C.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -89,10 +89,10 @@
         'const prefix.C<int>.new()',
         featureSet: constructorTearoffs) as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -105,10 +105,10 @@
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'C');
     expect(typeName.identifier.name, 'new');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name, isNull);
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -118,9 +118,9 @@
         parseExpression('new C<int>.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -130,10 +130,10 @@
         parseExpression('new prefix.C.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments, isNull);
+    expect(constructorName.type.typeArguments, isNull);
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -142,10 +142,10 @@
     var instanceCreationExpression = parseExpression('new prefix.C<int>.new()',
         featureSet: constructorTearoffs) as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -166,9 +166,9 @@
         parseExpression('C<int>.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as SimpleIdentifier;
+    var typeName = constructorName.type.name as SimpleIdentifier;
     expect(typeName.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -190,10 +190,10 @@
         parseExpression('prefix.C<int>.new()', featureSet: constructorTearoffs)
             as InstanceCreationExpression;
     var constructorName = instanceCreationExpression.constructorName;
-    var typeName = constructorName.type2.name as PrefixedIdentifier;
+    var typeName = constructorName.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'C');
-    expect(constructorName.type2.typeArguments!.arguments, hasLength(1));
+    expect(constructorName.type.typeArguments!.arguments, hasLength(1));
     expect(constructorName.name!.name, 'new');
     expect(instanceCreationExpression.argumentList, isNotNull);
   }
@@ -357,10 +357,10 @@
     // type.  Resolution will change the type to `D` and the name to `new` if
     // appropriate.
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'D');
     expect(typeName.identifier.name, 'new');
-    expect(redirectedConstructor.type2.typeArguments, isNull);
+    expect(redirectedConstructor.type.typeArguments, isNull);
     expect(redirectedConstructor.name, isNull);
   }
 
@@ -375,9 +375,9 @@
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as SimpleIdentifier;
+    var typeName = redirectedConstructor.type.name as SimpleIdentifier;
     expect(typeName.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments!.arguments, hasLength(1));
+    expect(redirectedConstructor.type.typeArguments!.arguments, hasLength(1));
     expect(redirectedConstructor.name!.name, 'new');
   }
 
@@ -392,10 +392,10 @@
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments, isNull);
+    expect(redirectedConstructor.type.typeArguments, isNull);
     expect(redirectedConstructor.name!.name, 'new');
   }
 
@@ -410,10 +410,10 @@
         classDeclaration.members.single as ConstructorDeclaration;
     expect(constructorDeclaration.initializers, isEmpty);
     var redirectedConstructor = constructorDeclaration.redirectedConstructor!;
-    var typeName = redirectedConstructor.type2.name as PrefixedIdentifier;
+    var typeName = redirectedConstructor.type.name as PrefixedIdentifier;
     expect(typeName.prefix.name, 'prefix');
     expect(typeName.identifier.name, 'D');
-    expect(redirectedConstructor.type2.typeArguments!.arguments, hasLength(1));
+    expect(redirectedConstructor.type.typeArguments!.arguments, hasLength(1));
     expect(redirectedConstructor.name!.name, 'new');
   }
 
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index e183e2a..a2c57e7 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -1175,7 +1175,7 @@
     ConstructorName name = parseConstructorName('A.n');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1184,7 +1184,7 @@
     ConstructorName name = parseConstructorName('p.A.n');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNotNull);
     expect(name.name, isNotNull);
   }
@@ -1193,7 +1193,7 @@
     ConstructorName name = parseConstructorName('A');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1202,7 +1202,7 @@
     ConstructorName name = parseConstructorName('p.A');
     expectNotNullIfNoErrors(name);
     assertNoErrors();
-    expect(name.type2, isNotNull);
+    expect(name.type, isNotNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
   }
@@ -1250,8 +1250,8 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.extendsKeyword, isNotNull);
-    expect(clause.superclass2, isNotNull);
-    expect(clause.superclass2, isNamedType);
+    expect(clause.superclass, isNotNull);
+    expect(clause.superclass, isNamedType);
   }
 
   void test_parseFunctionBody_block() {
@@ -1385,7 +1385,7 @@
     ImplementsClause clause = parseImplementsClause('implements A, B, C');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces2, hasLength(3));
+    expect(clause.interfaces, hasLength(3));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -1393,7 +1393,7 @@
     ImplementsClause clause = parseImplementsClause('implements A');
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
-    expect(clause.interfaces2, hasLength(1));
+    expect(clause.interfaces, hasLength(1));
     expect(clause.implementsKeyword, isNotNull);
   }
 
@@ -1436,7 +1436,7 @@
     var creation = body.expression as InstanceCreationExpressionImpl;
     expect(creation.keyword, isNull);
     ConstructorName constructorName = creation.constructorName;
-    expect(constructorName.type2.toSource(), 'C<E>');
+    expect(constructorName.type.toSource(), 'C<E>');
     expect(constructorName.period, isNotNull);
     expect(constructorName.name, isNotNull);
     expect(creation.argumentList, isNotNull);
@@ -1471,7 +1471,7 @@
     var creation = body.expression as InstanceCreationExpression;
     expect(creation.keyword, isNull);
     ConstructorName constructorName = creation.constructorName;
-    expect(constructorName.type2.toSource(), 'p.C<E>');
+    expect(constructorName.type.toSource(), 'p.C<E>');
     expect(constructorName.period, isNotNull);
     expect(constructorName.name, isNotNull);
     expect(creation.argumentList, isNotNull);
@@ -2081,7 +2081,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes2, hasLength(3));
+    expect(clause.mixinTypes, hasLength(3));
   }
 
   void test_parseWithClause_single() {
@@ -2089,7 +2089,7 @@
     expectNotNullIfNoErrors(clause);
     assertNoErrors();
     expect(clause.withKeyword, isNotNull);
-    expect(clause.mixinTypes2, hasLength(1));
+    expect(clause.mixinTypes, hasLength(1));
   }
 
   void test_typeAlias_37733() {
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index cf141f5..cfbc48c 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -372,7 +372,7 @@
     var exp = stmt.expression as InstanceCreationExpression;
     ClassElement elementB = AstFinder.getClass(unit, "B").declaredElement!;
     ClassElement elementA = AstFinder.getClass(unit, "A").declaredElement!;
-    expect(exp.constructorName.type2.typeOrThrow.element, elementB);
+    expect(exp.constructorName.type.typeOrThrow.element, elementB);
     _isInstantiationOf(_hasElement(elementB))([
       _isType(elementA.typeParameters[0]
           .instantiate(nullabilitySuffix: NullabilitySuffix.star))
@@ -2372,7 +2372,7 @@
     var bConstructor = b.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
-    var typeName = redirected.type2;
+    var typeName = redirected.type;
     assertType(typeName.type, 'A<T2, U2>');
     assertType(typeName.type, 'A<T2, U2>');
 
@@ -2408,7 +2408,7 @@
     var bConstructor = b.members[0] as ConstructorDeclaration;
     var redirected = bConstructor.redirectedConstructor as ConstructorName;
 
-    var typeName = redirected.type2;
+    var typeName = redirected.type;
     assertType(typeName.type, 'A<T2, U2>');
     assertType(typeName.type, 'A<T2, U2>');
 
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index bde8059..6962aff 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -398,7 +398,7 @@
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.implementsClause!.implementsKeyword, isNotNull);
-    expect(typeAlias.implementsClause!.interfaces2.length, 1);
+    expect(typeAlias.implementsClause!.interfaces.length, 1);
     expect(typeAlias.semicolon, isNotNull);
   }
 
@@ -414,7 +414,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.withClause.withKeyword, isNotNull);
-    expect(typeAlias.withClause.mixinTypes2.length, 1);
+    expect(typeAlias.withClause.mixinTypes.length, 1);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
   }
@@ -935,7 +935,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNotNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -953,7 +953,7 @@
     expect(typeAlias.typeParameters!.typeParameters, hasLength(1));
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -971,7 +971,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -989,7 +989,7 @@
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
-    expect(typeAlias.superclass2.name.name, "S");
+    expect(typeAlias.superclass.name.name, "S");
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -1949,7 +1949,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments, isNull);
@@ -1971,7 +1971,7 @@
     expect(declaration.onClause, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(2));
     expect(interfaces[0].name.name, 'B');
     expect(interfaces[0].typeArguments!.arguments, hasLength(1));
@@ -2013,7 +2013,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2035,7 +2035,7 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(2));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
@@ -2059,13 +2059,13 @@
     expect(declaration.documentationComment, isNull);
     var onClause = declaration.onClause!;
     expect(onClause.onKeyword, isNotNull);
-    NodeList<NamedType> constraints = onClause.superclassConstraints2;
+    NodeList<NamedType> constraints = onClause.superclassConstraints;
     expect(constraints, hasLength(1));
     expect(constraints[0].name.name, 'B');
     expect(constraints[0].typeArguments, isNull);
     var implementsClause = declaration.implementsClause!;
     expect(implementsClause.implementsKeyword, isNotNull);
-    NodeList<NamedType> interfaces = implementsClause.interfaces2;
+    NodeList<NamedType> interfaces = implementsClause.interfaces;
     expect(interfaces, hasLength(1));
     expect(interfaces[0].name.name, 'C');
     expect(interfaces[0].typeArguments, isNull);
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index dfaa5e0..aa0c90b 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -457,7 +457,7 @@
       source: findNode.classTypeAlias('B<U>'),
       childAccessors: [
         (node) => node.documentationComment!,
-        (node) => node.superclass2,
+        (node) => node.superclass,
         (node) => node.implementsClause!,
         (node) => node.name,
         (node) => node.typeParameters!,
@@ -604,7 +604,7 @@
       destination: findNode.constructorName('A.foo'),
       source: findNode.constructorName('B.bar'),
       childAccessors: [
-        (node) => node.type2,
+        (node) => node.type,
         (node) => node.name!,
       ],
     );
@@ -797,7 +797,7 @@
       destination: findNode.extendsClause('A0'),
       source: findNode.extendsClause('B0'),
       childAccessors: [
-        (node) => node.superclass2,
+        (node) => node.superclass,
       ],
     );
   }
@@ -1122,8 +1122,8 @@
     var node = findNode.implementsClause('implements');
     _assertReplaceInList(
       destination: node,
-      child: node.interfaces2[0],
-      replacement: node.interfaces2[1],
+      child: node.interfaces[0],
+      replacement: node.interfaces[1],
     );
   }
 
@@ -1950,8 +1950,8 @@
     var node = findNode.withClause('with');
     _assertReplaceInList(
       destination: node,
-      child: node.mixinTypes2[0],
-      replacement: node.mixinTypes2[1],
+      child: node.mixinTypes[0],
+      replacement: node.mixinTypes[1],
     );
   }
 
diff --git a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
index 7401b6c..2ba48a6 100644
--- a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
@@ -55,9 +55,9 @@
     TypeArgumentList? typeArguments;
     List<DartType> typeArgumentTypes;
     if (node is InstanceCreationExpression) {
-      typeArguments = node.constructorName.type2.typeArguments;
+      typeArguments = node.constructorName.type.typeArguments;
       typeArgumentTypes =
-          (node.constructorName.type2.type as InterfaceType).typeArguments;
+          (node.constructorName.type.type as InterfaceType).typeArguments;
     } else if (node is InvocationExpression) {
       typeArguments = node.typeArguments;
       typeArgumentTypes = node.typeArgumentTypes!;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 620abd3..0bcce79 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -670,7 +670,7 @@
 
     var constructorName = constC.constructorName;
     expect(constructorName.staticElement, constructorC);
-    expect(constructorName.type2.type, interfaceTypeNone(elementC));
+    expect(constructorName.type.type, interfaceTypeNone(elementC));
   }
 
   test_annotation_unprefixed_topLevelVariable() async {
@@ -1309,7 +1309,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(aUnnamed));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, interfaceTypeNone(aElement));
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1329,7 +1329,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(aNamed));
 
-      var namedType = constructorName.type2;
+      var namedType = constructorName.type;
       expect(namedType.type, interfaceTypeNone(aElement));
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1378,7 +1378,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(actualMember));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, auType);
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -1400,7 +1400,7 @@
       var constructorName = constructor.redirectedConstructor!;
       expect(constructorName.staticElement, same(actualMember));
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.type, auType);
 
       var identifier = namedType.name as SimpleIdentifier;
@@ -2049,7 +2049,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       Identifier typeIdentifier = namedType.name;
@@ -2067,7 +2067,7 @@
       expect(constructorName.staticElement, namedConstructor);
       expect(constructorName.name!.staticType, isNull);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2102,7 +2102,7 @@
     expect(constructorName.name, isNull);
     expect(constructorName.staticElement, constructorElement);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.typeArguments, isNull);
 
     Identifier typeIdentifier = namedType.name;
@@ -2143,7 +2143,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       Identifier typeIdentifier = namedType.name;
@@ -2165,7 +2165,7 @@
       expect(constructorName.name!.staticElement, namedConstructor);
       expect(constructorName.name!.staticType, isNull);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2217,7 +2217,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as PrefixedIdentifier;
@@ -2247,7 +2247,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as PrefixedIdentifier;
@@ -2277,7 +2277,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2332,7 +2332,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2354,7 +2354,7 @@
       expect(constructorName.name, isNull);
       expect(constructorName.staticElement, defaultConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2379,7 +2379,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments, isNull);
 
       var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -2402,7 +2402,7 @@
       expect(constructorName.name!.staticType, isNull);
       expect(constructorName.staticElement, namedConstructor);
 
-      NamedType namedType = constructorName.type2;
+      NamedType namedType = constructorName.type;
       expect(namedType.typeArguments!.arguments, hasLength(1));
       _assertNamedTypeSimple(
           namedType.typeArguments!.arguments[0], typeProvider.boolType);
@@ -2434,7 +2434,7 @@
       assertMember(creation, defaultConstructor, {'K': 'int', 'V': 'double'});
       assertType(creation, 'C<int, double>');
 
-      var namedType = creation.constructorName.type2;
+      var namedType = creation.constructorName.type;
       assertNamedType(namedType, cElement, 'C<int, double>');
 
       var typeArguments = namedType.typeArguments!.arguments;
@@ -2453,7 +2453,7 @@
       assertMember(creation, namedConstructor, {'K': 'num', 'V': 'String'});
       assertType(creation, 'C<num, String>');
 
-      var namedType = creation.constructorName.type2;
+      var namedType = creation.constructorName.type;
       assertNamedType(namedType, cElement, 'C<num, String>');
 
       var typeArguments = namedType.typeArguments!.arguments;
@@ -3049,7 +3049,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name, isNull);
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
       assertTypeNull(type.name);
@@ -3066,7 +3066,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name!.name, 'named');
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       expect(type.typeArguments, isNull);
       assertElement(type.name, c);
       assertType(type.name, 'C<bool>');
@@ -3083,7 +3083,7 @@
       ConstructorName constructorName = creation.constructorName;
       expect(constructorName.name!.name, 'named2');
 
-      NamedType type = constructorName.type2;
+      NamedType type = constructorName.type;
       assertTypeArguments(type.typeArguments!, [doubleType]);
       assertElement(type.name, c);
       assertType(type.name, 'C<double>');
@@ -5594,7 +5594,7 @@
       assertElement(creation, c.unnamedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C');
+      assertNamedType(creation.constructorName.type, c, 'C');
     }
 
     {
@@ -5603,7 +5603,7 @@
       assertElement(creation, namedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C');
+      assertNamedType(creation.constructorName.type, c, 'C');
       assertElement(creation.constructorName.name, namedConstructor);
     }
   }
@@ -5630,7 +5630,7 @@
       assertElement(creation, c.unnamedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C',
+      assertNamedType(creation.constructorName.type, c, 'C',
           expectedPrefix: import.prefix);
     }
 
@@ -5640,7 +5640,7 @@
       assertElement(creation, namedConstructor);
       assertType(creation, 'C');
 
-      assertNamedType(creation.constructorName.type2, c, 'C',
+      assertNamedType(creation.constructorName.type, c, 'C',
           expectedPrefix: import.prefix);
       assertElement(creation.constructorName.name, namedConstructor);
     }
@@ -5664,7 +5664,7 @@
       assertMember(creation, c.unnamedConstructor!, {'T': 'int'});
       assertType(creation, 'C<int>');
 
-      assertNamedType(creation.constructorName.type2, c, 'C<int>');
+      assertNamedType(creation.constructorName.type, c, 'C<int>');
       assertNamedType(findNode.namedType('int>'), intElement, 'int');
     }
 
@@ -5674,7 +5674,7 @@
       assertMember(creation, namedConstructor, {'T': 'String'});
       assertType(creation, 'C<String>');
 
-      assertNamedType(creation.constructorName.type2, c, 'C<String>');
+      assertNamedType(creation.constructorName.type, c, 'C<String>');
       assertNamedType(findNode.namedType('String>'), stringElement, 'String');
 
       assertMember(
@@ -6831,7 +6831,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType superClass = dNode.extendsClause!.superclass2;
+      NamedType superClass = dNode.extendsClause!.superclass;
       expect(superClass.type, expectedType);
 
       var identifier = superClass.name as SimpleIdentifier;
@@ -6845,7 +6845,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause!.mixinTypes2[0];
+      NamedType mixinType = dNode.withClause!.mixinTypes[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -6859,7 +6859,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType implementedType = dNode.implementsClause!.interfaces2[0];
+      NamedType implementedType = dNode.implementsClause!.interfaces[0];
       expect(implementedType.type, expectedType);
 
       var identifier = implementedType.name as SimpleIdentifier;
@@ -6900,7 +6900,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType superClass = dNode.superclass2;
+      NamedType superClass = dNode.superclass;
       expect(superClass.type, expectedType);
 
       var identifier = superClass.name as SimpleIdentifier;
@@ -6914,7 +6914,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType mixinType = dNode.withClause.mixinTypes2[0];
+      NamedType mixinType = dNode.withClause.mixinTypes[0];
       expect(mixinType.type, expectedType);
 
       var identifier = mixinType.name as SimpleIdentifier;
@@ -6928,7 +6928,7 @@
         nullabilitySuffix: NullabilitySuffix.none,
       );
 
-      NamedType interfaceType = dNode.implementsClause!.interfaces2[0];
+      NamedType interfaceType = dNode.implementsClause!.interfaces[0];
       expect(interfaceType.type, expectedType);
 
       var identifier = interfaceType.name as SimpleIdentifier;
@@ -7833,7 +7833,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typeIdentifier = namedType.name as SimpleIdentifier;
@@ -7865,7 +7865,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -7909,7 +7909,7 @@
     ConstructorName constructorName = creation.constructorName;
     expect(constructorName.name, isNull);
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -7947,7 +7947,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -7993,7 +7993,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     expect(namedType.type, isDynamicType);
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8040,7 +8040,7 @@
 
     ConstructorName constructorName = creation.constructorName;
 
-    NamedType namedType = constructorName.type2;
+    NamedType namedType = constructorName.type;
     assertType(namedType, 'Random');
 
     var typePrefixed = namedType.name as PrefixedIdentifier;
@@ -8485,7 +8485,7 @@
     var constructorElement = classElement.unnamedConstructor;
     expect(constructorName.staticElement, constructorElement);
 
-    var namedType = constructorName.type2;
+    var namedType = constructorName.type;
     expect(namedType.typeArguments, isNull);
 
     var typeIdentifier = namedType.name as SimpleIdentifier;
diff --git a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
index c594940..4bd8ed4 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -63,6 +63,18 @@
     expect(element, isConstructorElement);
   }
 
+  test_locate_ConstructorSelector_EnumConstantArguments_EnumConstantDeclaration() async {
+    await resolveTestCode(r'''
+enum E {
+  v.named(); // 0
+  const E.named();
+}
+''');
+    var node = findNode.constructorSelector('named(); // 0');
+    var element = ElementLocator.locate(node);
+    expect(element, findElement.constructor('named'));
+  }
+
   test_locate_ExportDirective() async {
     await resolveTestCode("export 'dart:code';");
     var node = findNode.export('export');
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index 1adb108..50d0ec5 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -455,7 +455,7 @@
       expectedSubstitution: {'T': 'int'},
     );
     _assertTypeArgumentList(
-      creation.constructorName.type2.typeArguments,
+      creation.constructorName.type.typeArguments,
       ['int'],
     );
     expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
@@ -493,7 +493,7 @@
       expectedSubstitution: {'T': 'int'},
     );
     _assertTypeArgumentList(
-      creation.constructorName.type2.typeArguments,
+      creation.constructorName.type.typeArguments,
       ['int'],
     );
     expect((creation as InstanceCreationExpressionImpl).typeArguments, isNull);
diff --git a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
index 93e9187..daa949c 100644
--- a/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/optional_const_test.dart
@@ -132,7 +132,7 @@
 
     var constructorName = creation.constructorName;
 
-    var typeName = constructorName.type2;
+    var typeName = constructorName.type;
     assertType(typeName, 'C<int>');
 
     var pC = typeName.name as PrefixedIdentifier;
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index a32c4bb..2e26247 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -180,7 +180,7 @@
     assertElement(node, expectedConstructorElement);
     assertType(node, expectedType);
 
-    var namedType = node.constructorName.type2;
+    var namedType = node.constructorName.type;
     expectedTypeNameElement ??= expectedClassElement;
     assertNamedType(
       namedType, expectedTypeNameElement,
@@ -499,7 +499,7 @@
 
     assertType(creation, expectedType);
 
-    var namedType = creation.constructorName.type2;
+    var namedType = creation.constructorName.type;
     expectedTypeNameElement ??= expectedClassElement;
     assertNamedType(namedType, expectedTypeNameElement, expectedType,
         expectedPrefix: expectedPrefix);
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
index ff289367..8dd5c55 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_instantiate_test.dart
@@ -48,7 +48,7 @@
 
     var creation = findNode.instanceCreation('M.named();');
     var m = findElement.mixin('M');
-    assertElement(creation.constructorName.type2.name, m);
+    assertElement(creation.constructorName.type.name, m);
   }
 
   test_unnamedConstructor() async {
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index e7a44e0..dfdbf61 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -356,7 +356,7 @@
       properties.addNode('name', node.name);
       properties.addToken('period', node.period);
       properties.addElement('staticElement', node.staticElement);
-      properties.addNode('type', node.type2);
+      properties.addNode('type', node.type);
       _writeProperties(properties);
     });
   }
@@ -517,7 +517,7 @@
     _writeln('ExtendsClause');
     _withIndent(() {
       var properties = _Properties();
-      properties.addNode('superclass', node.superclass2);
+      properties.addNode('superclass', node.superclass);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -809,7 +809,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addToken('implementsKeyword', node.implementsKeyword);
-      properties.addNodeList('interfaces', node.interfaces2);
+      properties.addNodeList('interfaces', node.interfaces);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1072,7 +1072,7 @@
       var properties = _Properties();
       properties.addToken('onKeyword', node.onKeyword);
       properties.addNodeList(
-          'superclassConstraints', node.superclassConstraints2);
+          'superclassConstraints', node.superclassConstraints);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
@@ -1545,7 +1545,7 @@
     _withIndent(() {
       var properties = _Properties();
       properties.addToken('withKeyword', node.withKeyword);
-      properties.addNodeList('mixinTypes', node.mixinTypes2);
+      properties.addNodeList('mixinTypes', node.mixinTypes);
       _addAstNode(properties, node);
       _writeProperties(properties);
     });
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 24a549e..cee17a3 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -960,7 +960,7 @@
       name = expression.methodName.name;
     } else if (expression is InstanceCreationExpression) {
       var constructorName = expression.constructorName;
-      var typeName = constructorName.type2;
+      var typeName = constructorName.type;
       var typeNameIdentifier = typeName.name;
       // new ClassName()
       if (typeNameIdentifier is SimpleIdentifier) {
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index 74aee3b..e567a2c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -178,7 +178,7 @@
       if (name != null) {
         constructor = name.staticElement;
       } else {
-        var classElem = parent.constructorName.type2.name.staticElement;
+        var classElem = parent.constructorName.type.name.staticElement;
         if (classElem is ClassElement) {
           constructor = classElem.unnamedConstructor;
         }
@@ -367,7 +367,7 @@
 
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
-    if (identical(entity, node.superclass2)) {
+    if (identical(entity, node.superclass)) {
       optype.completionLocation = 'ClassTypeAlias_superclass';
       optype.includeTypeNameSuggestions = true;
     }
@@ -579,7 +579,7 @@
 
   @override
   void visitExtendsClause(ExtendsClause node) {
-    if (identical(entity, node.superclass2)) {
+    if (identical(entity, node.superclass)) {
       optype.completionLocation = 'ExtendsClause_superclass';
       optype.includeTypeNameSuggestions = true;
     }
@@ -1354,7 +1354,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    if (node.mixinTypes2.contains(entity)) {
+    if (node.mixinTypes.contains(entity)) {
       optype.completionLocation = 'WithClause_mixinType';
     }
     optype.includeTypeNameSuggestions = true;
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index 76f048a..2bd48bc 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -354,7 +354,7 @@
       return;
     }
     // add regions
-    var typeName = node.type2;
+    var typeName = node.type;
     // [prefix].ClassName
     {
       var name = typeName.name;
diff --git a/pkg/dart2wasm/OWNERS b/pkg/dart2wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/pkg/dart2wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 7b40a7c..0f930faf 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -622,25 +622,58 @@
     // Moreover, it checks that `FutureOr` and `void` are not among the
     // supertypes and that `Enum` is not implemented by non-abstract classes.
 
-    if (!cls.isAbstract && !cls.isEnum) {
-      bool isEnumFound = false;
+    if (library.enableEnhancedEnumsInLibrary) {
+      bool hasEnumSuperinterface = false;
       List<Supertype> interfaces =
           hierarchyBuilder.getNodeFromClass(cls).superclasses;
-      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+      for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
-          isEnumFound = true;
+          hasEnumSuperinterface = true;
         }
       }
       interfaces = hierarchyBuilder.getNodeFromClass(cls).interfaces;
-      for (int i = 0; !isEnumFound && i < interfaces.length; i++) {
+      for (int i = 0; !hasEnumSuperinterface && i < interfaces.length; i++) {
         if (interfaces[i].classNode == enumClass) {
-          isEnumFound = true;
+          hasEnumSuperinterface = true;
         }
       }
-      if (isEnumFound) {
+      if (!cls.isAbstract && !cls.isEnum && hasEnumSuperinterface) {
         addProblem(templateEnumSupertypeOfNonAbstractClass.withArguments(name),
             charOffset, noLength);
       }
+
+      if (hasEnumSuperinterface) {
+        Builder? customValuesDeclaration =
+            scope.lookupLocalMember("values", setter: false);
+        if (customValuesDeclaration != null &&
+            !customValuesDeclaration.isStatic) {
+          // Retrieve the earliest declaration for error reporting.
+          while (customValuesDeclaration?.next != null) {
+            customValuesDeclaration = customValuesDeclaration?.next;
+          }
+          library.addProblem(
+              templateEnumImplementerContainsValuesDeclaration
+                  .withArguments(this.name),
+              customValuesDeclaration!.charOffset,
+              customValuesDeclaration.fullNameForErrors.length,
+              fileUri);
+        }
+        customValuesDeclaration =
+            scope.lookupLocalMember("values", setter: true);
+        if (customValuesDeclaration != null &&
+            !customValuesDeclaration.isStatic) {
+          // Retrieve the earliest declaration for error reporting.
+          while (customValuesDeclaration?.next != null) {
+            customValuesDeclaration = customValuesDeclaration?.next;
+          }
+          library.addProblem(
+              templateEnumImplementerContainsValuesDeclaration
+                  .withArguments(this.name),
+              customValuesDeclaration!.charOffset,
+              customValuesDeclaration.fullNameForErrors.length,
+              fileUri);
+        }
+      }
     }
 
     void fail(NamedTypeBuilder target, Message message,
@@ -1387,6 +1420,22 @@
     return noSuchMethod != null && noSuchMethod.enclosingClass != objectClass;
   }
 
+  List<Member> _getStaticMembers() {
+    List<Member> staticMembers = <Member>[];
+    for (Field field in cls.fields) {
+      if (field.isStatic) {
+        staticMembers.add(field);
+      }
+    }
+    for (Procedure procedure in cls.procedures) {
+      if (procedure.isStatic) {
+        staticMembers.add(procedure);
+      }
+    }
+    staticMembers.sort(ClassHierarchy.compareMembers);
+    return staticMembers;
+  }
+
   bool _addMissingNoSuchMethodForwarders(
       KernelTarget target, Set<Member> existingForwarders,
       {required bool forSetters}) {
@@ -1401,6 +1450,7 @@
         hierarchy.getDispatchTargets(cls, setters: forSetters);
     List<Member> declaredMembers =
         hierarchy.getDeclaredMembers(cls, setters: forSetters);
+    List<Member> staticMembers = _getStaticMembers();
 
     Procedure noSuchMethod = ClassHierarchy.findMemberByName(
         hierarchy.getInterfaceMembers(cls), noSuchMethodName) as Procedure;
@@ -1426,8 +1476,8 @@
               forSetter: forSetters);
       Member? member = combinedMemberSignature.canonicalMember;
       if (member != null) {
-        if (_isForwarderRequired(
-                clsHasUserDefinedNoSuchMethod, member, cls, concreteMembers,
+        if (_isForwarderRequired(clsHasUserDefinedNoSuchMethod, member, cls,
+                concreteMembers, staticMembers,
                 isPatch: member.fileUri != member.enclosingClass!.fileUri) &&
             !existingForwarders.contains(member)) {
           assert(!combinedMemberSignature.needsCovarianceMerging,
@@ -1478,12 +1528,13 @@
         bool superHasUserDefinedNoSuchMethod = _hasUserDefinedNoSuchMethod(
             nearestConcreteSuperclass, hierarchy, target.objectClass);
         {
-          List<Member> concrete =
+          List<Member> concreteMembers =
               hierarchy.getDispatchTargets(nearestConcreteSuperclass);
+          List<Member> staticMembers = _getStaticMembers();
           for (Member member
               in hierarchy.getInterfaceMembers(nearestConcreteSuperclass)) {
             if (_isForwarderRequired(superHasUserDefinedNoSuchMethod, member,
-                nearestConcreteSuperclass, concrete,
+                nearestConcreteSuperclass, concreteMembers, staticMembers,
                 isPatch: member.fileUri != member.enclosingClass!.fileUri)) {
               existingForwarders.add(member);
             }
@@ -1493,10 +1544,11 @@
         {
           List<Member> concreteSetters = hierarchy
               .getDispatchTargets(nearestConcreteSuperclass, setters: true);
+          List<Member> staticSetters = _getStaticMembers();
           for (Member member in hierarchy
               .getInterfaceMembers(nearestConcreteSuperclass, setters: true)) {
             if (_isForwarderRequired(superHasUserDefinedNoSuchMethod, member,
-                nearestConcreteSuperclass, concreteSetters)) {
+                nearestConcreteSuperclass, concreteSetters, staticSetters)) {
               existingSetterForwarders.add(member);
             }
           }
@@ -1522,7 +1574,7 @@
 
   /// Tells if a noSuchMethod forwarder is required for [member] in [cls].
   bool _isForwarderRequired(bool hasUserDefinedNoSuchMethod, Member member,
-      Class cls, List<Member> concreteMembers,
+      Class cls, List<Member> concreteMembers, List<Member> staticMembers,
       {bool isPatch = false}) {
     // A noSuchMethod forwarder is allowed for an abstract member if the class
     // has a user-defined noSuchMethod or if the member is private and is
@@ -1536,7 +1588,8 @@
     // A noSuchMethod forwarder is required if it's allowed and if there's no
     // concrete implementation or a forwarder already.
     bool isForwarderRequired = isForwarderAllowed &&
-        ClassHierarchy.findMemberByName(concreteMembers, member.name) == null;
+        ClassHierarchy.findMemberByName(concreteMembers, member.name) == null &&
+        ClassHierarchy.findMemberByName(staticMembers, member.name) == null;
     return isForwarderRequired;
   }
 
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 644d13b..0e1957f 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -5,8 +5,6 @@
 # Note that test/spelling: Status will have no effect. Spelling errors can
 # always be fixed by either spelling correctly or updating the dictionary.
 
-EnumContainsValuesDeclaration/analyzerCode: Fail
-EnumContainsValuesDeclaration/example: Fail
 AbstractClassConstructorTearOff/analyzerCode: Fail
 AbstractClassInstantiation/example: Fail
 AbstractExtensionField/analyzerCode: Fail
@@ -219,6 +217,8 @@
 EnumConstructorSuperInitializer/example: Fail
 EnumConstructorTearoff/analyzerCode: Fail
 EnumConstructorTearoff/example: Fail
+EnumContainsValuesDeclaration/analyzerCode: Fail
+EnumContainsValuesDeclaration/example: Fail
 EnumDeclaresConstFactory/analyzerCode: Fail
 EnumDeclaresConstFactory/example: Fail
 EnumDeclaresFactory/analyzerCode: Fail
@@ -227,6 +227,8 @@
 EnumEntryWithTypeArgumentsWithoutArguments/example: Fail
 EnumFactoryRedirectsToConstructor/analyzerCode: Fail
 EnumFactoryRedirectsToConstructor/example: Fail
+EnumImplementerContainsValuesDeclaration/analyzerCode: Fail
+EnumImplementerContainsValuesDeclaration/example: Fail
 EnumInstantiation/example: Fail
 EnumNonConstConstructor/analyzerCode: Fail
 EnumNonConstConstructor/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 8607ae0..043a64d 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5476,3 +5476,6 @@
 
 EnumContainsValuesDeclaration:
   problemMessage: "Enums can't contain declarations of members with the name 'values'."
+
+EnumImplementerContainsValuesDeclaration:
+  problemMessage: "'#name' has 'Enum' as a superinterface and can't contain non-static member with name 'values'."
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart b/pkg/front_end/testcases/enhanced_enums/issue48388.dart
new file mode 100644
index 0000000..eda8388
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart
@@ -0,0 +1,47 @@
+// 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.
+
+mixin M1 on Enum {
+  final int values = 42; // Error.
+}
+
+mixin M2 on Enum {
+  static final int values = 42; // Ok.
+}
+
+mixin M3 on Enum {
+  void set values(String x) {} // Error.
+}
+
+mixin M4 on Enum {
+  static void set values(String x) {} // Ok.
+}
+
+mixin M5 on Enum {
+  num get values => 0; // Error.
+  void set values(num x) {} // Error.
+}
+
+abstract class E1 extends Enum {
+  int values() => 42; // Error.
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42; // Ok.
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {} // Error.
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {} // Ok.
+}
+
+abstract class E5 extends Enum {
+  num get values => 0; // Error.
+  void set values(num x) {} // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.strong.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect
new file mode 100644
index 0000000..a098e65
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline.expect
@@ -0,0 +1,39 @@
+mixin M1 on Enum {
+  final int values = 42;
+}
+mixin M2 on Enum {
+  static final int values = 42;
+}
+mixin M3 on Enum {
+  void set values(String x) {}
+}
+mixin M4 on Enum {
+  static void set values(String x) {}
+}
+mixin M5 on Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+abstract class E1 extends Enum {
+  int values() => 42;
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42;
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {}
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {}
+}
+
+abstract class E5 extends Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ab86f28
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.textual_outline_modelled.expect
@@ -0,0 +1,38 @@
+abstract class E1 extends Enum {
+  int values() => 42;
+}
+
+abstract class E2 extends Enum {
+  static int values() => 42;
+}
+
+abstract class E3 extends Enum {
+  void set values(num x) {}
+}
+
+abstract class E4 extends Enum {
+  static void set values(num x) {}
+}
+
+abstract class E5 extends Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
+
+main() {}
+mixin M1 on Enum {
+  final int values = 42;
+}
+mixin M2 on Enum {
+  static final int values = 42;
+}
+mixin M3 on Enum {
+  void set values(String x) {}
+}
+mixin M4 on Enum {
+  static void set values(String x) {}
+}
+mixin M5 on Enum {
+  num get values => 0;
+  void set values(num x) {}
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.modular.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect
new file mode 100644
index 0000000..7152d79
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.outline.expect
@@ -0,0 +1,93 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void
+    ;
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void
+    ;
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    ;
+  set values(core::num x) → void
+    ;
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    ;
+  method values() → core::int
+    ;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    ;
+  static method values() → core::int
+    ;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    ;
+  set values(core::num x) → void
+    ;
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    ;
+  static set values(core::num x) → void
+    ;
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    ;
+  get values() → core::num
+    ;
+  set values(core::num x) → void
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect
new file mode 100644
index 0000000..5326e00
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48388.dart.weak.transformed.expect
@@ -0,0 +1,91 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:6:13: Error: 'M1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   final int values = 42; // Error.
+//             ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:14:12: Error: 'M3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(String x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:22:11: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:23:12: Error: 'M5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:27:7: Error: 'E1' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   int values() => 42; // Error.
+//       ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:35:12: Error: 'E3' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:43:11: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   num get values => 0; // Error.
+//           ^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/issue48388.dart:44:12: Error: 'E5' has 'Enum' as a superinterface and can't contain non-static member with name 'values'.
+//   void set values(num x) {} // Error.
+//            ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  final field core::int values = 42;
+}
+abstract class M2 extends core::Enum /*isMixinDeclaration*/  {
+  static final field core::int values = 42;
+}
+abstract class M3 extends core::Enum /*isMixinDeclaration*/  {
+  set values(core::String x) → void {}
+}
+abstract class M4 extends core::Enum /*isMixinDeclaration*/  {
+  static set values(core::String x) → void {}
+}
+abstract class M5 extends core::Enum /*isMixinDeclaration*/  {
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+abstract class E1 extends core::Enum {
+  synthetic constructor •() → self::E1
+    : super core::Enum::•()
+    ;
+  method values() → core::int
+    return 42;
+}
+abstract class E2 extends core::Enum {
+  synthetic constructor •() → self::E2
+    : super core::Enum::•()
+    ;
+  static method values() → core::int
+    return 42;
+}
+abstract class E3 extends core::Enum {
+  synthetic constructor •() → self::E3
+    : super core::Enum::•()
+    ;
+  set values(core::num x) → void {}
+}
+abstract class E4 extends core::Enum {
+  synthetic constructor •() → self::E4
+    : super core::Enum::•()
+    ;
+  static set values(core::num x) → void {}
+}
+abstract class E5 extends core::Enum {
+  synthetic constructor •() → self::E5
+    : super core::Enum::•()
+    ;
+  get values() → core::num
+    return 0;
+  set values(core::num x) → void {}
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart b/pkg/front_end/testcases/general/issue48402.dart
new file mode 100644
index 0000000..d336e24
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart
@@ -0,0 +1,35 @@
+// 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.
+
+abstract class I {
+  String get member1;
+  String get procedure;
+  void set setter(String value);
+  void set fieldSetter(String value);
+  void set setterVsGetter(num value);
+  double get getterVsSetter;
+}
+
+class A implements I {
+  // Check for unsorted names of members.
+  static String member5 = "member5";
+  static String member4 = "member4";
+  static String member3 = "member3";
+  static String member1 = "member1"; // Error.
+  static String member2 = "member2";
+
+  static void procedure() {} // Error.
+  
+  static void set setter(String value) {} // Error.
+  
+  static String fieldSetter = "fieldSetter"; // Error.
+
+  static num get setterVsGetter => 0; // Error.
+
+  static void set getterVsSetter(double value) {} // Error.
+
+  dynamic noSuchMethod(Invocation i) => "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect
new file mode 100644
index 0000000..5a8834c
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.textual_outline.expect
@@ -0,0 +1,24 @@
+abstract class I {
+  String get member1;
+  String get procedure;
+  void set setter(String value);
+  void set fieldSetter(String value);
+  void set setterVsGetter(num value);
+  double get getterVsSetter;
+}
+
+class A implements I {
+  static String member5 = "member5";
+  static String member4 = "member4";
+  static String member3 = "member3";
+  static String member1 = "member1";
+  static String member2 = "member2";
+  static void procedure() {}
+  static void set setter(String value) {}
+  static String fieldSetter = "fieldSetter";
+  static num get setterVsGetter => 0;
+  static void set getterVsSetter(double value) {}
+  dynamic noSuchMethod(Invocation i) => "foo";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9ae4cda
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.textual_outline_modelled.expect
@@ -0,0 +1,24 @@
+abstract class I {
+  String get member1;
+  String get procedure;
+  double get getterVsSetter;
+  void set fieldSetter(String value);
+  void set setter(String value);
+  void set setterVsGetter(num value);
+}
+
+class A implements I {
+  dynamic noSuchMethod(Invocation i) => "foo";
+  static String fieldSetter = "fieldSetter";
+  static String member1 = "member1";
+  static String member2 = "member2";
+  static String member3 = "member3";
+  static String member4 = "member4";
+  static String member5 = "member5";
+  static num get setterVsGetter => 0;
+  static void procedure() {}
+  static void set getterVsSetter(double value) {}
+  static void set setter(String value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.modular.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect
new file mode 100644
index 0000000..a9e90d2
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.outline.expect
@@ -0,0 +1,81 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5;
+  static field core::String member4;
+  static field core::String member3;
+  static field core::String member1;
+  static field core::String member2;
+  static field core::String fieldSetter;
+  synthetic constructor •() → self::A
+    ;
+  static method procedure() → void
+    ;
+  static set setter(core::String value) → void
+    ;
+  static get setterVsGetter() → core::num
+    ;
+  static set getterVsSetter(core::double value) → void
+    ;
+  method noSuchMethod(core::Invocation i) → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect
new file mode 100644
index 0000000..c9cdfb3
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48402.dart.weak.transformed.expect
@@ -0,0 +1,79 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48402.dart:19:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String member1 = "member1"; // Error.
+//                 ^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:6:14: Context: This is the inherited member.
+//   String get member1;
+//              ^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:22:15: Error: Can't declare a member that conflicts with an inherited one.
+//   static void procedure() {} // Error.
+//               ^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:7:14: Context: This is the inherited member.
+//   String get procedure;
+//              ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:26:17: Error: Can't declare a member that conflicts with an inherited one.
+//   static String fieldSetter = "fieldSetter"; // Error.
+//                 ^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:9:12: Context: This is the inherited member.
+//   void set fieldSetter(String value);
+//            ^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:28:18: Error: Can't declare a member that conflicts with an inherited one.
+//   static num get setterVsGetter => 0; // Error.
+//                  ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:10:12: Context: This is the inherited member.
+//   void set setterVsGetter(num value);
+//            ^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:24:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set setter(String value) {} // Error.
+//                   ^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:8:12: Context: This is the inherited member.
+//   void set setter(String value);
+//            ^^^^^^
+//
+// pkg/front_end/testcases/general/issue48402.dart:30:19: Error: Can't declare a member that conflicts with an inherited one.
+//   static void set getterVsSetter(double value) {} // Error.
+//                   ^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/issue48402.dart:11:14: Context: This is the inherited member.
+//   double get getterVsSetter;
+//              ^^^^^^^^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+abstract class I extends core::Object {
+  synthetic constructor •() → self::I
+    : super core::Object::•()
+    ;
+  abstract get member1() → core::String;
+  abstract get procedure() → core::String;
+  abstract set setter(core::String value) → void;
+  abstract set fieldSetter(core::String value) → void;
+  abstract set setterVsGetter(core::num value) → void;
+  abstract get getterVsSetter() → core::double;
+}
+class A extends core::Object implements self::I {
+  static field core::String member5 = "member5";
+  static field core::String member4 = "member4";
+  static field core::String member3 = "member3";
+  static field core::String member1 = "member1";
+  static field core::String member2 = "member2";
+  static field core::String fieldSetter = "fieldSetter";
+  synthetic constructor •() → self::A
+    : super core::Object::•()
+    ;
+  static method procedure() → void {}
+  static set setter(core::String value) → void {}
+  static get setterVsGetter() → core::num
+    return 0;
+  static set getterVsSetter(core::double value) → void {}
+  method noSuchMethod(core::Invocation i) → dynamic
+    return "foo";
+}
+static method main() → dynamic {}
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 164c4aa..d79ce34 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -688,7 +688,7 @@
 
   @override
   DecoratedType? visitClassTypeAlias(ClassTypeAlias node) {
-    _dispatch(node.superclass2);
+    _dispatch(node.superclass);
     _dispatch(node.implementsClause);
     _dispatch(node.withClause);
     var classElement = node.declaredElement!;
@@ -782,7 +782,7 @@
   DecoratedType? visitConstructorDeclaration(ConstructorDeclaration node) {
     _fieldsNotInitializedByConstructor =
         _fieldsNotInitializedAtDeclaration!.toSet();
-    _dispatch(node.redirectedConstructor?.type2.typeArguments);
+    _dispatch(node.redirectedConstructor?.type.typeArguments);
     _handleExecutableDeclaration(
         node,
         node.declaredElement!,
@@ -1188,7 +1188,7 @@
     var typeParameters = callee.enclosingElement.typeParameters;
     Iterable<DartType?> typeArgumentTypes;
     List<DecoratedType> decoratedTypeArguments;
-    var typeArguments = node.constructorName.type2.typeArguments;
+    var typeArguments = node.constructorName.type.typeArguments;
     late List<EdgeOrigin> parameterEdgeOrigins;
     var target =
         NullabilityNodeTarget.text('constructed type').withCodeRef(node);
@@ -2559,7 +2559,7 @@
     var callee = redirectedConstructor.staticElement!.declaration;
     var redirectedClass = callee.enclosingElement;
     var calleeType = _variables!.decoratedElementType(callee);
-    var typeArguments = redirectedConstructor.type2.typeArguments;
+    var typeArguments = redirectedConstructor.type.typeArguments;
     var typeArgumentTypes =
         typeArguments?.arguments.map((t) => t.type).toList();
     _handleInvocationArguments(
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index ac2cf60..965e616 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -135,7 +135,7 @@
     node.nativeClause?.accept(this);
     node.members.accept(this);
     var classElement = node.declaredElement!;
-    _handleSupertypeClauses(node, classElement, node.extendsClause?.superclass2,
+    _handleSupertypeClauses(node, classElement, node.extendsClause?.superclass,
         node.withClause, node.implementsClause, null);
     var constructors = classElement.constructors;
     if (constructors.length == 1) {
@@ -161,7 +161,7 @@
     node.name.accept(this);
     node.typeParameters?.accept(this);
     var classElement = node.declaredElement!;
-    _handleSupertypeClauses(node, classElement, node.superclass2,
+    _handleSupertypeClauses(node, classElement, node.superclass,
         node.withClause, node.implementsClause, null);
     for (var constructorElement in classElement.constructors) {
       assert(constructorElement.isSynthetic);
@@ -208,7 +208,7 @@
   @override
   DecoratedType? visitConstructorName(ConstructorName node) {
     _pushNullabilityNodeTarget(NullabilityNodeTarget.text('constructed type'),
-        () => node.type2.accept(this));
+        () => node.type.accept(this));
     node.name?.accept(this);
     return null;
   }
@@ -921,13 +921,13 @@
     var supertypes = <NamedType?>[];
     supertypes.add(superclass);
     if (withClause != null) {
-      supertypes.addAll(withClause.mixinTypes2);
+      supertypes.addAll(withClause.mixinTypes);
     }
     if (implementsClause != null) {
-      supertypes.addAll(implementsClause.interfaces2);
+      supertypes.addAll(implementsClause.interfaces);
     }
     if (onClause != null) {
-      supertypes.addAll(onClause.superclassConstraints2);
+      supertypes.addAll(onClause.superclassConstraints);
     }
     var decoratedSupertypes = <ClassElement, DecoratedType?>{};
     _pushNullabilityNodeTarget(
diff --git a/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
index 5c2e296..8af9550 100644
--- a/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/named_type_tracker.dart
@@ -31,7 +31,7 @@
     final parent = node.parent;
     if (parent is ConstructorName) {
       // We only need to visit C in `new C()`, just `int` in `new C<int>()`.
-      return parent.type2 != node;
+      return parent.type != node;
     }
 
     return true;
diff --git a/pkg/wasm_builder/OWNERS b/pkg/wasm_builder/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/pkg/wasm_builder/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index c928e03..778673b 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -287,8 +287,8 @@
   V(_OneByteString, get:hashCode, OneByteString_getHashCode, 0x75e0d454)       \
   V(_OneByteString, _substringUncheckedNative,                                 \
     OneByteString_substringUnchecked,  0x9b18195e)                             \
-  V(_OneByteString, ==, OneByteString_equality, 0xb50039a8)                    \
-  V(_TwoByteString, ==, TwoByteString_equality, 0xb50039a8)                    \
+  V(_OneByteString, ==, OneByteString_equality, 0xb5003d69)                    \
+  V(_TwoByteString, ==, TwoByteString_equality, 0xb5003d69)                    \
   V(_Type, get:hashCode, Type_getHashCode, 0x75e0d454)                         \
   V(_Type, ==, Type_equality, 0x465868ae)                                      \
   V(_FunctionType, get:hashCode, FunctionType_getHashCode, 0x75e0d454)         \
diff --git a/sdk/lib/_internal/vm/lib/string_patch.dart b/sdk/lib/_internal/vm/lib/string_patch.dart
index c62a03a..0a51f33 100644
--- a/sdk/lib/_internal/vm/lib/string_patch.dart
+++ b/sdk/lib/_internal/vm/lib/string_patch.dart
@@ -986,6 +986,9 @@
 
   @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
+  // Intrinsic is more efficient than an inlined body even for the small
+  // strings.
+  @pragma('vm:never-inline')
   bool operator ==(Object other) {
     return super == other;
   }
@@ -1332,6 +1335,9 @@
 
   @pragma("vm:recognized", "asm-intrinsic")
   @pragma("vm:exact-result-type", bool)
+  // Intrinsic is more efficient than an inlined body even for the small
+  // strings.
+  @pragma('vm:never-inline')
   bool operator ==(Object other) {
     return super == other;
   }
diff --git a/sdk/lib/_internal/wasm/OWNERS b/sdk/lib/_internal/wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/sdk/lib/_internal/wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/sdk/lib/wasm/OWNERS b/sdk/lib/wasm/OWNERS
new file mode 100644
index 0000000..2e908ab
--- /dev/null
+++ b/sdk/lib/wasm/OWNERS
@@ -0,0 +1 @@
+file:/tools/OWNERS_WASM
diff --git a/tools/OWNERS_WASM b/tools/OWNERS_WASM
new file mode 100644
index 0000000..ee153f1
--- /dev/null
+++ b/tools/OWNERS_WASM
@@ -0,0 +1,3 @@
+askesc@google.com
+joshualitt@google.com
+kustermann@google.com
diff --git a/tools/VERSION b/tools/VERSION
index 6a9c5f7..7febf05 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 116
+PRERELEASE 117
 PRERELEASE_PATCH 0
\ No newline at end of file