Version 2.19.0-58.0.dev

Merge commit '7bfc64861756630a573d72107ed693b1c4943dca' into 'dev'
diff --git a/DEPS b/DEPS
index 5c90859..ff0a30e 100644
--- a/DEPS
+++ b/DEPS
@@ -108,7 +108,7 @@
   # For more details, see https://github.com/dart-lang/sdk/issues/30164.
   "dart_style_rev": "d7b73536a8079331c888b7da539b80e6825270ea", # manually rev'd
 
-  "dartdoc_rev": "d7513b2ee0a9bad6c9526f6b0ba970b4fcca17d0",
+  "dartdoc_rev": "7edeeeb20a506cadec3788c273fdee6cad91e07c",
   "devtools_rev": "d131d19091f6b89ac89486bd92440a25a523e8b0",
   "ffi_rev": "18b2b549d55009ff594600b04705ff6161681e07",
   "file_rev": "0132eeedea2933513bf230513a766a8baeab0c4f",
@@ -116,10 +116,10 @@
   "glob_rev": "1d51fcc172e5adfbae6e82c3f8f119774cb2fca2",
   "html_rev": "8243e967caad9932c13971af3b2a7c8f028383d5",
   "http_multi_server_rev": "20bf079c8955d1250a45afb9cb096472a724a551",
-  "http_parser_rev": "d25b3c9e7f23e31ac388a03361737110768597f6",
+  "http_parser_rev": "b968f7ddde0588273a6cbd1d2eb6569f418606ac",
   "http_rev": "5055b684ae45fb141a106ef6ced988aa37ed0ea6",
   "icu_rev": "81d656878ec611cb0b42d52c82e9dae93920d9ba",
-  "intl_rev": "64dccc499162bebecb1ee29dc994f3e0c1416e96",
+  "intl_rev": "7e3a1bbdeff241323f56295d8991c004bef815e6",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "805e6536dd961d66f6b8cd46d8f3e61774f957c9",
   "linter_rev": "b4afc10055f3009478da1eac1827f9fef42c3759", # 1.26.0
@@ -129,15 +129,15 @@
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
   "matcher_rev": "cba63ebf8ed1daeffd5f3c55fd30085152c4512d",
   "mime_rev": "0a75a41445eb642674a0a271eecde78cb025ee60",
-  "mockito_rev": "d8a2ddd2054390bd03d34bf64c940884e6f7a596",
+  "mockito_rev": "2acf22f4d400c6e1eee0f6ca595092220fba8b34",
   "oauth2_rev": "199ebf15cbd5b07958438184f32e41c4447a57bf",
   "package_config_rev": "cff98c90acc457a3b0750f0a7da0e351a35e5d0c",
   "path_rev": "9955b27b9bb98d87591208e19eb01c51d29fd467",
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_rev": "fa84ddd0e39f45bf3f09dcc5d6b9fbdda7820fef",
-  "protobuf_rev": "9aad6aadcc0fc616051c7e0eaef78c26b3dd7b60",
+  "protobuf_rev": "504eefeae9892602ea50c20159db1db3768012a9",
   "pub_rev": "9bf4289d6fd5d6872a8929d6312bbd7098f3ea9c", # manually rev'd
-  "pub_semver_rev": "5c0b4bfd5ca57fe16f1319c581dc8c882e9b8cb2",
+  "pub_semver_rev": "9fd28757ba45961ac5449e0f2b0020670e921475",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
   "shelf_rev": "0371a64bd3b99044ee3158bacf8813bba735a9c7",
   "source_map_stack_trace_rev": "72dbf21a33293b2b8434d0a9751e36f9463981ac",
@@ -149,10 +149,10 @@
   "string_scanner_rev": "2d84b16d8ae03c3a8c2417b71abe0fe6de7d8bf6",
   "sync_http_rev": "39509d69fd5a9c3da46eab48fcafdf62e6ad4580",
   "term_glyph_rev": "ec7cf7bb51ebb7d55760a1359f6697690dbc06ba",
-  "test_descriptor_rev": "c21e15daa3a22a7066f081d4d30aa5cae8b5de36",
+  "test_descriptor_rev": "f392f85a9804349976be041616ef66925cee8a91",
   "test_process_rev": "3e695bcfeab551473ddc288970f345f30e5e1375",
   "test_reflective_loader_rev": "8d0de01bbe852fea1f8e33aba907abcba50a8a1e",
-  "test_rev": "b144a336776eaa1f9420f3ab38214d8c061c663e",
+  "test_rev": "aba7de5851ace64f1f887369ae9424582d9d4d7f",
   "typed_data_rev": "bb10b64f9a56b8fb49307d4465474bf1c1309f6d",
   "usage_rev": "e287a72228974886d8a3b40ddcdf12f69d7c6a22",
   "vector_math_rev": "09ba4fa74e668177211f917a1c14789cd05d3cab",
@@ -160,7 +160,7 @@
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
   "web_socket_channel_rev": "99dbdc5769e19b9eeaf69449a59079153c6a8b1f",
   "WebCore_rev": "bcb10901266c884e7b3740abc597ab95373ab55c",
-  "webdev_rev": "27cc5c9228ca59e721bc41fe7028e0fd6b995748",
+  "webdev_rev": "37bf4af1b0961f053e7cf4990a34ca5fd0ad0fd4",
   "webdriver_rev": "e1a9ad671ee82e05eee463f922a34585ed2d2f15",
   "webkit_inspection_protocol_rev": "57522d6b29d94903b765c757079d906555d5a171",
   "yaml_edit_rev": "01589b3ce447b03aed991db49f1ec6445ad5476d",
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 73f1716..3ff2d18 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -65,7 +65,7 @@
 
   void _analyzePossibleConflicts(
       ConstructorElement element, RefactoringStatus result, String newName) {
-    var parentClass = element.enclosingElement2;
+    var parentClass = element.enclosingElement3;
     // Check if the "newName" is the name of the enclosing class.
     if (parentClass.name == newName) {
       result.addError('The constructor should not have the same name '
@@ -254,7 +254,7 @@
     var stateName = flutterState.newName;
     var match = await canRename._fileResolver.findReferences2(stateClass);
     var sourcePath = stateClass.source.fullName;
-    var location = stateClass.enclosingElement2.lineInfo
+    var location = stateClass.enclosingElement3.lineInfo
         .getLocation(stateClass.nameOffset);
     CiderSearchMatch ciderMatch;
     var searchInfo =
@@ -297,7 +297,7 @@
 
   Future<CiderReplaceMatch?> _replaceSyntheticConstructor() async {
     var element = canRename.refactoringElement.element;
-    var classElement = element.enclosingElement2;
+    var classElement = element.enclosingElement3;
 
     var fileResolver = canRename._fileResolver;
     var libraryPath = classElement!.library!.source.fullName;
@@ -382,7 +382,7 @@
   }
 
   bool _canRenameElement(Element element) {
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (element is ConstructorElement) {
       return true;
     }
diff --git a/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart b/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
index ca17b51..577c75d4 100644
--- a/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_call_hierarchy.dart
@@ -104,7 +104,7 @@
         codeRange = _codeRangeForElement(element),
         file = element.source!.fullName,
         kind = CallHierarchyKind.forElement(element) {
-    final enclosingElement = element.enclosingElement2;
+    final enclosingElement = element.enclosingElement3;
     final container =
         enclosingElement != null ? _getContainer(enclosingElement) : null;
     containerName = container != null ? _getDisplayName(container) : null;
@@ -330,7 +330,7 @@
         }
       }
     } else if (node is ConstructorDeclaration) {
-      final name = node.name;
+      final name = node.name2;
       if (name != null && offset < name.offset) {
         return null;
       }
diff --git a/pkg/analysis_server/lib/src/computer/computer_color.dart b/pkg/analysis_server/lib/src/computer/computer_color.dart
index 21db001..6649356 100644
--- a/pkg/analysis_server/lib/src/computer/computer_color.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_color.dart
@@ -83,7 +83,7 @@
 
     final constructor = expression.constructorName;
     final staticElement = constructor.staticElement;
-    final classElement = staticElement?.enclosingElement2;
+    final classElement = staticElement?.enclosingElement3;
     final className = classElement?.name;
     final constructorName = constructor.name?.name;
     final constructorArgs = expression.argumentList.arguments
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index b74240d..36715bb 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -305,7 +305,7 @@
     var parent = node.parent;
     var isInvocation = parent is MethodInvocation && parent.methodName == node;
     HighlightRegionType type;
-    var isTopLevel = element.enclosingElement2 is CompilationUnitElement;
+    var isTopLevel = element.enclosingElement3 is CompilationUnitElement;
     if (node.inDeclarationContext()) {
       type = isTopLevel
           ? HighlightRegionType.TOP_LEVEL_FUNCTION_DECLARATION
@@ -334,7 +334,7 @@
       return false;
     }
     // getter or setter
-    var isTopLevel = element.enclosingElement2 is CompilationUnitElement;
+    var isTopLevel = element.enclosingElement3 is CompilationUnitElement;
     HighlightRegionType type;
     if (element.isGetter) {
       if (isTopLevel) {
@@ -682,6 +682,14 @@
     computer._addRegion_token(
         node.factoryKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(node.constKeyword, HighlightRegionType.KEYWORD);
+    computer._addRegion_token(
+      node.name2,
+      HighlightRegionType.CONSTRUCTOR,
+      semanticTokenType: SemanticTokenTypes.method,
+      semanticTokenModifiers: {
+        CustomSemanticTokenModifiers.constructor,
+      },
+    );
     super.visitConstructorDeclaration(node);
   }
 
@@ -743,8 +751,8 @@
 
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
-    computer._addRegion_node(
-      node.name,
+    computer._addRegion_token(
+      node.name2,
       HighlightRegionType.ENUM_CONSTANT,
     );
     node.visitChildren(this);
@@ -803,8 +811,8 @@
     if (element is FieldFormalParameterElement) {
       var field = element.field;
       if (field != null) {
-        computer._addRegion_node(
-          node.identifier,
+        computer._addRegion_token(
+          node.name,
           HighlightRegionType.INSTANCE_FIELD_REFERENCE,
         );
       }
@@ -1109,6 +1117,12 @@
 
   @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
+    final parent = node.parent;
+    // ignore: deprecated_member_use
+    if (parent is ConstructorDeclaration && parent.name == node) {
+      return;
+    }
+
     computer._addIdentifierRegion(node);
     super.visitSimpleIdentifier(node);
   }
@@ -1135,8 +1149,8 @@
       HighlightRegionType.KEYWORD,
     );
 
-    computer._addRegion_node(
-      node.identifier,
+    computer._addRegion_token(
+      node.name,
       HighlightRegionType.PARAMETER_DECLARATION,
     );
 
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index 3ca0f28..bba7cc4 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -71,7 +71,7 @@
         hover.elementKind = element.kind.displayName;
         hover.isDeprecated = element.hasDeprecated;
         // not local element
-        if (element.enclosingElement2 is! ExecutableElement) {
+        if (element.enclosingElement3 is! ExecutableElement) {
           // containing class
           var containingClass = element.thisOrAncestorOfType<ClassElement>();
           if (containingClass != null && containingClass != element) {
@@ -152,7 +152,7 @@
       element = element.field;
     }
     if (element is ParameterElement) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     if (element == null) {
       // This can happen when the code is invalid, such as having a field formal
@@ -197,9 +197,9 @@
     var result =
         dartdocInfo.processDartdoc(rawDoc, includeSummary: includeSummary);
 
-    var documentedElementClass = documentedElement.enclosingElement2;
+    var documentedElementClass = documentedElement.enclosingElement3;
     if (documentedElementClass != null &&
-        documentedElementClass != element.enclosingElement2) {
+        documentedElementClass != element.enclosingElement3) {
       var documentedClass = documentedElementClass.displayName;
       result.full = '${result.full}\n\nCopied from `$documentedClass`.';
     }
diff --git a/pkg/analysis_server/lib/src/computer/computer_outline.dart b/pkg/analysis_server/lib/src/computer/computer_outline.dart
index b0140fd..237e310 100644
--- a/pkg/analysis_server/lib/src/computer/computer_outline.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_outline.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart' as engine;
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
@@ -90,9 +91,13 @@
         endLine: endLine, endColumn: endColumn);
   }
 
+  Location _getLocationToken(Token token) {
+    return _getLocationOffsetLength(token.offset, token.length);
+  }
+
   Outline _newClassOutline(ClassDeclaration node, List<Outline> classContents) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         ElementKind.CLASS,
         name,
@@ -100,14 +105,14 @@
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node),
             isAbstract: node.abstractKeyword != null),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         typeParameters: _getTypeParametersStr(node.typeParameters));
     return _nodeOutline(node, element, classContents);
   }
 
   Outline _newClassTypeAlias(ClassTypeAlias node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         ElementKind.CLASS_TYPE_ALIAS,
         name,
@@ -115,7 +120,7 @@
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node),
             isAbstract: node.abstractKeyword != null),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         typeParameters: _getTypeParametersStr(node.typeParameters));
     return _nodeOutline(node, element);
   }
@@ -125,14 +130,14 @@
     var name = returnType.name;
     var offset = returnType.offset;
     var length = returnType.length;
-    var constructorNameNode = constructor.name;
+    var constructorNameToken = constructor.name2;
     var isPrivate = false;
-    if (constructorNameNode != null) {
-      var constructorName = constructorNameNode.name;
+    if (constructorNameToken != null) {
+      var constructorName = constructorNameToken.lexeme;
       isPrivate = Identifier.isPrivateName(constructorName);
       name += '.$constructorName';
-      offset = constructorNameNode.offset;
-      length = constructorNameNode.length;
+      offset = constructorNameToken.offset;
+      length = constructorNameToken.length;
     }
     var parameters = constructor.parameters;
     var parametersStr = _safeToSource(parameters);
@@ -148,50 +153,52 @@
   }
 
   Outline _newEnumConstant(EnumConstantDeclaration node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         ElementKind.ENUM_CONSTANT,
         name,
         Element.makeFlags(
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node)),
-        location: _getLocationNode(nameNode));
+        location: _getLocationToken(nameToken));
     return _nodeOutline(node, element);
   }
 
   Outline _newEnumOutline(EnumDeclaration node, List<Outline> children) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         ElementKind.ENUM,
         name,
         Element.makeFlags(
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node)),
-        location: _getLocationNode(nameNode));
+        location: _getLocationToken(nameToken));
     return _nodeOutline(node, element, children);
   }
 
   Outline _newExtensionOutline(
       ExtensionDeclaration node, List<Outline> extensionContents) {
-    var nameNode = node.name;
-    var name = nameNode?.name ?? '';
+    var nameToken = node.name2;
+    var name = nameToken?.lexeme ?? '';
     var element = Element(
         ElementKind.EXTENSION,
         name,
         Element.makeFlags(
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node)),
-        location: _getLocationNode(nameNode ?? node.extendedType),
+        location: nameToken != null
+            ? _getLocationToken(nameToken)
+            : _getLocationNode(node.extendedType),
         typeParameters: _getTypeParametersStr(node.typeParameters));
     return _nodeOutline(node, element, extensionContents);
   }
 
   Outline _newFunctionOutline(FunctionDeclaration function, bool isStatic) {
     var returnType = function.returnType;
-    var nameNode = function.name;
-    var name = nameNode.name;
+    var nameToken = function.name2;
+    var name = nameToken.lexeme;
     var functionExpression = function.functionExpression;
     var parameters = functionExpression.parameters;
     ElementKind kind;
@@ -211,7 +218,7 @@
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(function),
             isStatic: isStatic),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         parameters: parametersStr,
         returnType: returnTypeStr,
         typeParameters:
@@ -222,8 +229,8 @@
 
   Outline _newFunctionTypeAliasOutline(FunctionTypeAlias node) {
     var returnType = node.returnType;
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var parameters = node.parameters;
     var parametersStr = _safeToSource(parameters);
     var returnTypeStr = _safeToSource(returnType);
@@ -233,7 +240,7 @@
         Element.makeFlags(
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node)),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         parameters: parametersStr,
         returnType: returnTypeStr,
         typeParameters: _getTypeParametersStr(node.typeParameters));
@@ -241,8 +248,8 @@
   }
 
   Outline _newGenericTypeAliasOutline(GenericTypeAlias node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
     var aliasedType = node.type;
     var aliasedFunctionType =
@@ -258,7 +265,7 @@
         isDeprecated: _isDeprecated(node),
       ),
       aliasedType: _safeToSource(aliasedType),
-      location: _getLocationNode(nameNode),
+      location: _getLocationToken(nameToken),
       parameters: aliasedFunctionType != null
           ? _safeToSource(aliasedFunctionType.parameters)
           : null,
@@ -273,8 +280,8 @@
 
   Outline _newMethodOutline(MethodDeclaration method) {
     var returnType = method.returnType;
-    var nameNode = method.name;
-    var name = nameNode.name;
+    var nameToken = method.name2;
+    var name = nameToken.lexeme;
     var parameters = method.parameters;
     ElementKind kind;
     if (method.isGetter) {
@@ -294,7 +301,7 @@
             isDeprecated: _isDeprecated(method),
             isAbstract: method.isAbstract,
             isStatic: method.isStatic),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         parameters: parametersStr,
         returnType: returnTypeStr,
         typeParameters: _getTypeParametersStr(method.typeParameters));
@@ -304,15 +311,15 @@
 
   Outline _newMixinOutline(MixinDeclaration node, List<Outline> mixinContents) {
     node.firstTokenAfterCommentAndMetadata;
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         ElementKind.MIXIN,
         name,
         Element.makeFlags(
             isPrivate: Identifier.isPrivateName(name),
             isDeprecated: _isDeprecated(node)),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         typeParameters: _getTypeParametersStr(node.typeParameters));
     return _nodeOutline(node, element, mixinContents);
   }
@@ -327,8 +334,8 @@
 
   Outline _newVariableOutline(String typeName, ElementKind kind,
       VariableDeclaration variable, bool isStatic) {
-    var nameNode = variable.name;
-    var name = nameNode.name;
+    var nameToken = variable.name2;
+    var name = nameToken.lexeme;
     var element = Element(
         kind,
         name,
@@ -338,7 +345,7 @@
             isStatic: isStatic,
             isConst: variable.isConst,
             isFinal: variable.isFinal),
-        location: _getLocationNode(nameNode),
+        location: _getLocationToken(nameToken),
         returnType: typeName);
     return _nodeOutline(variable, element);
   }
@@ -521,7 +528,7 @@
   /// Return `true` if the given [element] is a top-level member of the test
   /// package.
   bool _isInsideTestPackage(engine.FunctionElement element) {
-    var parent = element.enclosingElement2;
+    var parent = element.enclosingElement3;
     return parent is engine.CompilationUnitElement &&
         parent.source.fullName.endsWith('test.dart');
   }
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index d55a4c6..9b7736e 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -6,11 +6,12 @@
 import 'package:analysis_server/src/protocol_server.dart' as proto;
 import 'package:analysis_server/src/utilities/extensions/ast.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 
 /// Return the elements that the given [element] overrides.
 OverriddenElements findOverriddenElements(Element element) {
-  if (element.enclosingElement2 is ClassElement) {
+  if (element.enclosingElement3 is ClassElement) {
     return _OverriddenElementsFinder(element).find();
   }
   return OverriddenElements(element, <Element>[], <Element>[]);
@@ -35,9 +36,8 @@
     return _overrides;
   }
 
-  /// Add a new [Override] for the declaration with the given name [node].
-  void _addOverride(SimpleIdentifier node) {
-    var element = node.staticElement;
+  /// Add a new [Override] for the declaration with the given name [token].
+  void _addOverride(Token token, Element? element) {
     if (element != null) {
       var overridesResult = _OverriddenElementsFinder(element).find();
       var superElements = overridesResult.superElements;
@@ -53,7 +53,7 @@
                 member.nonSynthetic,
                 withNullability: _unit.isNonNullableByDefault))
             .toList();
-        _overrides.add(proto.Override(node.offset, node.length,
+        _overrides.add(proto.Override(token.offset, token.length,
             superclassMember: superMember,
             interfaceMembers: nullIfEmpty(interfaceMembers)));
       }
@@ -66,7 +66,7 @@
         if (classMember.isStatic) {
           continue;
         }
-        _addOverride(classMember.name);
+        _addOverride(classMember.name2, classMember.declaredElement);
       }
       if (classMember is FieldDeclaration) {
         if (classMember.isStatic) {
@@ -74,7 +74,7 @@
         }
         List<VariableDeclaration> fields = classMember.fields.variables;
         for (var field in fields) {
-          _addOverride(field.name);
+          _addOverride(field.name2, field.declaredElement);
         }
       }
     }
@@ -109,7 +109,7 @@
   final Set<ClassElement> _visited = <ClassElement>{};
 
   factory _OverriddenElementsFinder(Element seed) {
-    var class_ = seed.enclosingElement2 as ClassElement;
+    var class_ = seed.enclosingElement3 as ClassElement;
     var library = class_.library;
     var name = seed.displayName;
     List<ElementKind> kinds;
diff --git a/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart b/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
index bed6b92..e500165 100644
--- a/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
+++ b/pkg/analysis_server/lib/src/computer/imported_elements_computer.dart
@@ -82,7 +82,7 @@
         !_isConstructorDeclarationReturnType(node)) {
       var nodeElement = node.writeOrReadElement;
       if (nodeElement != null &&
-          nodeElement.enclosingElement2 is CompilationUnitElement) {
+          nodeElement.enclosingElement3 is CompilationUnitElement) {
         var nodeLibrary = nodeElement.library;
         var path = nodeLibrary?.definingCompilationUnit.source.fullName;
         if (path == null) {
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
index d11c738..47b7bbf 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
@@ -27,6 +27,13 @@
   final Map<Element, List<int>> elementsOffsets = <Element, List<int>>{};
 
   @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    _addOccurrence(node.declaredElement!, node.name2.offset);
+
+    super.visitEnumConstantDeclaration(node);
+  }
+
+  @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
     var element = node.writeOrReadElement;
     if (element != null) {
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 1b25da7..b64b933 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -215,7 +215,7 @@
 OverriddenMember newOverriddenMember_fromEngine(engine.Element member,
     {required bool withNullability}) {
   var element = convertElement(member, withNullability: withNullability);
-  var className = member.enclosingElement2!.displayName;
+  var className = member.enclosingElement3!.displayName;
   return OverriddenMember(element, className);
 }
 
@@ -262,7 +262,7 @@
   var path = <Element>[];
 
   if (element is engine.PrefixElement) {
-    element = element.enclosingElement2.definingCompilationUnit;
+    element = element.enclosingElement3.definingCompilationUnit;
   }
 
   var withNullability = element.library?.isNonNullableByDefault ?? false;
@@ -277,7 +277,7 @@
     return element;
   }
 
-  var enclosingElement = element.enclosingElement2;
+  var enclosingElement = element.enclosingElement3;
   if (enclosingElement is engine.LibraryElement) {
     element = enclosingElement;
   }
diff --git a/pkg/analysis_server/lib/src/search/element_references.dart b/pkg/analysis_server/lib/src/search/element_references.dart
index 57d16bf..cfa38cd 100644
--- a/pkg/analysis_server/lib/src/search/element_references.dart
+++ b/pkg/analysis_server/lib/src/search/element_references.dart
@@ -73,6 +73,6 @@
     if (element is ConstructorElement) {
       return false;
     }
-    return element.enclosingElement2 is ClassElement;
+    return element.enclosingElement3 is ClassElement;
   }
 }
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index 7064baa..f532954 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -35,10 +35,10 @@
     Element? element = _pivotElement;
     if (_pivotElement is FieldElement) {
       _pivotFieldFinal = (_pivotElement as FieldElement).isFinal;
-      element = _pivotElement.enclosingElement2;
+      element = _pivotElement.enclosingElement3;
     }
     if (_pivotElement is ExecutableElement) {
-      element = _pivotElement.enclosingElement2;
+      element = _pivotElement.enclosingElement3;
     }
     if (element is ClassElement) {
       _pivotClass = element;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index e8241d4..363121d 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -478,17 +478,26 @@
       }
     }
 
+    /// TODO(scheglov) Can we make it better?
+    String fromToken(Token token) {
+      final lexeme = token.lexeme;
+      if (offset >= token.offset && offset < token.end) {
+        return lexeme.substring(0, offset - token.offset);
+      } else if (offset == token.end) {
+        return lexeme;
+      }
+      return '';
+    }
+
     while (entity is AstNode) {
       if (entity is SimpleIdentifier) {
-        var identifier = entity.name;
-        if (offset >= entity.offset && offset < entity.end) {
-          return identifier.substring(0, offset - entity.offset);
-        } else if (offset == entity.end) {
-          return identifier;
-        }
+        return fromToken(entity.token);
       }
       var children = entity.childEntities;
       entity = children.isEmpty ? null : children.first;
+      if (entity is Token) {
+        return fromToken(entity);
+      }
     }
     return '';
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 70ccf2f..df5b7456 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -979,7 +979,7 @@
       var parent = node.parent;
       if (parent is VariableDeclarationList) {
         return parent.type?.type ??
-            _impliedDartTypeWithName(typeProvider, node.name.name);
+            _impliedDartTypeWithName(typeProvider, node.name2.lexeme);
       }
     }
     return null;
@@ -992,7 +992,7 @@
         var equals = varDecl.equals;
         if (equals != null && equals.end <= offset) {
           return node.type?.type ??
-              _impliedDartTypeWithName(typeProvider, varDecl.name.name);
+              _impliedDartTypeWithName(typeProvider, varDecl.name2.lexeme);
         }
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
index d732186..2157dcc 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/field_formal_contributor.dart
@@ -37,9 +37,9 @@
         param = param.parameter;
       }
       if (param is FieldFormalParameter) {
-        var fieldId = param.identifier;
+        var fieldId = param.name;
         if (fieldId != request.target.entity) {
-          var fieldName = fieldId.name;
+          var fieldName = fieldId.lexeme;
           if (fieldName.isNotEmpty) {
             referencedFields.add(fieldName);
           }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 8e5c326..060361b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -146,7 +146,7 @@
   void visitClassDeclaration(ClassDeclaration node) {
     final entity = this.entity;
     // Don't suggest class name
-    if (entity == node.name) {
+    if (entity == node.name2) {
       return;
     }
     if (entity == node.rightBracket) {
@@ -266,7 +266,7 @@
       return;
     }
 
-    if (entity == node.name) {
+    if (entity == node.name2) {
       return;
     }
 
@@ -298,7 +298,7 @@
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     // Don't suggest extension name
-    if (entity == node.name) {
+    if (entity == node.name2) {
       return;
     }
     if (entity == node.rightBracket) {
@@ -407,15 +407,13 @@
       bool hasCovariant() {
         var last = lastParameter();
         return last != null &&
-            (last.covariantKeyword != null ||
-                last.identifier?.name == 'covariant');
+            (last.covariantKeyword != null || last.name?.lexeme == 'covariant');
       }
 
       bool hasRequired() {
         var last = lastParameter();
         return last != null &&
-            (last.requiredKeyword != null ||
-                last.identifier?.name == 'required');
+            (last.requiredKeyword != null || last.name?.lexeme == 'required');
       }
 
       var tokenType = entity.type;
@@ -494,7 +492,7 @@
   void visitFunctionDeclaration(FunctionDeclaration node) {
     // If the cursor is at the beginning of the declaration, include the
     // compilation unit keywords.  See dartbug.com/41039.
-    if (entity == node.returnType || entity == node.name) {
+    if (entity == node.returnType || entity == node.name2) {
       _addSuggestion(Keyword.DYNAMIC);
       _addSuggestion(Keyword.VOID);
     }
@@ -617,7 +615,7 @@
           _addSuggestion2(SYNC_STAR);
         }
       }
-    } else if (entity == node.returnType || entity == node.name) {
+    } else if (entity == node.returnType || entity == node.name2) {
       // If the cursor is at the beginning of the declaration, include the class
       // body keywords.  See dartbug.com/41039.
       _addClassBodyKeywords();
@@ -645,7 +643,7 @@
   void visitMixinDeclaration(MixinDeclaration node) {
     final entity = this.entity;
     // Don't suggest mixin name
-    if (entity == node.name) {
+    if (entity == node.name2) {
       return;
     }
     if (entity == node.rightBracket) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index 536ba29..b8a7122 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -90,7 +90,7 @@
     if (element.isOperator) {
       return;
     }
-    if (element.enclosingElement2 is! CompilationUnitElement) {
+    if (element.enclosingElement3 is! CompilationUnitElement) {
       return;
     }
     var returnType = element.returnType;
@@ -115,7 +115,7 @@
   @override
   void visitPropertyAccessorElement(PropertyAccessorElement element) {
     if (opType.includeReturnValueSuggestions) {
-      var parent = element.enclosingElement2;
+      var parent = element.enclosingElement3;
       if (parent is ClassElement || parent is ExtensionElement) {
         builder.suggestAccessor(element, inheritanceDistance: 0.0);
       } else {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 4d000d9..5389353 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -241,7 +241,7 @@
     if (declaredElement != null &&
         visibilityTracker._isVisible(declaredElement) &&
         opType.includeReturnValueSuggestions &&
-        declaration.name != null) {
+        declaration.name2 != null) {
       builder.suggestExtension(declaredElement, kind: _defaultKind);
     }
   }
@@ -259,7 +259,7 @@
           .thisOrAncestorOfType<ClassDeclaration>();
       var enclosingElement = enclosingClass?.declaredElement;
       if (enclosingElement != null) {
-        var enclosingElement = field.enclosingElement2;
+        var enclosingElement = field.enclosingElement3;
         if (enclosingElement is ClassElement) {
           inheritanceDistance = request.featureComputer
               .inheritanceDistanceFeature(enclosingElement, enclosingElement);
@@ -316,10 +316,14 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation? type) {
-    if (visibilityTracker._isVisible(name.staticElement) &&
+  void declaredLocalVar(
+    Token name,
+    TypeAnnotation? type,
+    LocalVariableElement declaredElement,
+  ) {
+    if (visibilityTracker._isVisible(declaredElement) &&
         opType.includeReturnValueSuggestions) {
-      builder.suggestLocalVariable(name.staticElement as LocalVariableElement);
+      builder.suggestLocalVariable(declaredElement);
     }
   }
 
@@ -334,7 +338,7 @@
       var enclosingClass = request.target.containingNode
           .thisOrAncestorOfType<ClassDeclaration>();
       if (enclosingClass != null) {
-        var enclosingElement = element?.enclosingElement2;
+        var enclosingElement = element?.enclosingElement3;
         if (enclosingElement is ClassElement) {
           inheritanceDistance = request.featureComputer
               .inheritanceDistanceFeature(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index 6d70d17..ce0c5bf 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -4,6 +4,7 @@
 
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 
@@ -14,11 +15,12 @@
 
   @override
   Future<void> computeSuggestions() async {
-    var targetId = _getTargetId(request.target);
-    if (targetId == null) {
+    final target = _getTargetId(request.target);
+    if (target == null) {
       return;
     }
-    var classDecl = targetId.thisOrAncestorOfType<ClassOrMixinDeclaration>();
+    var classDecl =
+        target.enclosingNode.thisOrAncestorOfType<ClassOrMixinDeclaration>();
     if (classDecl == null) {
       return;
     }
@@ -41,14 +43,14 @@
       // Gracefully degrade if the overridden element has not been resolved.
       if (element != null) {
         var invokeSuper = interface.isSuperImplemented(name);
-        await builder.suggestOverride(targetId, element, invokeSuper);
+        await builder.suggestOverride(target.id, element, invokeSuper);
       }
     }
   }
 
   /// If the target looks like a partial identifier inside a class declaration
   /// then return that identifier, otherwise return `null`.
-  SimpleIdentifier? _getTargetId(CompletionTarget target) {
+  _Target? _getTargetId(CompletionTarget target) {
     var node = target.containingNode;
     if (node is ClassOrMixinDeclaration) {
       var entity = target.entity;
@@ -64,23 +66,23 @@
     return null;
   }
 
-  SimpleIdentifier? _getTargetIdFromVarList(VariableDeclarationList fields) {
+  _Target? _getTargetIdFromVarList(VariableDeclarationList fields) {
     var variables = fields.variables;
     var type = fields.type;
     if (variables.length == 1) {
       var variable = variables[0];
-      var targetId = variable.name;
-      if (targetId.name.isEmpty) {
+      var targetId = variable.name2;
+      if (targetId.lexeme.isEmpty) {
         // analyzer parser
         // Actual: class C { foo^ }
         // Parsed: class C { foo^ _s_ }
         //   where _s_ is a synthetic id inserted by the analyzer parser
-        return targetId;
+        return _Target(fields, targetId);
       } else if (fields.keyword == null &&
           type == null &&
           variable.initializer == null) {
         // fasta parser does not insert a synthetic identifier
-        return targetId;
+        return _Target(fields, targetId);
       } else if (fields.keyword == null &&
           type is NamedType &&
           type.typeArguments == null &&
@@ -93,7 +95,7 @@
         // Parses as a variable list where `m` is the type and `String` is a
         // variable.
         var name = type.name;
-        return name is SimpleIdentifier ? name : null;
+        return name is SimpleIdentifier ? _Target(fields, name.token) : null;
       }
     }
     return null;
@@ -113,3 +115,10 @@
     return namesToOverride;
   }
 }
+
+class _Target {
+  final AstNode enclosingNode;
+  final Token id;
+
+  _Target(this.enclosingNode, this.id);
+}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index e35e291..cbdc839 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -18,6 +18,7 @@
 import 'package:analysis_server/src/utilities/flutter.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -222,7 +223,7 @@
         var containingMethod = request.target.containingNode
             .thisOrAncestorOfType<MethodDeclaration>();
         if (containingMethod != null) {
-          _cachedContainingMemberName = containingMethod.name.name;
+          _cachedContainingMemberName = containingMethod.name2.lexeme;
         }
       }
     }
@@ -325,7 +326,7 @@
   /// referenced using a prefix, then the [prefix] should be provided.
   void suggestClass(ClassElement classElement, {String? prefix}) {
     var relevance = _computeTopLevelRelevance(classElement,
-        elementType: _instantiateClassElement(classElement));
+        elementType: _instantiateInterfaceElement(classElement));
     _addBuilder(
       _createCompletionSuggestionBuilder(
         classElement,
@@ -409,7 +410,7 @@
     // If the class name is already in the text, then we don't support
     // prepending a prefix.
     assert(!hasClassName || prefix == null);
-    var enclosingClass = constructor.enclosingElement2;
+    var enclosingClass = constructor.enclosingElement3;
     var className = enclosingClass.name;
     if (className.isEmpty) {
       return;
@@ -431,7 +432,7 @@
       return;
     }
 
-    var returnType = _instantiateClassElement(enclosingClass);
+    var returnType = _instantiateInterfaceElement(enclosingClass);
     var relevance =
         _computeTopLevelRelevance(constructor, elementType: returnType);
     _addBuilder(
@@ -457,10 +458,10 @@
     } else if (element is ExtensionElement) {
       suggestExtension(element, kind: kind);
     } else if (element is FunctionElement &&
-        element.enclosingElement2 is CompilationUnitElement) {
+        element.enclosingElement3 is CompilationUnitElement) {
       suggestTopLevelFunction(element, kind: kind);
     } else if (element is PropertyAccessorElement &&
-        element.enclosingElement2 is CompilationUnitElement) {
+        element.enclosingElement3 is CompilationUnitElement) {
       suggestTopLevelPropertyAccessor(element);
     } else if (element is TypeAliasElement) {
       suggestTypeAlias(element);
@@ -473,7 +474,7 @@
   /// referenced using a prefix, then the [prefix] should be provided.
   void suggestEnumConstant(FieldElement constant, {String? prefix}) {
     var constantName = constant.name;
-    var enumElement = constant.enclosingElement2;
+    var enumElement = constant.enclosingElement3;
     var enumName = enumElement.name;
     var completion = '$enumName.$constantName';
     var relevance =
@@ -705,7 +706,7 @@
       inheritanceDistance: inheritanceDistance,
     );
 
-    var enclosingElement = method.enclosingElement2;
+    var enclosingElement = method.enclosingElement3;
     if (method.name == 'setState' &&
         enclosingElement is ClassElement &&
         flutter.isExactState(enclosingElement)) {
@@ -777,10 +778,10 @@
 
     // Optionally add Flutter child widget details.
     // todo (pq): revisit this special casing; likely it can be generalized away
-    var element = parameter.enclosingElement2;
+    var element = parameter.enclosingElement3;
     // If appendColon is false, default values should never be appended.
     if (element is ConstructorElement && appendColon) {
-      if (Flutter.instance.isWidget(element.enclosingElement2)) {
+      if (Flutter.instance.isWidget(element.enclosingElement3)) {
         // Don't bother with nullability. It won't affect default list values.
         var defaultValue =
             getDefaultStringParameterValue(parameter, withNullability: false);
@@ -831,12 +832,12 @@
   /// Add a suggestion to replace the [targetId] with an override of the given
   /// [element]. If [invokeSuper] is `true`, then the override will contain an
   /// invocation of an overridden member.
-  Future<void> suggestOverride(SimpleIdentifier targetId,
-      ExecutableElement element, bool invokeSuper) async {
+  Future<void> suggestOverride(
+      Token targetId, ExecutableElement element, bool invokeSuper) async {
     var displayTextBuffer = StringBuffer();
     var builder = ChangeBuilder(session: request.analysisSession);
     await builder.addDartFileEdit(request.path, (builder) {
-      builder.addReplacement(range.node(targetId), (builder) {
+      builder.addReplacement(range.token(targetId), (builder) {
         builder.writeOverride(
           element,
           displayTextBuffer: displayTextBuffer,
@@ -1009,9 +1010,9 @@
   void suggestTopLevelPropertyAccessor(PropertyAccessorElement accessor,
       {String? prefix}) {
     assert(
-        accessor.enclosingElement2 is CompilationUnitElement,
+        accessor.enclosingElement3 is CompilationUnitElement,
         'Enclosing element of ${accessor.runtimeType} is '
-        '${accessor.enclosingElement2.runtimeType}.');
+        '${accessor.enclosingElement3.runtimeType}.');
     if (accessor.isSynthetic) {
       // Avoid visiting a field twice. All fields induce a getter, but only
       // non-final fields induce a setter, so we don't add a suggestion for a
@@ -1061,7 +1062,7 @@
   /// referenced using a prefix, then the [prefix] should be provided.
   void suggestTopLevelVariable(TopLevelVariableElement variable,
       {String? prefix}) {
-    assert(variable.enclosingElement2 is CompilationUnitElement);
+    assert(variable.enclosingElement3 is CompilationUnitElement);
     var relevance =
         _computeTopLevelRelevance(variable, elementType: variable.type);
     _addBuilder(
@@ -1294,7 +1295,7 @@
       withNullability: _isNonNullableByDefault,
     );
 
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
 
     String? declaringType;
     if (enclosingElement is ClassElement) {
@@ -1353,7 +1354,7 @@
   /// The enclosing element must be either a class, or extension; otherwise
   /// we either fail with assertion, or return `null`.
   String? _enclosingClassOrExtensionName(Element element) {
-    var enclosing = element.enclosingElement2;
+    var enclosing = element.enclosingElement3;
     if (enclosing is ClassElement) {
       return enclosing.name;
     } else if (enclosing is ExtensionElement) {
@@ -1417,7 +1418,7 @@
     }
   }
 
-  InterfaceType _instantiateClassElement(ClassElement element) {
+  InterfaceType _instantiateInterfaceElement(InterfaceElement element) {
     var typeParameters = element.typeParameters;
     var typeArguments = const <DartType>[];
     if (typeParameters.isNotEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index 1caf787..be909a3 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -110,7 +110,7 @@
 
   @override
   void declaredClass(ClassDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       // no type
       finished();
     }
@@ -118,7 +118,7 @@
 
   @override
   void declaredClassTypeAlias(ClassTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       // no type
       finished();
     }
@@ -126,7 +126,7 @@
 
   @override
   void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
-    if (varDecl.name.name == targetName) {
+    if (varDecl.name2.lexeme == targetName) {
       // Type provided by the element in computeFull above
       finished();
     }
@@ -134,7 +134,7 @@
 
   @override
   void declaredFunction(FunctionDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var returnType = declaration.returnType;
       if (returnType != null) {
         var type = returnType.type;
@@ -148,7 +148,7 @@
 
   @override
   void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var returnType = declaration.returnType;
       if (returnType != null) {
         var type = returnType.type;
@@ -162,7 +162,7 @@
 
   @override
   void declaredGenericTypeAlias(GenericTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var returnType = declaration.functionType?.returnType;
       if (returnType != null) {
         var type = returnType.type;
@@ -183,17 +183,20 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation? type) {
-    if (name.name == targetName) {
-      var element = name.staticElement as VariableElement;
-      typeFound = element.type;
+  void declaredLocalVar(
+    Token name,
+    TypeAnnotation? type,
+    LocalVariableElement declaredElement,
+  ) {
+    if (name.lexeme == targetName) {
+      typeFound = declaredElement.type;
       finished();
     }
   }
 
   @override
   void declaredMethod(MethodDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var returnType = declaration.returnType;
       if (returnType != null) {
         var type = returnType.type;
@@ -216,7 +219,7 @@
   @override
   void declaredTopLevelVar(
       VariableDeclarationList varList, VariableDeclaration varDecl) {
-    if (varDecl.name.name == targetName) {
+    if (varDecl.name2.lexeme == targetName) {
       // Type provided by the element in computeFull above.
       finished();
     }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
index 52f3e43..bd09b5e 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/variable_name_contributor.dart
@@ -37,8 +37,12 @@
           strName = _getStringName(expression);
         }
       } else if (node is SimpleFormalParameter) {
-        var identifier = _formalParameterTypeIdentifier(node);
-        strName = _getStringName(identifier);
+        var identifier = _formalParameterTypeIdentifier2(node);
+        if (identifier != null) {
+          strName = _getStringName(identifier);
+        } else {
+          strName = node.name?.lexeme;
+        }
       } else if (node is VariableDeclarationList) {
         var identifier = _typeAnnotationIdentifier(node.type);
         strName = _getStringName(identifier);
@@ -57,7 +61,7 @@
           var varDeclarations = varDeclarationList.variables;
           if (varDeclarations.length == 1) {
             var declaration = varDeclarations.first;
-            strName = _getStringName(declaration.name);
+            strName = declaration.name2.lexeme;
           }
         }
       }
@@ -100,13 +104,12 @@
     return id.name;
   }
 
-  static Identifier? _formalParameterTypeIdentifier(FormalParameter node) {
+  static Identifier? _formalParameterTypeIdentifier2(FormalParameter node) {
     if (node is SimpleFormalParameter) {
       var type = node.type;
       if (type != null) {
         return _typeAnnotationIdentifier(type);
       }
-      return node.identifier;
     }
     return null;
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index 47a4e0c..a890ab1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -238,6 +238,8 @@
 
   final AstNode node;
 
+  final Token token;
+
   CorrectionProducerContext._({
     required this.resolvedResult,
     required this.workspace,
@@ -245,6 +247,7 @@
     this.dartFixContext,
     this.diagnostic,
     required this.node,
+    required this.token,
     this.overrideSet,
     this.selectionOffset = -1,
     this.selectionLength = 0,
@@ -271,10 +274,13 @@
     var node = locator.searchWithin(resolvedResult.unit);
     node ??= resolvedResult.unit;
 
+    final token = _tokenAt(node, selectionOffset) ?? node.beginToken;
+
     return CorrectionProducerContext._(
       resolvedResult: resolvedResult,
       workspace: workspace,
       node: node,
+      token: token,
       applyingBulkFixes: applyingBulkFixes,
       dartFixContext: dartFixContext,
       diagnostic: diagnostic,
@@ -283,6 +289,21 @@
       selectionLength: selectionLength,
     );
   }
+
+  static Token? _tokenAt(AstNode node, int offset) {
+    for (final entity in node.childEntities) {
+      if (entity is AstNode) {
+        if (entity.offset <= offset && offset <= entity.end) {
+          return _tokenAt(entity, offset);
+        }
+      } else if (entity is Token) {
+        if (entity.offset <= offset && offset <= entity.end) {
+          return entity;
+        }
+      }
+    }
+    return null;
+  }
 }
 
 abstract class CorrectionProducerWithDiagnostic extends CorrectionProducer {
@@ -437,6 +458,8 @@
 
   AnalysisSessionHelper get sessionHelper => _context.sessionHelper;
 
+  Token get token => _context.token;
+
   TypeProvider get typeProvider => _context.typeProvider;
 
   /// Return the type system appropriate to the library in which the correction
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_call_super.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_call_super.dart
index 8b6fb50..df469d0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_call_super.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_call_super.dart
@@ -48,7 +48,7 @@
     var parameters = methodDeclaration.parameters?.parameters;
     var argumentList = parameters
             ?.map((p) {
-              var name = p.identifier?.name;
+              var name = p.name?.lexeme;
               if (overriddenParameters.contains(name)) {
                 return p.isNamed ? '$name: $name' : name;
               }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
index a6e05f3..f33b3e7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
@@ -116,7 +116,7 @@
 
     final debugFillProperties = classDeclaration.members
         .whereType<MethodDeclaration>()
-        .where((e) => e.name.name == 'debugFillProperties')
+        .where((e) => e.name2.lexeme == 'debugFillProperties')
         .singleOrNull;
     if (debugFillProperties == null) {
       var location = utils.prepareNewMethodLocation(classDeclaration);
@@ -167,10 +167,10 @@
       for (var parameter in parameterList.parameters) {
         if (parameter is SimpleFormalParameter) {
           final type = parameter.type;
-          final identifier = parameter.identifier;
+          final identifier = parameter.name;
           if (type is NamedType && identifier != null) {
             if (type.name.name == 'DiagnosticPropertiesBuilder') {
-              propertiesBuilderName = identifier.name;
+              propertiesBuilderName = identifier.lexeme;
               break;
             }
           }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
index f2ed14c..39919e2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_enum_constant.dart
@@ -64,7 +64,7 @@
     var length = constructors.length;
     if (length > 1) return;
 
-    var name = length == 1 ? constructors.first.name?.name : null;
+    var name = length == 1 ? constructors.first.name2?.lexeme : null;
 
     var offset = targetNode.constants.last.end;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
index 48f22d7..53ef91d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_late.dart
@@ -61,7 +61,7 @@
             getter.isSynthetic &&
             !getter.variable.isSynthetic &&
             getter.variable.setter == null &&
-            getter.enclosingElement2 is ClassElement) {
+            getter.enclosingElement3 is ClassElement) {
           var declarationResult =
               await sessionHelper.getElementDeclaration(getter.variable);
           if (declarationResult == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
index a37027c..4475b82 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_return_type.dart
@@ -6,7 +6,7 @@
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/syntactic_entity.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_system.dart';
@@ -33,27 +33,28 @@
 
   @override
   Future<void> compute(ChangeBuilder builder) async {
-    SyntacticEntity? insertBeforeEntity;
+    Token? insertBeforeEntity;
     FunctionBody? body;
     if (node is SimpleIdentifier) {
       var executable = node.parent;
-      if (executable is MethodDeclaration && executable.name == node) {
+      if (executable is MethodDeclaration && executable.name2 == token) {
         if (executable.returnType != null) {
           return;
         }
         if (executable.isSetter) {
           return;
         }
-        insertBeforeEntity = executable.propertyKeyword ?? executable.name;
+        insertBeforeEntity = executable.propertyKeyword ?? executable.name2;
         body = executable.body;
-      } else if (executable is FunctionDeclaration && executable.name == node) {
+      } else if (executable is FunctionDeclaration &&
+          executable.name2 == token) {
         if (executable.returnType != null) {
           return;
         }
         if (executable.isSetter) {
           return;
         }
-        insertBeforeEntity = executable.propertyKeyword ?? executable.name;
+        insertBeforeEntity = executable.propertyKeyword ?? executable.name2;
         body = executable.functionExpression.body;
       } else {
         return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
index a075f8a..63ff7ce 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_type_annotation.dart
@@ -120,7 +120,7 @@
       return;
     }
     await _applyChange(builder, declaredIdentifier.keyword,
-        declaredIdentifier.identifier.offset, type);
+        declaredIdentifier.name.offset, type);
   }
 
   Future<void> _forSimpleFormalParameter(ChangeBuilder builder,
@@ -150,7 +150,7 @@
     final variables = declarationList.variables;
     final variable = variables[0];
     // Ensure that the selection is not after the name of the variable.
-    if (selectionOffset > variable.name.end) {
+    if (selectionOffset > variable.name2.end) {
       return;
     }
     // Ensure that there is an initializer to get the type from.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index ff8ea9d..b704649 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -8,6 +8,8 @@
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/search/hierarchy.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -82,7 +84,7 @@
     return element.parameters.where((superParam) =>
         superParam.isNamed &&
         !formalParameters
-            .any((param) => superParam.name == param.identifier?.name));
+            .any((param) => superParam.name == param.name?.lexeme));
   }
 
   Future<void> _proposeAnnotation(ChangeBuilder builder) async {
@@ -130,17 +132,14 @@
     }
   }
 
-  Future<void> _proposeClassOrMixinMember(
-      ChangeBuilder builder,
-      SimpleIdentifier node,
-      Expression? target,
-      _ElementPredicate predicate) async {
+  Future<void> _proposeClassOrMixinMember(ChangeBuilder builder, Token node,
+      Expression? target, _ElementPredicate predicate) async {
     var targetIdentifierElement =
         target is Identifier ? target.staticElement : null;
-    var finder = _ClosestElementFinder(node.name, predicate);
+    var finder = _ClosestElementFinder(node.lexeme, predicate);
     // unqualified invocation
     if (target == null) {
-      var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
+      var clazz = this.node.thisOrAncestorOfType<ClassDeclaration>();
       if (clazz != null) {
         var classElement = clazz.declaredElement!;
         _updateFinderWithClassMembers(finder, classElement);
@@ -177,7 +176,7 @@
     var formalParameterList = node.thisOrAncestorOfType<FormalParameterList>();
     if (formalParameterList != null) {
       for (var parameter in formalParameterList.parameters) {
-        var name = parameter.identifier?.name;
+        var name = parameter.name?.lexeme;
         if (name != null) {
           exclusions.add(name);
         }
@@ -185,7 +184,7 @@
     }
 
     var type = node.type?.type;
-    await _proposeClassOrMixinMember(builder, node.identifier, null,
+    await _proposeClassOrMixinMember(builder, node.name, null,
         (Element element) {
       return element is FieldElement &&
           !exclusions.contains(element.name) &&
@@ -245,7 +244,7 @@
       // find getter or setter
       var wantGetter = node.inGetterContext();
       var wantSetter = node.inSetterContext();
-      await _proposeClassOrMixinMember(builder, node, target,
+      await _proposeClassOrMixinMember(builder, node.token, target,
           (Element element) {
         if (element is PropertyAccessorElement) {
           return wantGetter && element.isGetter ||
@@ -263,7 +262,7 @@
     final node = this.node;
     var parent = node.parent;
     if (parent is MethodInvocation && node is SimpleIdentifier) {
-      await _proposeClassOrMixinMember(builder, node, parent.realTarget,
+      await _proposeClassOrMixinMember(builder, node.token, parent.realTarget,
           (Element element) => element is MethodElement && !element.isOperator);
     }
   }
@@ -279,8 +278,7 @@
     var formalParameters = constructorDeclaration.parameters.parameters
         .whereType<DefaultFormalParameter>();
 
-    var finder =
-        _ClosestElementFinder(parent.identifier.name, (Element e) => true);
+    var finder = _ClosestElementFinder(parent.name.lexeme, (Element e) => true);
 
     var superInvocation = constructorDeclaration.initializers.lastOrNull;
 
@@ -312,11 +310,11 @@
   }
 
   Future<void> _suggest(
-      ChangeBuilder builder, AstNode node, String? name) async {
+      ChangeBuilder builder, SyntacticEntity node, String? name) async {
     if (name != null) {
       _proposedName = name;
       await builder.addDartFileEdit(file, (builder) {
-        builder.addSimpleReplacement(range.node(node), _proposedName);
+        builder.addSimpleReplacement(range.entity(node), _proposedName);
       });
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
index 65d4118..c4bb940 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to_static_access.dart
@@ -43,7 +43,7 @@
     }
 
     final target_final = target;
-    var declaringElement = invokedElement.enclosingElement2;
+    var declaringElement = invokedElement.enclosingElement3;
 
     if (declaringElement is ClassElement) {
       _className = declaringElement.name;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
index e774946..fe203e6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
@@ -51,12 +51,8 @@
       // the class.
       return;
     }
-    var node = this.node;
-    if (node is! SimpleIdentifier) {
-      return;
-    }
     var parent = node.parent;
-    if (parent is ClassDeclaration && parent.name == node) {
+    if (parent is ClassDeclaration && parent.name2 == token) {
       var description = _EnumDescription.fromClass(parent);
       if (description != null) {
         await builder.addDartFileEdit(file, (builder) {
@@ -80,7 +76,7 @@
     var constructorElement = node.constructorName.staticElement;
     return constructorElement != null &&
         !constructorElement.isFactory &&
-        constructorElement.enclosingElement2 == classElement;
+        constructorElement.enclosingElement3 == classElement;
   }
 }
 
@@ -309,7 +305,7 @@
       return null;
     }
     var constructor = constructors[0];
-    var name = constructor.name?.name;
+    var name = constructor.name2?.lexeme;
     if (name != null && name != 'new') {
       return null;
     }
@@ -571,7 +567,7 @@
                       initializer.constructorName.staticElement;
                   if (constructorElement != null &&
                       !constructorElement.isFactory &&
-                      constructorElement.enclosingElement2 == classElement) {
+                      constructorElement.enclosingElement3 == classElement) {
                     var fieldValue = fieldElement.computeConstantValue();
                     if (fieldValue != null) {
                       if (fieldList.variables.length != 1) {
@@ -634,7 +630,8 @@
   static bool _validateMethods(ClassDeclaration classDeclaration) {
     for (var member in classDeclaration.members) {
       if (member is MethodDeclaration) {
-        if (member.name.name == '==' || member.name.name == 'hashCode') {
+        final name = member.name2.lexeme;
+        if (name == '==' || name == 'hashCode') {
           return false;
         }
       }
@@ -700,7 +697,7 @@
       this.fieldDeclaration);
 
   /// Return the name of the field.
-  String get name => declaration.name.name;
+  String get name => declaration.name2.lexeme;
 }
 
 /// A representation of all the fields of interest in the class being converted.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
index 2ba17f8..37d5c4d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
@@ -22,7 +22,7 @@
     if (classDeclaration == null) {
       return;
     }
-    if (selectionOffset > classDeclaration.name.end ||
+    if (selectionOffset > classDeclaration.name2.end ||
         selectionEnd < classDeclaration.classKeyword.offset) {
       return;
     }
@@ -61,7 +61,7 @@
               classDeclaration.abstractKeyword ?? classDeclaration.classKeyword,
               classDeclaration.leftBracket), (builder) {
         builder.write('mixin ');
-        builder.write(classDeclaration.name.name);
+        builder.write(classDeclaration.name2.lexeme);
         builder.writeTypeParameters(classElement.typeParameters);
         builder.writeTypes(superclassConstraints, prefix: ' on ');
         builder.writeTypes(interfaces, prefix: ' implements ');
@@ -97,7 +97,7 @@
 
   void _addElement(Element? element) {
     if (element is ExecutableElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ClassElement) {
         referencedClasses.add(enclosingElement);
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart
index 7ee4818..610e19b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_for_each_to_for_loop.dart
@@ -46,7 +46,7 @@
     if (parameter is! NormalFormalParameter) {
       return;
     }
-    var loopVariableName = parameter.identifier?.name;
+    var loopVariableName = parameter.name?.lexeme;
     if (loopVariableName == null) {
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_final_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_final_field.dart
index 2bafd70..27be65f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_final_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_final_field.dart
@@ -46,7 +46,7 @@
       if (element == null) {
         return;
       }
-      var enclosing = element.enclosingElement2;
+      var enclosing = element.enclosingElement3;
       if (enclosing is ClassElement) {
         if (enclosing.getSetter(element.name) != null) {
           return;
@@ -76,7 +76,7 @@
       if (returnType != null) {
         code += ' ${utils.getNodeText(returnType)}';
       }
-      code += ' ${utils.getNodeText(getter.name)}';
+      code += ' ${getter.name2.lexeme}';
       if (expression is! NullLiteral) {
         code += ' = ${utils.getNodeText(expression)}';
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_getter.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_getter.dart
index 6677e5f..9fa75fc 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_getter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_getter.dart
@@ -54,7 +54,7 @@
       code += '${utils.getNodeText(typeAnnotation)} ';
     }
     code += 'get';
-    code += ' ${utils.getNodeText(field.name)}';
+    code += ' ${field.name2.lexeme}';
     code += ' => ${utils.getNodeText(initializer)}';
     code += ';';
     var replacementRange = range.startEnd(finalKeyword, fieldDeclaration);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
index bc4aefd..2a1ab48 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_is_not_empty.dart
@@ -43,7 +43,7 @@
       return;
     }
     // should have "isNotEmpty"
-    var propertyTarget = propertyElement.enclosingElement2;
+    var propertyTarget = propertyElement.enclosingElement3;
     if (propertyTarget == null ||
         getChildren(propertyTarget, 'isNotEmpty').isEmpty) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart
index 85057d8..bb1adf8 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
@@ -41,7 +42,7 @@
     var element = creation.constructorName.staticElement;
     if (element == null ||
         element.name != 'fromIterable' ||
-        element.enclosingElement2 != typeProvider.mapElement) {
+        element.enclosingElement3 != typeProvider.mapElement) {
       return;
     }
     //
@@ -67,9 +68,9 @@
     // necessary.
     //
     var keyParameter = keyClosure.parameter;
-    var keyParameterName = keyClosure.parameterIdentifier.name;
+    var keyParameterName = keyClosure.parameterIdentifier.lexeme;
     var valueParameter = valueClosure.parameter;
-    var valueParameterName = valueClosure.parameterIdentifier.name;
+    var valueParameterName = valueClosure.parameterIdentifier.lexeme;
     var keyExpressionText = utils.getNodeText(keyClosure.body);
     var valueExpressionText = utils.getNodeText(valueClosure.body);
 
@@ -172,7 +173,7 @@
             var parameter = parameters[0];
             if (parameter is SimpleFormalParameter &&
                 parameter.isRequiredPositional) {
-              var parameterIdentifier = parameter.identifier;
+              var parameterIdentifier = parameter.name;
               if (parameterIdentifier != null) {
                 var body = _extractBody(expression);
                 if (body != null) {
@@ -190,7 +191,7 @@
 
 class _Closure {
   final SimpleFormalParameter parameter;
-  final SimpleIdentifier parameterIdentifier;
+  final Token parameterIdentifier;
   final Expression body;
 
   _Closure(this.parameter, this.parameterIdentifier, this.body);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
index 2b3e173..3421dbd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_field_parameter.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/assist.dart';
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/utilities/assist/assist.dart';
@@ -24,7 +25,7 @@
     }
 
     // analyze parameter
-    var parameterName = context.identifier.name;
+    var parameterName = context.identifier.lexeme;
     var parameterElement = context.parameter.declaredElement!;
     var initializers = context.constructor.initializers;
 
@@ -88,7 +89,7 @@
   static _Context? _findParameter(AstNode node) {
     var parent = node.parent;
     if (parent is SimpleFormalParameter) {
-      var identifier = parent.identifier;
+      var identifier = parent.name;
       if (identifier == null) return null;
 
       var formalParameterList = parent.parent;
@@ -111,8 +112,8 @@
       if (parent.expression == node) {
         for (var formalParameter in constructor.parameters.parameters) {
           if (formalParameter is SimpleFormalParameter) {
-            var identifier = formalParameter.identifier;
-            if (identifier != null && identifier.name == node.name) {
+            var identifier = formalParameter.name;
+            if (identifier != null && identifier.lexeme == node.name) {
               return _Context(
                 parameter: formalParameter,
                 identifier: identifier,
@@ -130,7 +131,7 @@
 
 class _Context {
   final SimpleFormalParameter parameter;
-  final SimpleIdentifier identifier;
+  final Token identifier;
   final ConstructorDeclaration constructor;
 
   _Context({
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_generic_function_syntax.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_generic_function_syntax.dart
index 1cc03ee..4727e20 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_generic_function_syntax.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_generic_function_syntax.dart
@@ -76,7 +76,7 @@
     }
 
     var functionName = utils.getRangeText(
-        range.startEnd(node.name, node.typeParameters ?? node.name));
+        range.startEnd(node.name2, node.typeParameters ?? node.name2));
     var parameters = utils.getNodeText(node.parameters);
     String replacement;
     if (returnType == null) {
@@ -102,8 +102,8 @@
     var returnTypeNode = node.returnType;
     var returnType =
         returnTypeNode != null ? '${utils.getNodeText(returnTypeNode)} ' : '';
-    var functionName = utils.getRangeText(range.startEnd(
-        node.identifier, node.typeParameters ?? node.identifier));
+    var functionName = utils.getRangeText(
+        range.startEnd(node.name, node.typeParameters ?? node.name));
     var parameters = utils.getNodeText(node.parameters);
     var question = node.question != null ? '?' : '';
     var replacement =
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
index 17327b7..f95535b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_initializing_formal.dart
@@ -39,7 +39,7 @@
       if (parameter == null) {
         return;
       }
-      var identifier = parameter.identifier;
+      var identifier = parameter.name;
       if (identifier == null) {
         return;
       }
@@ -51,7 +51,7 @@
           builder.addSimpleInsertion(identifier.offset, 'this.');
         } else {
           builder.addSimpleReplacement(
-              range.node(parameter), 'this.${identifier.name}');
+              range.node(parameter), 'this.${identifier.lexeme}');
         }
 
         var statements = block.statements;
@@ -68,7 +68,7 @@
       if (parameter == null) {
         return;
       }
-      var identifier = parameter.identifier;
+      var identifier = parameter.name;
       if (identifier == null) {
         return;
       }
@@ -85,7 +85,7 @@
           builder.addSimpleInsertion(identifier.offset, 'this.');
         } else {
           builder.addSimpleReplacement(
-              range.node(parameter), 'this.${identifier.name}');
+              range.node(parameter), 'this.${identifier.lexeme}');
         }
 
         var initializers = constructor.initializers;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart
index 03a314a..d75f4ee 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_super_parameters.dart
@@ -241,7 +241,7 @@
     }
 
     var parameterNode = parameter.parameter;
-    var identifier = parameterNode.identifier;
+    var identifier = parameterNode.name;
     if (identifier == null) {
       // This condition should never occur, but the test is here to promote the
       // type.
@@ -272,7 +272,7 @@
         var superDefault = superParameter.computeConstantValue();
         var thisDefault = thisParameter.computeConstantValue();
         if (superDefault != null && superDefault == thisDefault) {
-          return range.endEnd(parameter.identifier!, defaultValue);
+          return range.endEnd(parameter.name!, defaultValue);
         }
       }
     }
@@ -410,14 +410,13 @@
       var typeAnnotation = parameter.type;
       if (typeAnnotation != null) {
         return _TypeData(
-            primaryRange:
-                range.startStart(typeAnnotation, parameter.identifier!));
+            primaryRange: range.startStart(typeAnnotation, parameter.name!));
       }
     } else if (parameter is FunctionTypedFormalParameter) {
       var returnType = parameter.returnType;
       return _TypeData(
           primaryRange: returnType != null
-              ? range.startStart(returnType, parameter.identifier)
+              ? range.startStart(returnType, parameter.name)
               : null,
           parameterRange: range.node(parameter.parameters));
     }
@@ -452,7 +451,7 @@
   final _TypeData? typeToDelete;
 
   /// The name.
-  final Identifier name;
+  final Token name;
 
   /// Whether to add a default initializer with `null` value or not.
   final bool nullInitializer;
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 3062776..b6b921c 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
@@ -6,6 +6,7 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
@@ -36,22 +37,23 @@
       if (node is SimpleIdentifier) {
         var parent = node.parent;
         if (parent is ConstructorName) {
-          await _proposeFromConstructorName(builder, node, parent);
+          await _proposeFromConstructorName(builder, node.token, parent);
           return;
         }
       }
       var parent = node.thisOrAncestorOfType<EnumConstantDeclaration>();
       if (parent != null) {
-        await _proposeFromEnumConstantDeclaration(builder, parent.name, parent);
+        await _proposeFromEnumConstantDeclaration(
+            builder, parent.name2, parent);
       }
     }
   }
 
-  Future<void> _proposeFromConstructorName(ChangeBuilder builder,
-      SimpleIdentifier name, ConstructorName constructorName) async {
+  Future<void> _proposeFromConstructorName(ChangeBuilder builder, Token name,
+      ConstructorName constructorName) async {
     InstanceCreationExpression? instanceCreation;
     _constructorName = constructorName.toSource();
-    if (constructorName.name == name) {
+    if (constructorName.name?.token == name) {
       var grandParent = constructorName.parent;
       // Type.name
       if (grandParent is InstanceCreationExpression) {
@@ -101,8 +103,8 @@
         constructorName: name, argumentList: instanceCreation.argumentList);
   }
 
-  Future<void> _proposeFromEnumConstantDeclaration(ChangeBuilder builder,
-      SimpleIdentifier name, EnumConstantDeclaration parent) async {
+  Future<void> _proposeFromEnumConstantDeclaration(
+      ChangeBuilder builder, Token name, EnumConstantDeclaration parent) async {
     var grandParent = parent.parent;
     if (grandParent is! EnumDeclaration) {
       return;
@@ -137,7 +139,7 @@
 
     var arguments = parent.arguments;
     _constructorName =
-        '${targetNode.name}${arguments?.constructorSelector ?? ''}';
+        '${targetNode.name2.lexeme}${arguments?.constructorSelector ?? ''}';
 
     await _write(
       builder,
@@ -145,7 +147,7 @@
       targetElement,
       targetLocation,
       isConst: true,
-      constructorName: arguments?.constructorSelector?.name,
+      constructorName: arguments?.constructorSelector?.name.token,
       argumentList: arguments?.argumentList,
     );
   }
@@ -163,7 +165,7 @@
     }
 
     // prepare target ClassDeclaration
-    var targetElement = constructorElement.enclosingElement2;
+    var targetElement = constructorElement.enclosingElement3;
     var targetResult = await sessionHelper.getElementDeclaration(targetElement);
     if (targetResult == null) {
       return;
@@ -199,10 +201,10 @@
 
   Future<void> _write(
     ChangeBuilder builder,
-    SimpleIdentifier name,
+    Token name,
     ClassElement targetElement,
     InsertionLocation targetLocation, {
-    SimpleIdentifier? constructorName,
+    Token? constructorName,
     bool isConst = false,
     ArgumentList? argumentList,
   }) async {
@@ -213,12 +215,12 @@
         builder.writeConstructorDeclaration(targetElement.name,
             isConst: isConst,
             argumentList: argumentList,
-            constructorName: constructorName,
+            constructorName: constructorName?.lexeme,
             constructorNameGroupName: 'NAME');
         builder.write(targetLocation.suffix);
       });
       if (targetFile == file) {
-        builder.addLinkedPosition(range.node(name), 'NAME');
+        builder.addLinkedPosition(range.token(name), 'NAME');
       }
     });
   }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
index 98d9df5..e750314 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor_for_final_fields.dart
@@ -28,7 +28,7 @@
       return;
     }
 
-    var className = classDeclaration.name.name;
+    var className = classDeclaration.name2.lexeme;
     var superType = classDeclaration.declaredElement?.supertype;
     if (superType == null) {
       return;
@@ -70,7 +70,7 @@
       for (var variableList in variableLists) {
         fieldNames.addAll(variableList.variables
             .where((v) => v.initializer == null)
-            .map((v) => v.name.name));
+            .map((v) => v.name2.lexeme));
       }
 
       await builder.addDartFileEdit(file, (builder) {
@@ -143,7 +143,7 @@
     for (var variableList in variableLists) {
       var fieldNames = variableList.variables
           .where((v) => v.initializer == null)
-          .map((v) => v.name.name);
+          .map((v) => v.name2.lexeme);
 
       for (var fieldName in fieldNames) {
         if (fieldName == 'child' || fieldName == 'children') {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
index 7d54c79..4da661d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
@@ -37,8 +37,7 @@
       return;
     }
 
-    var nameNode = parameter.identifier;
-    _fieldName = nameNode.name;
+    _fieldName = parameter.name.lexeme;
 
     var targetLocation = utils.prepareNewFieldLocation(targetClassNode);
     if (targetLocation == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
index a77eb43..80d31df 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method.dart
@@ -68,7 +68,7 @@
       final classElement = classDecl.declaredElement!;
 
       var missingEquals = memberDecl is FieldDeclaration ||
-          (memberDecl as MethodDeclaration).name.name == 'hashCode';
+          (memberDecl as MethodDeclaration).name2.lexeme == 'hashCode';
       ExecutableElement? element;
       if (missingEquals) {
         _memberName = '==';
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart b/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
index 9c8ca83..0512f36 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/data_driven.dart
@@ -34,7 +34,7 @@
         importedUris.add(uri.relativeUri);
       }
     }
-    var matchers = ElementMatcher.matchersForNode(node);
+    var matchers = ElementMatcher.matchersForNode(node, token);
     if (matchers.isEmpty) {
       // The node doesn't represent any element that can be transformed.
       return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
index b9c9d5c..2c74063 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/encapsulate_field.dart
@@ -40,15 +40,15 @@
       return;
     }
     var field = fields.first;
-    var nameNode = field.name;
+    var nameToken = field.name2;
     var fieldElement = field.declaredElement as FieldElement;
     // should have a public name
-    var name = nameNode.name;
+    var name = nameToken.lexeme;
     if (Identifier.isPrivateName(name)) {
       return;
     }
     // should be on the name
-    if (nameNode != node) {
+    if (nameToken != token) {
       return;
     }
 
@@ -60,17 +60,17 @@
 
     await builder.addDartFileEdit(file, (builder) {
       // rename field
-      builder.addSimpleReplacement(range.node(nameNode), '_$name');
+      builder.addSimpleReplacement(range.token(nameToken), '_$name');
       // update references in constructors
       for (var member in classDeclaration.members) {
         if (member is ConstructorDeclaration) {
           for (var parameter in member.parameters.parameters) {
-            var identifier = parameter.identifier;
+            var identifier = parameter.name;
             var parameterElement = parameter.declaredElement;
             if (identifier != null &&
                 parameterElement is FieldFormalParameterElement &&
                 parameterElement.field == fieldElement) {
-              builder.addSimpleReplacement(range.node(identifier), '_$name');
+              builder.addSimpleReplacement(range.token(identifier), '_$name');
             }
           }
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
index ee1735a..74eaf76 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/extend_class_for_mixin.dart
@@ -34,7 +34,7 @@
       _typeName = message.substring(startIndex, endIndex);
       await builder.addDartFileEdit(file, (builder) {
         builder.addSimpleInsertion(
-            declaration.typeParameters?.end ?? declaration.name.end,
+            declaration.typeParameters?.end ?? declaration.name2.end,
             ' extends $_typeName');
       });
     }
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 15517dc..bfca7e7 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
@@ -146,7 +146,7 @@
               builder.writeln('  @override');
               builder.write('  ');
               builder.writeReference(stateClass);
-              builder.write('<${widgetClass.name}$typeParams>');
+              builder.write('<${widgetClass.name2.lexeme}$typeParams>');
               builder.writeln(' createState() => $stateName$typeParams();');
               if (hasEmptyLineAfterCreateState) {
                 builder.writeln();
@@ -205,7 +205,7 @@
         builder.writeReference(stateClass);
 
         // Write just param names (and not bounds, metadata and docs).
-        builder.write('<${widgetClass.name}');
+        builder.write('<${widgetClass.name2.lexeme}');
         if (typeParameters != null) {
           builder.write('<');
           var first = true;
@@ -214,7 +214,7 @@
               builder.write(', ');
               first = false;
             }
-            builder.write(param.name.name);
+            builder.write(param.name2.lexeme);
           }
           builder.write('>');
         }
@@ -247,7 +247,7 @@
 
   MethodDeclaration? _findBuildMethod(ClassDeclaration widgetClass) {
     for (var member in widgetClass.members) {
-      if (member is MethodDeclaration && member.name.name == 'build') {
+      if (member is MethodDeclaration && member.name2.lexeme == 'build') {
         var parameters = member.parameters;
         if (parameters != null && parameters.parameters.length == 1) {
           return member;
@@ -309,7 +309,7 @@
     }
     var element = node.staticElement;
     if (element is ExecutableElement &&
-        element.enclosingElement2 == widgetClassElement &&
+        element.enclosingElement3 == widgetClassElement &&
         !elementsToMove.contains(element)) {
       var offset = node.offset - linesRange.offset;
       var qualifier =
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
index dcbc524..0280d715 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
@@ -48,7 +48,7 @@
     var stateClassElement = stateClass?.declaredElement;
     if (stateClass == null ||
         stateClassElement == null ||
-        !Identifier.isPrivateName(stateClass.name.name) ||
+        !Identifier.isPrivateName(stateClass.name2.lexeme) ||
         !_isSameTypeParameters(widgetClass, stateClass)) {
       return;
     }
@@ -170,7 +170,7 @@
 
   MethodDeclaration? _findCreateStateMethod(ClassDeclaration widgetClass) {
     for (var member in widgetClass.members) {
-      if (member is MethodDeclaration && member.name.name == 'createState') {
+      if (member is MethodDeclaration && member.name2.lexeme == 'createState') {
         var parameters = member.parameters;
         if (parameters?.parameters.isEmpty ?? false) {
           return member;
@@ -214,7 +214,7 @@
     outer:
     for (var stateParam in stateParams) {
       for (var widgetParam in widgetParams) {
-        if (stateParam.name.name == widgetParam.name.name &&
+        if (stateParam.name2.lexeme == widgetParam.name2.lexeme &&
             stateParam.bound?.type == widgetParam.bound?.type) {
           continue outer;
         }
@@ -242,7 +242,7 @@
       }
       if (expression is MethodInvocation &&
           expression.target is SuperExpression &&
-          methodDeclaration!.name.name == expression.methodName.name) {
+          methodDeclaration!.name2.lexeme == expression.methodName.name) {
         return true;
       }
     }
@@ -315,7 +315,7 @@
     }
     var element = node.staticElement;
     if (element is ExecutableElement &&
-        element.enclosingElement2 == widgetClassElement &&
+        element.enclosingElement3 == widgetClassElement &&
         !elementsToMove.contains(element)) {
       var parent = node.parent;
       if (parent is PrefixedIdentifier) {
@@ -358,7 +358,7 @@
   void visitMethodInvocation(MethodInvocation node) {
     var methodElement = node.methodName.staticElement?.declaration;
     if (methodElement is ClassMemberElement) {
-      var classElement = methodElement.enclosingElement2;
+      var classElement = methodElement.enclosingElement3;
       if (classElement is ClassElement &&
           Flutter.instance.isExactState(classElement) &&
           !FlutterConvertToStatelessWidget._isDefaultOverride(
@@ -388,7 +388,7 @@
     var classDeclaration =
         methodDeclaration?.thisOrAncestorOfType<ClassDeclaration>();
 
-    if (methodDeclaration?.name.name != 'createState' ||
+    if (methodDeclaration?.name2.lexeme != 'createState' ||
         classDeclaration?.declaredElement != widgetClassElement) {
       used = true;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart b/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
index 2c5328d..3cd39a5 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/inline_typedef.dart
@@ -44,7 +44,7 @@
     List<FormalParameter> parameters;
     if (parent is FunctionTypeAlias) {
       returnType = parent.returnType;
-      _name = parent.name.name;
+      _name = parent.name2.lexeme;
       typeParameters = parent.typeParameters;
       parameters = parent.parameters.parameters;
     } else if (parent is GenericTypeAlias) {
@@ -56,7 +56,7 @@
         return;
       }
       returnType = functionType.returnType;
-      _name = parent.name.name;
+      _name = parent.name2.lexeme;
       typeParameters = functionType.typeParameters;
       parameters = functionType.parameters.parameters;
     } else {
@@ -128,10 +128,10 @@
               builder.write(utils.getNodeText(typeAnnotation));
             }
             if (parameter.isNamed) {
-              var identifier = parameter.identifier;
+              var identifier = parameter.name;
               if (identifier != null) {
                 builder.write(' ');
-                builder.write(identifier.name);
+                builder.write(identifier.lexeme);
               }
             }
           }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
index 54a8773..f85fb95 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/join_variable_declaration.dart
@@ -148,7 +148,7 @@
 
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleReplacement(
-        range.endStart(declaredVariable.name, assignment.operator),
+        range.endStart(declaredVariable.name2, assignment.operator),
         ' ',
       );
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
index d667d2f..826fb84 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_class_abstract.dart
@@ -23,7 +23,7 @@
     if (enclosingClass == null) {
       return;
     }
-    _className = enclosingClass.name.name;
+    _className = enclosingClass.name2.lexeme;
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleInsertion(
           enclosingClass.classKeyword.offset, 'abstract ');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
index 71b2377..3a9a404 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_not_final.dart
@@ -45,7 +45,7 @@
     }
 
     // It must be a field declaration.
-    if (getter.enclosingElement2 is! ClassElement) {
+    if (getter.enclosingElement3 is! ClassElement) {
       return;
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
index f492510..c11ace4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_field_public.dart
@@ -28,7 +28,9 @@
     var getterName = node.name;
     _fieldName = '_$getterName';
     var parent = node.parent;
-    if (parent is MethodDeclaration && parent.name == node && parent.isGetter) {
+    if (parent is MethodDeclaration &&
+        parent.name2 == token &&
+        parent.isGetter) {
       var container = parent.parent;
       if (container is ClassOrMixinDeclaration) {
         var members = container.members;
@@ -36,12 +38,12 @@
         VariableDeclaration? field;
         for (var member in members) {
           if (member is MethodDeclaration &&
-              member.name.name == getterName &&
+              member.name2.lexeme == getterName &&
               member.isSetter) {
             setter = member;
           } else if (member is FieldDeclaration) {
             for (var variable in member.fields.variables) {
-              if (variable.name.name == _fieldName) {
+              if (variable.name2.lexeme == _fieldName) {
                 field = variable;
               }
             }
@@ -51,7 +53,7 @@
           return;
         }
         await builder.addDartFileEdit(file, (builder) {
-          builder.addSimpleReplacement(range.node(field!.name), getterName);
+          builder.addSimpleReplacement(range.token(field!.name2), getterName);
           builder.removeMember(members, parent);
           builder.removeMember(members, setter!);
         });
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
index d95deb7..c3dbb10 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_final.dart
@@ -62,7 +62,7 @@
             builder.addSimpleInsertion(type.offset, 'final ');
             return;
           }
-          final identifier = simpleNode.identifier;
+          final identifier = simpleNode.name;
           if (identifier != null) {
             builder.addSimpleInsertion(identifier.offset, 'final ');
           } else {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
index e624cab..6c2b0d2 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/make_variable_nullable.dart
@@ -118,7 +118,7 @@
       if (parameter.question != null) {
         return;
       }
-      _variableName = parameter.identifier.name;
+      _variableName = parameter.name.lexeme;
       await builder.addDartFileEdit(file, (builder) {
         // Add '?' after `)`.
         builder.addSimpleInsertion(parameter.endToken.end, '?');
@@ -128,7 +128,7 @@
       if (type == null || !_typeCanBeMadeNullable(type)) {
         return;
       }
-      _variableName = parameter.identifier.name;
+      _variableName = parameter.name.lexeme;
       await builder.addDartFileEdit(file, (builder) {
         builder.addSimpleInsertion(type.end, '?');
       });
@@ -141,7 +141,7 @@
     if (parameter.question != null) {
       return;
     }
-    _variableName = parameter.identifier.name;
+    _variableName = parameter.name.lexeme;
     await builder.addDartFileEdit(file, (builder) {
       // Add '?' after `)`.
       builder.addSimpleInsertion(parameter.endToken.end, '?');
@@ -155,12 +155,12 @@
       return;
     }
 
-    var identifier = parameter.identifier;
+    var identifier = parameter.name;
     if (identifier == null) {
       return;
     }
 
-    _variableName = identifier.name;
+    _variableName = identifier.lexeme;
     await builder.addDartFileEdit(file, (builder) {
       builder.addSimpleInsertion(type.end, '?');
     });
@@ -174,7 +174,7 @@
       if (parameter.question != null) {
         return;
       }
-      _variableName = parameter.identifier.name;
+      _variableName = parameter.name.lexeme;
       await builder.addDartFileEdit(file, (builder) {
         // Add '?' after `)`.
         builder.addSimpleInsertion(parameter.endToken.end, '?');
@@ -184,7 +184,7 @@
       if (type == null || !_typeCanBeMadeNullable(type)) {
         return;
       }
-      _variableName = parameter.identifier.name;
+      _variableName = parameter.name.lexeme;
       await builder.addDartFileEdit(file, (builder) {
         builder.addSimpleInsertion(type.end, '?');
       });
@@ -226,7 +226,7 @@
   Future<void> _updateVariableType(ChangeBuilder builder,
       VariableDeclarationList declarationList, DartType newType) async {
     var variable = declarationList.variables[0];
-    _variableName = variable.name.name;
+    _variableName = variable.name2.lexeme;
     await builder.addDartFileEdit(file, (builder) {
       var keyword = declarationList.keyword;
       if (keyword != null && keyword.type == Keyword.VAR) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/qualify_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/qualify_reference.dart
index 8b178ef..21b7a43 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/qualify_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/qualify_reference.dart
@@ -40,7 +40,7 @@
       return;
     }
 
-    var enclosingElement = memberElement.enclosingElement2;
+    var enclosingElement = memberElement.enclosingElement3;
     if (enclosingElement == null ||
         enclosingElement.library != libraryElement) {
       // TODO(brianwilkerson) Support qualifying references to members defined
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart
index 0a44117..d203609 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart
@@ -38,7 +38,7 @@
     var parameter = node.thisOrAncestorOfType<DefaultFormalParameter>();
     if (parameter != null) {
       // Handle formal parameters with default values.
-      var identifier = parameter.identifier;
+      var identifier = parameter.name;
       var defaultValue = parameter.defaultValue;
       if (identifier != null && defaultValue != null) {
         await builder.addDartFileEdit(file, (builder) {
@@ -54,7 +54,7 @@
       if (variable != null && initializer != null) {
         await builder.addDartFileEdit(file, (builder) {
           builder.addDeletion(
-            range.endEnd(variable.name, initializer),
+            range.endEnd(variable.name2, initializer),
           );
         });
       } else {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
index 69409b5..a239ba6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_parameters_in_getter_declaration.dart
@@ -20,7 +20,7 @@
     final node = this.node;
     if (node is MethodDeclaration) {
       // Support for the analyzer error.
-      var name = node.name;
+      var name = node.name2;
       var body = node.body;
       await builder.addDartFileEdit(file, (builder) {
         builder.addSimpleReplacement(range.endStart(name, body), ' ');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_type_annotation.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_type_annotation.dart
index 853558be..fb8a5fa 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_type_annotation.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_type_annotation.dart
@@ -55,12 +55,12 @@
     }
     // ignore if an incomplete variable declaration
     if (declarationList.variables.length == 1 &&
-        declarationList.variables[0].name.isSynthetic) {
+        declarationList.variables[0].name2.isSynthetic) {
       return;
     }
     // must be not after the name of the variable
     var firstVariable = declarationList.variables[0];
-    if (selectionOffset > firstVariable.name.end) {
+    if (selectionOffset > firstVariable.name2.end) {
       return;
     }
 
@@ -127,7 +127,7 @@
       return;
     }
     var keyword = declaration.keyword;
-    var variableName = declaration.identifier;
+    var variableName = declaration.name;
     await builder.addDartFileEdit(file, (builder) {
       var typeRange = range.startStart(typeNode, variableName);
       if (keyword != null && keyword.lexeme != 'var') {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
index 3bec4f2..9a5aa0e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_unused_local_variable.dart
@@ -27,7 +27,7 @@
   @override
   Future<void> compute(ChangeBuilder builder) async {
     final declaration = node.parent;
-    if (!(declaration is VariableDeclaration && declaration.name == node)) {
+    if (!(declaration is VariableDeclaration && declaration.name2 == token)) {
       return;
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart b/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
index 8a84fe8..7ba42b8 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/rename_method_parameter.dart
@@ -25,7 +25,7 @@
   Future<void> compute(ChangeBuilder builder) async {
     final parameter = node.parent;
     if (parameter is! FormalParameter) return;
-    var paramIdentifier = parameter.identifier;
+    var paramIdentifier = parameter.name;
     if (paramIdentifier == null) return;
 
     var method = parameter.thisOrAncestorOfType<MethodDeclaration>();
@@ -38,12 +38,12 @@
     if (classElement is! ClassElement) return;
 
     var parentMethod = classElement.lookUpInheritedMethod(
-        method.name.name, classElement.library);
+        method.name2.lexeme, classElement.library);
     if (parentMethod == null) return;
 
     var parameters = methodParameters.parameters;
     var parentParameters = parentMethod.parameters;
-    var oldName = paramIdentifier.name;
+    var oldName = paramIdentifier.lexeme;
 
     var i = parameters.indexOf(parameter);
     if (0 <= i && i < parentParameters.length) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_conditional_with_if_else.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_conditional_with_if_else.dart
index c752866..fdc7163 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_conditional_with_if_else.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_conditional_with_if_else.dart
@@ -114,17 +114,17 @@
                 builder.writeType(type);
               });
             } else {
-              builder.addInsertion(variable.name.offset, (builder) {
+              builder.addInsertion(variable.name2.offset, (builder) {
                 builder.writeType(type);
                 builder.write(' ');
               });
             }
           }
-          builder.addDeletion(range.endEnd(variable.name, conditional));
+          builder.addDeletion(range.endEnd(variable.name2, conditional));
           var conditionSrc = utils.getNodeText(conditional.condition);
           var thenSrc = utils.getNodeText(conditional.thenExpression);
           var elseSrc = utils.getNodeText(conditional.elseExpression);
-          var name = variable.name.name;
+          var name = variable.name2.lexeme;
           var src = eol;
           src += '${prefix}if ($conditionSrc) {$eol';
           src += '$prefix$indent$name = $thenSrc;$eol';
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_identifier.dart b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_identifier.dart
index 461563b..1485806 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/replace_with_identifier.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/replace_with_identifier.dart
@@ -28,8 +28,8 @@
         node.thisOrAncestorOfType<FunctionTypedFormalParameter>();
     if (functionTyped != null) {
       await builder.addDartFileEdit(file, (builder) {
-        builder.addSimpleReplacement(range.node(functionTyped),
-            utils.getNodeText(functionTyped.identifier));
+        builder.addSimpleReplacement(
+            range.node(functionTyped), functionTyped.name.lexeme);
       });
     }
   }
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 3c5a55b..abb1a10 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
@@ -110,7 +110,7 @@
       }
       await builder.addDartFileEdit(file, (builder) {
         if (parent.isConst || parent.isFinal) {
-          builder.addDeletion(range.startStart(type, parent.identifier));
+          builder.addDeletion(range.startStart(type, parent.name));
         } else {
           builder.addSimpleReplacement(range.node(type), 'var');
         }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
index f18ab8c..5ed846e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/shadow_field.dart
@@ -28,7 +28,7 @@
       return;
     }
 
-    if (!accessor.isGetter || accessor.enclosingElement2 is! ClassElement) {
+    if (!accessor.isGetter || accessor.enclosingElement3 is! ClassElement) {
       // TODO(brianwilkerson) Should we also require that the getter be synthetic?
       return;
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart b/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart
index 46b54ee..a55adde 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/sort_unnamed_constructor_first.dart
@@ -32,11 +32,11 @@
             .firstWhereOrNull((child) => child is ConstructorDeclaration)
         as ConstructorDeclaration?;
     if (firstConstructor == null ||
-        firstConstructor.name == null ||
-        firstConstructor.name?.name == 'new') return;
+        firstConstructor.name2 == null ||
+        firstConstructor.name2?.lexeme == 'new') return;
 
     final unnamedConstructor = clazz.childEntities.firstWhereOrNull(
-            (child) => child is ConstructorDeclaration && child.name == null)
+            (child) => child is ConstructorDeclaration && child.name2 == null)
         as ConstructorDeclaration?;
     if (unnamedConstructor == null) return;
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
index 98ddb5b..0eff5c6 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/split_variable_declaration.dart
@@ -41,7 +41,7 @@
 
     // The caret must be between the type and the variable name.
     var variable = variables[0];
-    if (!range.startEnd(statement, variable.name).contains(selectionOffset)) {
+    if (!range.startEnd(statement, variable.name2).contains(selectionOffset)) {
       return;
     }
 
@@ -64,8 +64,8 @@
       }
 
       var indent = utils.getNodePrefix(statement);
-      var name = variable.name.name;
-      builder.addSimpleInsertion(variable.name.end, ';$eol$indent$name');
+      var name = variable.name2.lexeme;
+      builder.addSimpleInsertion(variable.name2.end, ';$eol$indent$name');
     });
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
index 1180800..135155a 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
@@ -87,7 +87,7 @@
       if (_isInvalidIndex(typeParameters?.typeParameters)) {
         return null;
       }
-      return _TypeParameterData(typeParameters, parent.name.end);
+      return _TypeParameterData(typeParameters, parent.name2.end);
     } else if (node is TypeArgumentList && parent is ExtensionOverride) {
       // wrong_number_of_type_arguments_extension
       if (!argumentValue.validate(context)) {
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 b606c9f..f430cad 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
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/element_kind.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart'
     show ClassElement, ExtensionElement, PrefixElement;
 import 'package:analyzer/dart/element/type.dart';
@@ -97,7 +98,7 @@
   /// Return a list of element matchers that will match the element that is, or
   /// should be, associated with the given [node]. The list will be empty if
   /// there are no appropriate matchers for the [node].
-  static List<ElementMatcher> matchersForNode(AstNode? node) {
+  static List<ElementMatcher> matchersForNode(AstNode? node, Token? nameToken) {
     if (node == null) {
       return const <ElementMatcher>[];
     }
@@ -106,7 +107,7 @@
       return const <ElementMatcher>[];
     }
     var builder = _MatcherBuilder(importedUris);
-    builder.buildMatchersForNode(node);
+    builder.buildMatchersForNode(node, nameToken);
     return builder.matchers.toList();
   }
 
@@ -143,7 +144,7 @@
 
   _MatcherBuilder(this.importedUris);
 
-  void buildMatchersForNode(AstNode? node) {
+  void buildMatchersForNode(AstNode? node, Token? nameToken) {
     if (node is ArgumentList) {
       _buildFromArgumentList(node);
     } else if (node is BinaryExpression) {
@@ -159,8 +160,8 @@
       _buildFromNamedType(node);
     } else if (node is PrefixedIdentifier) {
       _buildFromPrefixedIdentifier(node);
-    } else if (node is SimpleIdentifier) {
-      _buildFromSimpleIdentifier(node);
+    } else if (node is SimpleIdentifier && nameToken != null) {
+      _buildFromSimpleIdentifier(node, nameToken);
     } else if (node is TypeArgumentList) {
       _buildFromTypeArgumentList(node);
     }
@@ -201,7 +202,7 @@
         );
       }
     } else if (parent is SuperConstructorInvocation) {
-      var superclassName = parent.staticElement?.enclosingElement2.name;
+      var superclassName = parent.staticElement?.enclosingElement3.name;
       if (superclassName != null) {
         _addMatcher(
           components: [parent.constructorName?.name ?? '', superclassName],
@@ -257,7 +258,7 @@
   /// Build a matcher for the method being declared.
   void _buildFromMethodDeclaration(MethodDeclaration node) {
     _addMatcher(
-      components: [node.name.name],
+      components: [node.name2.lexeme],
       kinds: [ElementKind.methodKind],
     );
   }
@@ -447,7 +448,7 @@
   }
 
   /// Build a matcher for the element referenced by the identifier.
-  void _buildFromSimpleIdentifier(SimpleIdentifier node) {
+  void _buildFromSimpleIdentifier(SimpleIdentifier node, Token nameToken) {
     // TODO(brianwilkerson) Use the static element, if there is one, in order to
     //  get a more exact matcher.
     var parent = node.parent;
@@ -458,7 +459,7 @@
       _buildFromArgumentList(parent.parent!.parent as ArgumentList);
     } else if (parent is NamedType) {
       _buildFromNamedType(parent);
-    } else if (parent is MethodDeclaration && node == parent.name) {
+    } else if (parent is MethodDeclaration && nameToken == parent.name2) {
       _buildFromMethodDeclaration(parent);
     } else if (parent is MethodInvocation &&
         node == parent.methodName &&
@@ -502,7 +503,7 @@
       }
     }
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ClassElement) {
         return [identifier.name, enclosingElement.name];
       } else if (enclosingElement is ExtensionElement) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
index 2493049..568dd96 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/rename_parameter.dart
@@ -38,9 +38,9 @@
         if (overriddenParameter == null) {
           // If the overridden parameter has already been removed, then just
           // rename the old parameter to have the new name.
-          var identifier = parameter.identifier;
+          var identifier = parameter.name;
           if (identifier != null) {
-            builder.addSimpleReplacement(range.node(identifier), newName);
+            builder.addSimpleReplacement(range.token(identifier), newName);
           }
         } else {
           // If the overridden parameter still exists, then mark it as
@@ -122,7 +122,7 @@
   ExecutableElement? overriddenElement() {
     var element = declaredElement;
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ClassElement) {
         var name = Name(enclosingElement.library.source.uri, element.name);
         return InheritanceManager3().getInherited2(enclosingElement, name);
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 93de681..63b84f6 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -34,7 +34,7 @@
     // If we're in a build() method, use 'build' as the name prefix.
     var method = assignedExpression?.thisOrAncestorOfType<MethodDeclaration>();
     if (method != null) {
-      var enclosingName = method.name.name;
+      var enclosingName = method.name2.lexeme;
       if (enclosingName.startsWith('build')) {
         prefix = 'build';
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/namespace.dart b/pkg/analysis_server/lib/src/services/correction/namespace.dart
index 5f85fc8..a2abded 100644
--- a/pkg/analysis_server/lib/src/services/correction/namespace.dart
+++ b/pkg/analysis_server/lib/src/services/correction/namespace.dart
@@ -42,7 +42,7 @@
     String prefix,
     Element element,
     Map<LibraryImportElement, Set<Element>> importElementsMap) {
-  if (element.enclosingElement2 is! CompilationUnitElement) {
+  if (element.enclosingElement3 is! CompilationUnitElement) {
     return null;
   }
   var usedLibrary = element.library;
diff --git a/pkg/analysis_server/lib/src/services/correction/sort_members.dart b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
index 4c8bed4..e871b08 100644
--- a/pkg/analysis_server/lib/src/services/correction/sort_members.dart
+++ b/pkg/analysis_server/lib/src/services/correction/sort_members.dart
@@ -112,19 +112,14 @@
       String name;
       if (member is ConstructorDeclaration) {
         kind = _MemberKind.CLASS_CONSTRUCTOR;
-        var nameNode = member.name;
-        if (nameNode == null) {
-          name = '';
-        } else {
-          name = nameNode.name;
-        }
+        name = member.name2?.lexeme ?? '';
       } else if (member is FieldDeclaration) {
         var fieldDeclaration = member;
         List<VariableDeclaration> fields = fieldDeclaration.fields.variables;
         if (fields.isNotEmpty) {
           kind = _MemberKind.CLASS_FIELD;
           isStatic = fieldDeclaration.isStatic;
-          name = fields[0].name.name;
+          name = fields[0].name2.lexeme;
         } else {
           // Don't sort members if there are errors in the code.
           return;
@@ -132,7 +127,7 @@
       } else if (member is MethodDeclaration) {
         var method = member;
         isStatic = method.isStatic;
-        name = method.name.name;
+        name = method.name2.lexeme;
         if (method.isGetter) {
           kind = _MemberKind.CLASS_ACCESSOR;
           name += ' getter';
@@ -172,23 +167,22 @@
       String name;
       if (member is ClassOrMixinDeclaration) {
         kind = _MemberKind.UNIT_CLASS;
-        name = member.name.name;
+        name = member.name2.lexeme;
       } else if (member is ClassTypeAlias) {
         kind = _MemberKind.UNIT_CLASS;
-        name = member.name.name;
+        name = member.name2.lexeme;
       } else if (member is EnumDeclaration) {
         kind = _MemberKind.UNIT_CLASS;
-        name = member.name.name;
+        name = member.name2.lexeme;
       } else if (member is ExtensionDeclaration) {
         kind = _MemberKind.UNIT_EXTENSION;
-        name = member.name?.name ?? '';
+        name = member.name2?.lexeme ?? '';
       } else if (member is FunctionDeclaration) {
-        var function = member;
-        name = function.name.name;
-        if (function.isGetter) {
+        name = member.name2.lexeme;
+        if (member.isGetter) {
           kind = _MemberKind.UNIT_ACCESSOR;
           name += ' getter';
-        } else if (function.isSetter) {
+        } else if (member.isSetter) {
           kind = _MemberKind.UNIT_ACCESSOR;
           name += ' setter';
         } else {
@@ -200,10 +194,10 @@
         }
       } else if (member is FunctionTypeAlias) {
         kind = _MemberKind.UNIT_FUNCTION_TYPE;
-        name = member.name.name;
+        name = member.name2.lexeme;
       } else if (member is GenericTypeAlias) {
         kind = _MemberKind.UNIT_GENERIC_TYPE_ALIAS;
-        name = member.name.name;
+        name = member.name2.lexeme;
       } else if (member is TopLevelVariableDeclaration) {
         var variableDeclaration = member;
         List<VariableDeclaration> variables =
@@ -214,7 +208,7 @@
           } else {
             kind = _MemberKind.UNIT_VARIABLE;
           }
-          name = variables[0].name.name;
+          name = variables[0].name2.lexeme;
         } else {
           // Don't sort members if there are errors in the code.
           return;
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 8fc4dc7..05db61d 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -219,7 +219,7 @@
 String getElementQualifiedName(Element element) {
   var kind = element.kind;
   if (kind == ElementKind.FIELD || kind == ElementKind.METHOD) {
-    return '${element.enclosingElement2!.displayName}.${element.displayName}';
+    return '${element.enclosingElement3!.displayName}.${element.displayName}';
   } else if (kind == ElementKind.LIBRARY) {
     // Libraries may not have names, so use a path relative to the context root.
     final session = element.session!;
@@ -476,7 +476,7 @@
     return true;
   }
   return node.parent is VariableDeclaration &&
-      (node.parent as VariableDeclaration).name == node;
+      (node.parent as VariableDeclaration).name2 == node.token;
 }
 
 /// Return `true` if the given [node] is the name of a [NamedExpression].
@@ -1379,7 +1379,7 @@
   /// Checks if [element] is visible in [targetExecutableElement] or
   /// [targetClassElement].
   bool _isTypeParameterVisible(TypeParameterElement element) {
-    var enclosing = element.enclosingElement2;
+    var enclosing = element.enclosingElement3;
     return identical(enclosing, targetExecutableElement) ||
         identical(enclosing, targetClassElement);
   }
diff --git a/pkg/analysis_server/lib/src/services/flutter/property.dart b/pkg/analysis_server/lib/src/services/flutter/property.dart
index 4f3d763..31bda1e 100644
--- a/pkg/analysis_server/lib/src/services/flutter/property.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/property.dart
@@ -463,7 +463,7 @@
       var constructor = propertyExpression.constructorName.staticElement;
       if (flutter != null &&
           constructor != null &&
-          constructor.enclosingElement2 == classEdgeInsets) {
+          constructor.enclosingElement3 == classEdgeInsets) {
         var arguments = propertyExpression.argumentList.arguments;
         var constructorName = constructor.name;
         if (constructorName == 'all') {
diff --git a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
index 0a1c223..7e79982 100644
--- a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
@@ -122,7 +122,7 @@
 
   /// The set of classes for which we are currently adding properties,
   /// used to prevent infinite recursion.
-  final Set<ClassElement> classesBeingProcessed = <ClassElement>{};
+  final Set<InterfaceElement> elementsBeingProcessed = {};
 
   /// The resolved unit with the widget [InstanceCreationExpression].
   final ResolvedUnitResult resolvedUnit;
@@ -278,8 +278,8 @@
     constructorElement ??= classDescription?.constructor;
     if (constructorElement == null) return;
 
-    var classElement = constructorElement.enclosingElement2;
-    if (!classesBeingProcessed.add(classElement)) return;
+    var classElement = constructorElement.enclosingElement3;
+    if (!elementsBeingProcessed.add(classElement)) return;
 
     var existingNamed = <String>{};
     if (instanceCreation != null) {
@@ -320,7 +320,7 @@
       );
     }
 
-    classesBeingProcessed.remove(classElement);
+    elementsBeingProcessed.remove(classElement);
   }
 
   void _addProperty({
@@ -520,7 +520,7 @@
   }
 
   protocol.FlutterWidgetPropertyValueEnumItem _toEnumItem(FieldElement field) {
-    var classElement = field.enclosingElement2 as ClassElement;
+    var classElement = field.enclosingElement3 as ClassElement;
     var libraryUriStr = '${classElement.library.source.uri}';
     var documentation = getFieldDocumentation(field);
 
@@ -546,7 +546,7 @@
       if (element is PropertyAccessorElement && element.isGetter) {
         var field = element.variable;
         if (field is FieldElement && field.isStatic) {
-          var enclosingClass = field.enclosingElement2 as ClassElement;
+          var enclosingClass = field.enclosingElement3 as ClassElement;
           if (field.isEnumConstant ||
               _flutter.isExactAlignment(enclosingClass) ||
               _flutter.isExactAlignmentDirectional(enclosingClass)) {
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 6d6ec55..e411d2d 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -28,7 +28,7 @@
 /// name of the constructor, unless the constructor is a named constructor in
 /// which '<class-name>.<constructor-name>' is returned.
 String _computeConstructorElementName(ConstructorElement element) {
-  var name = element.enclosingElement2.name;
+  var name = element.enclosingElement3.name;
   var constructorName = element.name;
   if (constructorName.isNotEmpty) {
     name = '$name.$constructorName';
@@ -288,7 +288,7 @@
 
       // anchor- defines/binding
       addAnchorEdgesContainingEdge(
-          syntacticEntity: node.name,
+          syntacticEntity: node.name2,
           edges: [
             schema.DEFINES_BINDING_EDGE,
           ],
@@ -355,7 +355,7 @@
 
       // anchor
       addAnchorEdgesContainingEdge(
-          syntacticEntity: node.name,
+          syntacticEntity: node.name2,
           edges: [
             schema.DEFINES_BINDING_EDGE,
           ],
@@ -471,9 +471,9 @@
       // anchor
       var start = node.returnType.offset;
       var end = node.returnType.end;
-      var nameNode = node.name;
-      if (nameNode != null) {
-        end = nameNode.end;
+      var nameToken = node.name2;
+      if (nameToken != null) {
+        end = nameToken.end;
       }
       addAnchorEdgesContainingEdge(
           start: start,
@@ -503,7 +503,7 @@
   @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
     var declaredElement = node.declaredElement!;
-    _handleVariableDeclaration(declaredElement, node.identifier,
+    _handleVariableDeclaration(declaredElement, node.name,
         subKind: schema.LOCAL_SUBKIND, type: declaredElement.type);
 
     // no children
@@ -517,7 +517,7 @@
 
     // anchor- defines/binding, defines
     addAnchorEdgesContainingEdge(
-        syntacticEntity: node.name,
+        syntacticEntity: node.name2,
         edges: [
           schema.DEFINES_BINDING_EDGE,
           schema.DEFINES_EDGE,
@@ -539,7 +539,7 @@
 
       // anchor- defines/binding
       addAnchorEdgesContainingEdge(
-          syntacticEntity: node.name,
+          syntacticEntity: node.name2,
           edges: [
             schema.DEFINES_BINDING_EDGE,
           ],
@@ -578,7 +578,7 @@
     _handleRefEdge(
       element,
       const <String>[schema.REF_EDGE],
-      syntacticEntity: node.identifier,
+      syntacticEntity: node.name,
     );
 
     // visit children
@@ -599,7 +599,7 @@
 
       // anchor- defines/binding
       addAnchorEdgesContainingEdge(
-          syntacticEntity: node.name,
+          syntacticEntity: node.name2,
           edges: [
             schema.DEFINES_BINDING_EDGE,
           ],
@@ -665,7 +665,6 @@
     // visit children
     _safelyVisit(node.documentationComment);
     _safelyVisitList(node.metadata);
-    _safelyVisit(node.identifier);
     _safelyVisit(node.typeParameters);
     _safelyVisit(node.parameters);
   }
@@ -729,13 +728,13 @@
       // We can't call _handleRefEdge as the anchor node has already been
       // written out.
       var enclosingEltVName = _vNameFromElement(
-          constructorElement.enclosingElement2, schema.RECORD_KIND);
+          constructorElement.enclosingElement3, schema.RECORD_KIND);
       var anchorVName =
           _vNameAnchor(constructorName.offset, constructorName.end);
       addEdge(anchorVName, schema.REF_EDGE, enclosingEltVName);
 
       // TODO(jwren): investigate
-      //   assert (element.enclosingElement2 != null);
+      //   assert (element.enclosingElement3 != null);
     }
     // visit children
     _safelyVisitList(constructorName.type.typeArguments?.arguments);
@@ -752,7 +751,7 @@
 
       // anchor- defines/binding
       addAnchorEdgesContainingEdge(
-          syntacticEntity: node.name,
+          syntacticEntity: node.name2,
           edges: [
             schema.DEFINES_BINDING_EDGE,
           ],
@@ -824,7 +823,7 @@
     // node.identifier can be null in cases with the new generic function type
     // syntax
     // TODO(jwren) add test cases for this situation
-    var identifier = node.identifier;
+    var identifier = node.name;
     if (identifier != null) {
       // The anchor and anchor edges generation are broken into two cases, the
       // first case is "method(parameter_name) ...", where the parameter
@@ -920,7 +919,7 @@
 
     // variable
     var declaredElement = node.declaredElement!;
-    _handleVariableDeclaration(declaredElement, node.name,
+    _handleVariableDeclaration(declaredElement, node.name2,
         subKind: isLocal ? schema.LOCAL_SUBKIND : schema.FIELD_SUBKIND,
         type: declaredElement.type);
 
@@ -1420,7 +1419,7 @@
   @override
   StringBuffer visitElement(Element element) {
     assert(element is! MultiplyInheritedExecutableElement);
-    var enclosingElt = element.enclosingElement2!;
+    var enclosingElt = element.enclosingElement3!;
     var buffer = enclosingElt.accept(this)!;
     if (buffer.isNotEmpty) {
       buffer.write('#');
@@ -1452,7 +1451,7 @@
     // It is legal to have a named constructor with the same name as a type
     // parameter.  So we distinguish them by using '.' between the class (or
     // typedef) name and the type parameter name.
-    return element.enclosingElement2!.accept(this)!
+    return element.enclosingElement3!.accept(this)!
       ..write('.')
       ..write(element.name);
   }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
index dcbe33c8..e0f9237 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_getter_to_method.dart
@@ -46,15 +46,15 @@
   Future<SourceChange> createChange() async {
     change = SourceChange(refactoringName);
     // function
-    if (element.enclosingElement2 is CompilationUnitElement) {
+    if (element.enclosingElement3 is CompilationUnitElement) {
       await _updateElementDeclaration(element);
       await _updateElementReferences(element);
     }
     // method
     var field = element.variable;
     if (field is FieldElement &&
-        (field.enclosingElement2 is ClassElement ||
-            field.enclosingElement2 is ExtensionElement)) {
+        (field.enclosingElement3 is ClassElement ||
+            field.enclosingElement3 is ExtensionElement)) {
       var elements = await getHierarchyMembers(searchEngine, field);
       await Future.forEach(elements, (ClassMemberElement member) async {
         if (member is FieldElement) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
index 4a1812c..427b1a1 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/convert_method_to_getter.dart
@@ -72,7 +72,7 @@
   RefactoringStatus _checkElement() {
     // check Element type
     if (element is FunctionElement) {
-      if (element.enclosingElement2 is! CompilationUnitElement) {
+      if (element.enclosingElement3 is! CompilationUnitElement) {
         return RefactoringStatus.fatal(
             'Only top-level functions can be converted to getters.');
       }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
index 5f2bacf..607535c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_local.dart
@@ -523,6 +523,7 @@
   @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
     var parent = node.parent;
+    // ignore: deprecated_member_use
     if (parent is VariableDeclaration && parent.name == node ||
         parent is AssignmentExpression && parent.leftHandSide == node) {
       return;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index 6a74379..80d5192 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -38,7 +38,7 @@
   if (element is LocalVariableElement ||
       element is ParameterElement ||
       element is FunctionElement &&
-          element.enclosingElement2 is! CompilationUnitElement) {
+          element.enclosingElement3 is! CompilationUnitElement) {
     return element;
   }
   return null;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
index b8b519c..b476d7c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_widget.dart
@@ -310,8 +310,8 @@
             parameter = parameter.parameter;
           }
           if (parameter is NormalFormalParameter) {
-            _parameters.add(_Parameter(
-                parameter.identifier!.name, parameter.declaredElement!.type,
+            final element = parameter.declaredElement!;
+            _parameters.add(_Parameter(element.name, element.type,
                 isMethodParameter: true));
           }
         }
@@ -669,7 +669,7 @@
         enclosingClass,
         ...enclosingClass.allSupertypes.map((t) => t.element)
       ];
-      return enclosingClasses.contains(element.enclosingElement2);
+      return enclosingClasses.contains(element.enclosingElement3);
     }
     return false;
   }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 235172d..fec885d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -212,7 +212,7 @@
 
   @override
   String? get className {
-    var classElement = _methodElement?.enclosingElement2;
+    var classElement = _methodElement?.enclosingElement3;
     if (classElement is ClassElement) {
       return classElement.displayName;
     }
@@ -805,13 +805,13 @@
     } else {
       return;
     }
-    if (element.enclosingElement2 is! ClassElement) {
+    if (element.enclosingElement3 is! ClassElement) {
       return;
     }
     // record the implicit static or instance reference
     var offset = node.offset;
     if (element.isStatic) {
-      var className = element.enclosingElement2.displayName;
+      var className = element.enclosingElement3.displayName;
       result.addImplicitClassNameOffset(className, offset);
     } else {
       result.addImplicitThisOffset(offset);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
index b85a9ff..88c21de 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/refactoring.dart
@@ -406,7 +406,7 @@
     if (element is PropertyAccessorElement) {
       element = element.variable;
     }
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (enclosingElement is CompilationUnitElement) {
       return RenameUnitMemberRefactoringImpl(workspace, resolvedUnit, element);
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index d7bd902..7661de2 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -168,7 +168,7 @@
     var declarations = await searchEngine.searchMemberDeclarations(name);
     for (var declaration in declarations) {
       var nameElement = getSyntheticAccessorVariable(declaration.element);
-      var nameClass = nameElement.enclosingElement2;
+      var nameClass = nameElement.enclosingElement3;
       // the renamed Element shadows a member of a superclass
       if (superClasses.contains(nameClass)) {
         result.addError(
@@ -276,7 +276,7 @@
     var subClasses = await searchEngine.searchAllSubtypes(elementClass);
     // check shadowing of class names
     for (var element in elements) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ClassElement && enclosingElement.name == name) {
         result.addError(
           'Renamed ${elementKind.displayName} has the same name as the '
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 01ce273..134d6e4 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -82,7 +82,7 @@
   }
 
   void _analyzePossibleConflicts(RefactoringStatus result) {
-    var parentClass = element.enclosingElement2;
+    var parentClass = element.enclosingElement3;
     // Check if the "newName" is the name of the enclosing class.
     if (parentClass.name == newName) {
       result.addError('The constructor should not have the same name '
@@ -107,7 +107,7 @@
   }
 
   Future<void> _replaceSynthetic() async {
-    var classElement = element.enclosingElement2;
+    var classElement = element.enclosingElement3;
 
     var result = await AnalysisSessionHelper(session)
         .getElementDeclaration(classElement);
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
index eb53d12..caa5679 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart
@@ -214,7 +214,7 @@
     var declarations = await searchEngine.searchMemberDeclarations(name);
     for (var declaration in declarations) {
       var member = declaration.element;
-      var declaringClass = member.enclosingElement2 as ClassElement;
+      var declaringClass = member.enclosingElement3 as ClassElement;
       var memberReferences = await searchEngine.searchReferences(member);
       for (var memberReference in memberReferences) {
         var refElement = memberReference.element;
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 0776411..e54709d 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -82,7 +82,7 @@
     SearchEngine searchEngine, ClassMemberElement member) async {
   Set<ClassMemberElement> result = HashSet<ClassMemberElement>();
   // extension member
-  var enclosingElement = member.enclosingElement2;
+  var enclosingElement = member.enclosingElement3;
   if (enclosingElement is ExtensionElement) {
     result.add(member);
     return Future.value(result);
@@ -126,7 +126,7 @@
 Future<List<ParameterElement>> getHierarchyNamedParameters(
     SearchEngine searchEngine, ParameterElement element) async {
   if (element.isNamed) {
-    var method = element.enclosingElement2;
+    var method = element.enclosingElement3;
     if (method is MethodElement) {
       var hierarchyParameters = <ParameterElement>[];
       var hierarchyMembers = await getHierarchyMembers(searchEngine, method);
diff --git a/pkg/analysis_server/lib/src/status/ast_writer.dart b/pkg/analysis_server/lib/src/status/ast_writer.dart
index af7730c..e9173b7 100644
--- a/pkg/analysis_server/lib/src/status/ast_writer.dart
+++ b/pkg/analysis_server/lib/src/status/ast_writer.dart
@@ -144,36 +144,36 @@
   /// declaration.
   String? _getName(AstNode node) {
     if (node is ClassTypeAlias) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is ClassDeclaration) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is ConstructorDeclaration) {
-      var name = node.name;
+      var name = node.name2;
       if (name == null) {
         return node.returnType.name;
       } else {
-        return '${node.returnType.name}.${name.name}';
+        return '${node.returnType.name}.${name.lexeme}';
       }
     } else if (node is ConstructorName) {
       return node.toSource();
     } else if (node is FieldDeclaration) {
       return _getNames(node.fields);
     } else if (node is FunctionDeclaration) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is FunctionTypeAlias) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is Identifier) {
       return node.name;
     } else if (node is MethodDeclaration) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is TopLevelVariableDeclaration) {
       return _getNames(node.variables);
     } else if (node is TypeAnnotation) {
       return node.toSource();
     } else if (node is TypeParameter) {
-      return node.name.name;
+      return node.name2.lexeme;
     } else if (node is VariableDeclaration) {
-      return node.name.name;
+      return node.name2.lexeme;
     }
     return null;
   }
@@ -189,7 +189,7 @@
       } else {
         buffer.write(', ');
       }
-      buffer.write(variable.name.name);
+      buffer.write(variable.name2.lexeme);
     }
     return buffer.toString();
   }
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/element.dart b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
index 28512dd..cc38a89 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/element.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/element.dart
@@ -30,15 +30,15 @@
     if (hasDeprecated) {
       return true;
     }
-    var ancestor = enclosingElement2;
+    var ancestor = enclosingElement3;
     if (ancestor is ClassElement) {
       if (ancestor.hasDeprecated) {
         return true;
       }
-      ancestor = ancestor.enclosingElement2;
+      ancestor = ancestor.enclosingElement3;
     }
     return ancestor is CompilationUnitElement &&
-        ancestor.enclosingElement2.hasDeprecated;
+        ancestor.enclosingElement3.hasDeprecated;
   }
 
   /// Return this element and all its enclosing elements.
@@ -46,7 +46,7 @@
     var current = this;
     while (true) {
       yield current;
-      var enclosing = current.enclosingElement2;
+      var enclosing = current.enclosingElement3;
       if (enclosing == null) {
         break;
       }
@@ -69,7 +69,7 @@
     if (name != 'cast') {
       return false;
     }
-    var definingClass = enclosingElement2;
+    var definingClass = enclosingElement3;
     if (definingClass is! ClassElement) {
       return false;
     }
@@ -85,7 +85,7 @@
     if (name != 'toList') {
       return false;
     }
-    var definingClass = enclosingElement2;
+    var definingClass = enclosingElement3;
     if (definingClass is! ClassElement) {
       return false;
     }
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index c425391..04f94a6 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -192,7 +192,7 @@
 
   /// Return the presentation for the given Flutter `Widget` creation [node].
   String? getWidgetPresentationText(InstanceCreationExpression node) {
-    var element = node.constructorName.staticElement?.enclosingElement2;
+    var element = node.constructorName.staticElement?.enclosingElement3;
     if (!isWidget(element)) {
       return null;
     }
@@ -486,8 +486,8 @@
 
   /// Return `true` if the given [element] is the Flutter class `Widget`, or its
   /// subtype.
-  bool isWidget(ClassElement? element) {
-    if (element == null) {
+  bool isWidget(InterfaceElement? element) {
+    if (element is! ClassElement) {
       return false;
     }
     if (_isExactWidget(element, _nameWidget, _uriFramework)) {
@@ -504,7 +504,7 @@
   /// Return `true` if the given [expr] is a constructor invocation for a
   /// class that has the Flutter class `Widget` as a superclass.
   bool isWidgetCreation(InstanceCreationExpression? expr) {
-    var element = expr?.constructorName.staticElement?.enclosingElement2;
+    var element = expr?.constructorName.staticElement?.enclosingElement3;
     return isWidget(element);
   }
 
@@ -555,7 +555,9 @@
 
   /// Return `true` if the given [element] is the exact [type] defined in the
   /// file with the given [uri].
-  bool _isExactWidget(ClassElement? element, String type, Uri uri) {
-    return element != null && element.name == type && element.source.uri == uri;
+  bool _isExactWidget(InterfaceElement? element, String type, Uri uri) {
+    return element is ClassElement &&
+        element.name == type &&
+        element.source.uri == uri;
   }
 }
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index a1aa517..8887975 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -503,7 +503,6 @@
     assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'AAA<int>.name(');
     assertHasRegion(HighlightRegionType.CLASS, 'int>(');
     assertHasRegion(HighlightRegionType.CLASS, 'int>.name(');
-    assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(p)');
     assertHasRegion(HighlightRegionType.CONSTRUCTOR, 'name(42)');
   }
 
diff --git a/pkg/analysis_server/test/integration/linter/lint_names_test.dart b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
index 1b8e5d0..2372824 100644
--- a/pkg/analysis_server/test/integration/linter/lint_names_test.dart
+++ b/pkg/analysis_server/test/integration/linter/lint_names_test.dart
@@ -32,8 +32,8 @@
       throw Exception(parseResult.errors);
     }
 
-    var lintNamesClass = parseResult.unit.declarations
-        .firstWhere((m) => m is ClassDeclaration && m.name.name == 'LintNames');
+    var lintNamesClass = parseResult.unit.declarations.firstWhere(
+        (m) => m is ClassDeclaration && m.name2.lexeme == 'LintNames');
 
     var collector = _FixCollector();
     lintNamesClass.accept(collector);
@@ -65,7 +65,7 @@
   @override
   void visitFieldDeclaration(FieldDeclaration node) {
     for (var v in node.fields.variables) {
-      lintNames.add(v.name.name);
+      lintNames.add(v.name2.lexeme);
     }
   }
 }
diff --git a/pkg/analysis_server/test/plugin/protocol_dart_test.dart b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
index a0e22e1..57097ed 100644
--- a/pkg/analysis_server/test/plugin/protocol_dart_test.dart
+++ b/pkg/analysis_server/test/plugin/protocol_dart_test.dart
@@ -255,7 +255,7 @@
       expect(element.parameters, isNull);
       expect(element.returnType, '_E1');
       // TODO(danrubel) determine why enum constant is not marked as deprecated
-      //engine.ClassElement classElement = engineElement.enclosingElement2;
+      //engine.ClassElement classElement = engineElement.enclosingElement3;
       //expect(classElement.isDeprecated, isTrue);
       expect(
           element.flags,
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
index 26676b3..dab7e2c 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_rename.dart
@@ -6,7 +6,7 @@
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/dart/ast/extensions.dart';
+import 'package:analyzer/src/dart/ast/element_locator.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
 import 'package:test/test.dart';
 
@@ -41,7 +41,7 @@
   /// the [SimpleIdentifier] at the given [search] pattern.
   void createRenameRefactoringAtString(String search) {
     var identifier = findNode.simple(search);
-    var element = identifier.writeOrReadElement;
+    var element = ElementLocator.locate(identifier);
     if (element is PrefixElement) {
       element = getImportElement(identifier);
     }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
index c39c4b6..f050c77 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/element_matcher_test.dart
@@ -23,7 +23,7 @@
       List<ElementKind>? expectedKinds,
       List<String>? expectedUris}) {
     var node = findNode.any(search);
-    var matchers = ElementMatcher.matchersForNode(node);
+    var matchers = ElementMatcher.matchersForNode(node, node.beginToken);
     expect(matchers, hasLength(1));
     var matcher = matchers[0];
     if (expectedUris != null) {
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index d616586..67cc038 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -544,7 +544,7 @@
     for (var topDeclaration in unit.declarations) {
       if (topDeclaration is TopLevelVariableDeclaration) {
         for (var variable in topDeclaration.variables.variables) {
-          if (variable.name.name == name) {
+          if (variable.name2.lexeme == name) {
             return variable;
           }
         }
diff --git a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
index 84cf49b..033dc78 100644
--- a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
+++ b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
@@ -33,10 +33,10 @@
         if (classElement != null &&
             classElement.allSupertypes.any(
                 (element) => element.element.name == 'CorrectionProducer')) {
-          var correctionName = classDecl.name.name;
+          var correctionName = classDecl.name2.lexeme;
 
           for (var method in classDecl.members.whereType<MethodDeclaration>()) {
-            if (method.name.name == 'canBeAppliedInBulk') {
+            if (method.name2.lexeme == 'canBeAppliedInBulk') {
               var hasComment =
                   method.returnType?.beginToken.precedingComments != null;
 
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 051f919..c30111a 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -307,7 +307,7 @@
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
       'abstractKeyword': node.abstractKeyword,
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'extendsClause': node.extendsClause,
       'withClause': node.withClause,
@@ -324,7 +324,7 @@
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
       'abstractKeyword': node.abstractKeyword,
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'superclass': node.superclass,
       'withClause': node.withClause,
@@ -387,7 +387,7 @@
       'constKeyword': node.constKeyword,
       'factoryKeyword': node.factoryKeyword,
       'returnType': node.returnType,
-      'name': node.name,
+      'name': node.name2,
       'parameters': node.parameters,
       'initializers': node.initializers,
       'redirectedConstructor': node.redirectedConstructor,
@@ -428,7 +428,7 @@
     _visitChildren(node, {
       'keyword': node.keyword,
       'type': node.type,
-      'identifier': node.identifier,
+      'name': node.name,
     });
     super.visitDeclaredIdentifier(node);
   }
@@ -482,7 +482,7 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
+      'name': node.name2,
     });
     super.visitEnumConstantDeclaration(node);
   }
@@ -492,7 +492,7 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
+      'name': node.name2,
       'constants': node.constants,
     });
     super.visitEnumDeclaration(node);
@@ -539,7 +539,7 @@
   @override
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     _visitChildren(node, {
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'extendedType': node.extendedType,
       'member': node.members,
@@ -579,7 +579,7 @@
       'keyword': node.keyword,
       'type': node.type,
       'thisKeyword': node.thisKeyword,
-      'identifier': node.identifier,
+      'name': node.name,
       'typeParameters': node.typeParameters,
       'parameters': node.parameters,
       'question': node.question,
@@ -660,7 +660,7 @@
       'metadata': node.metadata,
       'externalKeyword': node.externalKeyword,
       'propertyKeyword': node.propertyKeyword,
-      'name': node.name,
+      'name': node.name2,
       'functionExpression': node.functionExpression,
       'returnType': node.returnType,
     });
@@ -701,7 +701,7 @@
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
       'returnType': node.returnType,
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'parameters': node.parameters,
     });
@@ -713,7 +713,7 @@
     _visitChildren(node, {
       'covariantKeyword': node.covariantKeyword,
       'returnType': node.returnType,
-      'identifier': node.identifier,
+      'name': node.name,
       'typeParameters': node.typeParameters,
       'parameters': node.parameters,
       'question': node.question,
@@ -737,7 +737,7 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'functionType': node.functionType,
     });
@@ -910,7 +910,7 @@
       'externalKeyword': node.externalKeyword,
       'modifierKeyword': node.modifierKeyword,
       'returnType': node.returnType,
-      'name': node.name,
+      'name': node.name2,
       'operatorKeyword': node.operatorKeyword,
       'typeParameters': node.typeParameters,
       'parameters': node.parameters,
@@ -935,7 +935,7 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
+      'name': node.name2,
       'typeParameters': node.typeParameters,
       'onClause': node.onClause,
       'implementsClause': node.implementsClause,
@@ -1111,7 +1111,7 @@
       'covariantKeyword': node.covariantKeyword,
       'keyword': node.keyword,
       'type': node.type,
-      'identifier': node.identifier,
+      'name': node.name,
     });
     super.visitSimpleFormalParameter(node);
   }
@@ -1232,7 +1232,7 @@
   @override
   void visitTypeParameter(TypeParameter node) {
     _visitChildren(node, {
-      'name': node.name,
+      'name': node.name2,
       'bound': node.bound,
     });
     super.visitTypeParameter(node);
@@ -1249,7 +1249,7 @@
     _visitChildren(node, {
       'documentationComment': node.documentationComment,
       'metadata': node.metadata,
-      'name': node.name,
+      'name': node.name2,
       'initializer': node.initializer,
     });
     super.visitVariableDeclaration(node);
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 2bc9c51..cf0c112 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -1699,7 +1699,7 @@
     var entity = expectedCompletion.syntacticEntity;
     var element = _getElement(entity);
     if (element != null) {
-      var parent = element.enclosingElement2;
+      var parent = element.enclosingElement3;
       if (parent is ClassElement || parent is ExtensionElement) {
         if (_isStatic(element)) {
           return CompletionGroup.staticMember;
diff --git a/pkg/analysis_server/tool/code_completion/flutter_metrics.dart b/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
index 6bba840..fdd758e 100644
--- a/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/flutter_metrics.dart
@@ -144,7 +144,7 @@
         throw StateError(
             'Unresolved constructor name: ${node.constructorName}');
       }
-      var childWidget = element.enclosingElement2.name;
+      var childWidget = element.enclosingElement3.name;
       if (!element.librarySource.uri
           .toString()
           .startsWith('package:flutter/')) {
diff --git a/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart b/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
index 647850c..256995e 100644
--- a/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
+++ b/pkg/analysis_server/tool/code_completion/implicit_type_declarations.dart
@@ -110,7 +110,7 @@
       if (rhsType != null && !rhsType.isDynamic) {
         // Record the name with the type.
         data.recordImpliedType(
-          node.name.name,
+          node.name2.lexeme,
           rhsType.getDisplayString(withNullability: false),
         );
       }
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index 8683e81..34fb4a9 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -968,9 +968,9 @@
     data.recordPercentage(
         'Methods with type parameters', node.typeParameters != null);
     var element = node.declaredElement!;
-    if (!element.isStatic && element.enclosingElement2 is ClassElement) {
+    if (!element.isStatic && element.enclosingElement3 is ClassElement) {
       var overriddenMembers = inheritanceManager.getOverridden2(
-          element.enclosingElement2 as ClassElement,
+          element.enclosingElement3 as ClassElement,
           Name(element.librarySource.uri, element.name));
       if (overriddenMembers != null) {
         // Consider limiting this to the most immediate override. If the
@@ -993,7 +993,7 @@
     if (node.target is SuperExpression) {
       var enclosingMethod = node.thisOrAncestorOfType<MethodDeclaration>();
       if (enclosingMethod != null) {
-        if (enclosingMethod.name.name == node.methodName.name) {
+        if (enclosingMethod.name2.lexeme == node.methodName.name) {
           data.recordTypeMatch('super invocation member', 'same');
         } else {
           data.recordTypeMatch('super invocation member', 'different');
@@ -1120,7 +1120,7 @@
     if (node.target is SuperExpression) {
       var enclosingMethod = node.thisOrAncestorOfType<MethodDeclaration>();
       if (enclosingMethod != null) {
-        if (enclosingMethod.name.name == node.propertyName.name) {
+        if (enclosingMethod.name2.lexeme == node.propertyName.name) {
           data.recordTypeMatch('super property access member', 'same');
         } else {
           data.recordTypeMatch('super property access member', 'different');
@@ -1406,7 +1406,7 @@
     Element? currentElement = element;
     while (currentElement != enclosingLibrary) {
       depth++;
-      currentElement = currentElement?.enclosingElement2;
+      currentElement = currentElement?.enclosingElement3;
     }
     return depth;
   }
@@ -1688,7 +1688,7 @@
     var reference = _leftMostIdentifier(node);
     var element = reference?.staticElement;
     if (element is ParameterElement) {
-      var definingElement = element.enclosingElement2!;
+      var definingElement = element.enclosingElement3!;
       var depth = _parameterReferenceDepth(node, definingElement);
       _recordDistance('function depth of referenced parameter', depth);
     } else if (element is LocalVariableElement) {
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 3a74a43..f602efc8 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -14,6 +14,9 @@
 * Deprecated `CatchClause.exceptionParameter` and `CatchClause.stackTraceParameter`.
   Use `exceptionParameter2` and `stackTraceParameter2` instead.
 * Added `FileResult.isAugmentation` and `isLibrary` to complement `isPart`.
+* Deprecated 'XyzDeclaration.name' in AST, use `name2` and `declaredElement` instead.
+* Deprecated `Element.enclosingElement2`, use `enclosingElement3` instead.  The meaningful change is that
+  `ConstructorElement.enclosingElement3` returns now `IntefaceElement`, not `ClassElement`.
 
 ## 4.3.1
 * Fix `identifier` for `LibraryExportElement` and `LibraryImportElement`.
diff --git a/pkg/analyzer/doc/tutorial/ast.md b/pkg/analyzer/doc/tutorial/ast.md
index 5206b39..145e975 100644
--- a/pkg/analyzer/doc/tutorial/ast.md
+++ b/pkg/analyzer/doc/tutorial/ast.md
@@ -90,19 +90,19 @@
 void printMembers(CompilationUnit unit) {
   for (CompilationUnitMember unitMember in unit.declarations) {
     if (unitMember is ClassDeclaration) {
-      print(unitMember.name.name);
+      print(unitMember.name2.lexeme);
       for (ClassMember classMember in unitMember.members) {
         if (classMember is MethodDeclaration) {
-          print('  ${classMember.name}');
+          print('  ${classMember.name2.lexeme}');
         } else if (classMember is FieldDeclaration) {
           for (VariableDeclaration field in classMember.fields.variables) {
-            print('  ${field.name.name}');
+            print('  ${field.name2.lexeme}');
           }
         } else if (classMember is ConstructorDeclaration) {
-          if (classMember.name == null) {
-            print('  ${unitMember.name.name}');
+          if (classMember.name2 == null) {
+            print('  ${unitMember.name2.lexeme}');
           } else {
-            print('  ${unitMember.name.name}.${classMember.name.name}');
+            print('  ${unitMember.name2.lexeme}.${classMember.name2.lexeme}');
           }
         }
       }
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index f1e1596..3bfb26c 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -789,7 +789,7 @@
 ///      | 'on' type catchPart? [Block]
 ///
 ///    catchPart ::=
-///        'catch' '(' [SimpleIdentifier] (',' [SimpleIdentifier])? ')'
+///        'catch' '(' [CatchClauseParameter] (',' [CatchClauseParameter])? ')'
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class CatchClause implements AstNode {
@@ -851,7 +851,7 @@
 /// The declaration of a class augmentation.
 ///
 ///    classAugmentationDeclaration ::=
-///        'augment' 'class' [SimpleIdentifier] [TypeParameterList]?
+///        'augment' 'class' name [TypeParameterList]?
 ///        [ExtendsClause]? [WithClause]? [ImplementsClause]?
 ///        '{' [ClassMember]* '}'
 ///
@@ -869,7 +869,7 @@
 /// The declaration of a class.
 ///
 ///    classDeclaration ::=
-///        'abstract'? 'class' [SimpleIdentifier] [TypeParameterList]?
+///        'abstract'? 'class' name [TypeParameterList]?
 ///        [ExtendsClause]? [WithClause]? [ImplementsClause]?
 ///        '{' [ClassMember]* '}'
 ///
@@ -986,7 +986,7 @@
 /// A class type alias.
 ///
 ///    classTypeAlias ::=
-///        [SimpleIdentifier] [TypeParameterList]? '=' 'abstract'? mixinApplication
+///        name [TypeParameterList]? '=' 'abstract'? mixinApplication
 ///
 ///    mixinApplication ::=
 ///        [TypeName] [WithClause] [ImplementsClause]? ';'
@@ -1011,9 +1011,6 @@
   @Deprecated('Use abstractKeyword instead')
   bool get isAbstract;
 
-  @override
-  SimpleIdentifier get name;
-
   /// Return the name of the superclass of the class being declared.
   NamedType get superclass;
 
@@ -1339,7 +1336,7 @@
 ///      | 'external'? 'const'  constructorName formalParameterList initializerList?
 ///
 ///    constructorName ::=
-///        [SimpleIdentifier] ('.' [SimpleIdentifier])?
+///        [SimpleIdentifier] ('.' name)?
 ///
 ///    factoryName ::=
 ///        [Identifier] ('.' [SimpleIdentifier])?
@@ -1371,8 +1368,13 @@
 
   /// Return the name of the constructor, or `null` if the constructor being
   /// declared is unnamed.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier? get name;
 
+  /// Return the name of the constructor, or `null` if the constructor being
+  /// declared is unnamed.
+  Token? get name2;
+
   /// Return the parameters associated with the constructor.
   FormalParameterList get parameters;
 
@@ -1545,6 +1547,7 @@
   LocalVariableElement? get declaredElement;
 
   /// Return the name of the variable being declared.
+  @Deprecated('Use identifier2 instead')
   SimpleIdentifier get identifier;
 
   /// Return `true` if this variable was declared with the 'const' modifier.
@@ -1559,6 +1562,9 @@
   /// keyword, or `null` if no keyword was used.
   Token? get keyword;
 
+  /// Return the name of the variable being declared.
+  Token get name;
+
   /// Return the name of the declared type of the parameter, or `null` if the
   /// parameter does not have a declared type.
   TypeAnnotation? get type;
@@ -1734,13 +1740,17 @@
   ConstructorElement? get constructorElement;
 
   /// Return the name of the constant.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier get name;
+
+  /// Return the name of the constant.
+  Token get name2;
 }
 
 /// The declaration of an enumeration.
 ///
 ///    enumType ::=
-///        metadata 'enum' [SimpleIdentifier] [TypeParameterList]?
+///        metadata 'enum' name [TypeParameterList]?
 ///        [WithClause]? [ImplementsClause]? '{' [SimpleIdentifier]
 ///        (',' [SimpleIdentifier])* (';' [ClassMember]+)? '}'
 ///
@@ -1765,9 +1775,6 @@
   /// Return the members declared by the enumeration.
   NodeList<ClassMember> get members;
 
-  @override
-  SimpleIdentifier get name;
-
   /// Return the right curly bracket.
   Token get rightBracket;
 
@@ -1946,8 +1953,13 @@
 
   /// Return the name of the extension, or `null` if the extension does not have
   /// a name.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier? get name;
 
+  /// Return the name of the extension, or `null` if the extension does not have
+  /// a name.
+  Token? get name2;
+
   /// Return the token representing the 'on' keyword.
   Token get onKeyword;
 
@@ -2061,10 +2073,11 @@
 ///
 ///    fieldFormalParameter ::=
 ///        ('final' [TypeAnnotation] | 'const' [TypeAnnotation] | 'var' | [TypeAnnotation])?
-///        'this' '.' [SimpleIdentifier] ([TypeParameterList]? [FormalParameterList])?
+///        'this' '.' name ([TypeParameterList]? [FormalParameterList])?
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class FieldFormalParameter implements NormalFormalParameter {
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifier get identifier;
 
@@ -2072,6 +2085,9 @@
   /// keyword, or `null` if no keyword was used.
   Token? get keyword;
 
+  @override
+  Token get name;
+
   /// Return the parameters of the function-typed parameter, or `null` if this
   /// is not a function-typed field formal parameter.
   FormalParameterList? get parameters;
@@ -2190,6 +2206,7 @@
   /// Return the name of the parameter being declared, or `null` if the
   /// parameter doesn't have a name, such as when it's part of a generic
   /// function type.
+  @Deprecated('Use identifier2 instead')
   SimpleIdentifier? get identifier;
 
   /// Return `true` if this parameter was declared with the 'const' modifier.
@@ -2247,6 +2264,11 @@
   /// Return the annotations associated with this parameter.
   NodeList<Annotation> get metadata;
 
+  /// Return the name of the parameter being declared, or `null` if the
+  /// parameter doesn't have a name, such as when it's part of a generic
+  /// function type.
+  Token? get name;
+
   /// The 'required' keyword, or `null` if the keyword was not used.
   Token? get requiredKeyword;
 }
@@ -2448,7 +2470,7 @@
 ///      | functionSignature [FunctionBody]
 ///
 ///    functionSignature ::=
-///        [Type]? ('get' | 'set')? [SimpleIdentifier] [FormalParameterList]
+///        [Type]? ('get' | 'set')? name [FormalParameterList]
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class FunctionDeclaration implements NamedCompilationUnitMember {
@@ -2468,9 +2490,6 @@
   /// Return `true` if this function declares a setter.
   bool get isSetter;
 
-  @override
-  SimpleIdentifier get name;
-
   /// Return the token representing the 'get' or 'set' keyword, or `null` if
   /// this is a function declaration rather than a property declaration.
   Token? get propertyKeyword;
@@ -2592,14 +2611,18 @@
 /// A function-typed formal parameter.
 ///
 ///    functionSignature ::=
-///        [TypeAnnotation]? [SimpleIdentifier] [TypeParameterList]?
+///        [TypeAnnotation]? name [TypeParameterList]?
 ///        [FormalParameterList] '?'?
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class FunctionTypedFormalParameter implements NormalFormalParameter {
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifier get identifier;
 
+  @override
+  Token get name;
+
   /// Return the parameters of the function-typed parameter.
   FormalParameterList get parameters;
 
@@ -2666,7 +2689,7 @@
 /// A generic type alias.
 ///
 ///    functionTypeAlias ::=
-///        metadata 'typedef' [SimpleIdentifier] [TypeParameterList]? = [FunctionType] ';'
+///        metadata 'typedef' name [TypeParameterList]? = [FunctionType] ';'
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class GenericTypeAlias implements TypeAlias {
@@ -3394,8 +3417,12 @@
   Token? get modifierKeyword;
 
   /// Return the name of the method.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier get name;
 
+  /// Return the name of the method.
+  Token get name2;
+
   /// Return the token representing the 'operator' keyword, or `null` if this
   /// method does not declare an operator.
   Token? get operatorKeyword;
@@ -3480,7 +3507,7 @@
 /// The declaration of a mixin.
 ///
 ///    mixinDeclaration ::=
-///        metadata? 'mixin' [SimpleIdentifier] [TypeParameterList]?
+///        metadata? 'mixin' name [TypeParameterList]?
 ///        [OnClause]? [ImplementsClause]? '{' [ClassMember]* '}'
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -3498,7 +3525,11 @@
 /// Clients may not extend, implement or mix-in this class.
 abstract class NamedCompilationUnitMember implements CompilationUnitMember {
   /// Return the name of the member being declared.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier get name;
+
+  /// Return the name of the member being declared.
+  Token get name2;
 }
 
 /// An expression that has a name associated with it. They are used in method
@@ -4295,10 +4326,11 @@
 ///
 ///    superFormalParameter ::=
 ///        ('final' [TypeAnnotation] | 'const' [TypeAnnotation] | 'var' | [TypeAnnotation])?
-///        'super' '.' [SimpleIdentifier] ([TypeParameterList]? [FormalParameterList])?
+///        'super' '.' name ([TypeParameterList]? [FormalParameterList])?
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class SuperFormalParameter implements NormalFormalParameter {
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifier get identifier;
 
@@ -4306,6 +4338,9 @@
   /// keyword, or `null` if no keyword was used.
   Token? get keyword;
 
+  @override
+  Token get name;
+
   /// Return the parameters of the function-typed parameter, or `null` if this
   /// is not a function-typed field formal parameter.
   FormalParameterList? get parameters;
@@ -4508,9 +4543,6 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class TypeAlias implements NamedCompilationUnitMember {
-  @override
-  SimpleIdentifier get name;
-
   /// Return the semicolon terminating the declaration.
   Token get semicolon;
 
@@ -4594,7 +4626,7 @@
 /// A type parameter.
 ///
 ///    typeParameter ::=
-///        [SimpleIdentifier] ('extends' [TypeAnnotation])?
+///        name ('extends' [TypeAnnotation])?
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class TypeParameter implements Declaration {
@@ -4610,7 +4642,11 @@
   Token? get extendsKeyword;
 
   /// Return the name of the type parameter.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier get name;
+
+  /// Return the name of the type parameter.
+  Token get name2;
 }
 
 /// Type parameters within a declaration.
@@ -4669,7 +4705,7 @@
 /// [VariableDeclarationList].
 ///
 ///    variableDeclaration ::=
-///        [SimpleIdentifier] ('=' [Expression])?
+///        name ('=' [Expression])?
 ///
 /// Clients may not extend, implement or mix-in this class.
 // TODO(paulberry): the grammar does not allow metadata to be associated with a
@@ -4701,7 +4737,11 @@
   bool get isLate;
 
   /// Return the name of the variable being declared.
+  @Deprecated('Use name2 instead')
   SimpleIdentifier get name;
+
+  /// Return the name of the variable being declared.
+  Token get name2;
 }
 
 /// The declaration of one or more variables of the same type.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index a6b2d79..8305498 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -57,13 +57,17 @@
 /// Clients may not extend, implement or mix-in this class.
 @experimental
 abstract class AugmentationImportElement implements _ExistingElement {
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElement get enclosingElement2;
 
+  @override
+  LibraryOrAugmentationElement get enclosingElement3;
+
   /// Returns the [LibraryAugmentationElement], if [uri] is a
   /// [DirectiveUriWithAugmentation].
   LibraryAugmentationElement? get importedAugmentation;
@@ -214,13 +218,17 @@
   // TODO(brianwilkerson) Either remove this class or rename it to something
   //  more correct.
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2;
 
+  @override
+  Element get enclosingElement3;
+
   /// Return `true` if this element is a static element. A static element is an
   /// element that is not associated with a particular instance, but rather with
   /// an entire library or class.
@@ -251,14 +259,18 @@
   /// unit.
   List<ClassElement> get classes;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryElement get enclosingElement;
 
-  /// Return the library, or library augmentation that encloses this unit.
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElement get enclosingElement2;
 
+  /// Return the library, or library augmentation that encloses this unit.
+  @override
+  LibraryOrAugmentationElement get enclosingElement3;
+
   /// Return a list containing all of the enums contained in this compilation
   /// unit.
   List<ClassElement> get enums;
@@ -330,13 +342,17 @@
   @override
   String get displayName;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ClassElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ClassElement get enclosingElement2;
 
+  @override
+  InterfaceElement get enclosingElement3;
+
   /// Return `true` if this constructor is a const constructor.
   bool get isConst;
 
@@ -480,14 +496,20 @@
   /// Return the element that either physically or logically encloses this
   /// element. This will be `null` if this element is a library because
   /// libraries are the top-level elements in the model.
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   Element? get enclosingElement;
 
   /// Return the element that either physically or logically encloses this
   /// element. This will be `null` if this element is a library because
   /// libraries are the top-level elements in the model.
+  @Deprecated('Use enclosingElement3 instead')
   Element? get enclosingElement2;
 
+  /// Return the element that either physically or logically encloses this
+  /// element. This will be `null` if this element is a library because
+  /// libraries are the top-level elements in the model.
+  Element? get enclosingElement3;
+
   /// Return `true` if this element has an annotation of the form
   /// `@alwaysThrows`.
   bool get hasAlwaysThrows;
@@ -1090,13 +1112,17 @@
   @override
   String get displayName;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2;
 
+  @override
+  Element get enclosingElement3;
+
   /// Return `true` if this executable element did not have an explicit return
   /// type specified for it in the original source.
   bool get hasImplicitReturnType;
@@ -1158,13 +1184,17 @@
   /// declared in this extension.
   List<PropertyAccessorElement> get accessors;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement2;
 
+  @override
+  CompilationUnitElement get enclosingElement3;
+
   /// Return the type that is extended by this extension.
   DartType get extendedType;
 
@@ -1389,13 +1419,17 @@
   /// class, as is the case when this element represents an enum or a mixin.
   List<ConstructorElement> get constructors;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement2;
 
+  @override
+  CompilationUnitElement get enclosingElement3;
+
   /// Return a list containing all of the fields declared in this class.
   List<FieldElement> get fields;
 
@@ -1430,14 +1464,18 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class LabelElement implements Element {
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ExecutableElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ExecutableElement get enclosingElement2;
 
   @override
+  ExecutableElement get enclosingElement3;
+
+  @override
   String get name;
 }
 
@@ -1906,14 +1944,18 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class PrefixElement implements _ExistingElement {
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryElement get enclosingElement;
 
-  /// Return the library, or library augmentation that encloses this element.
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElement get enclosingElement2;
 
+  /// Return the library, or library augmentation that encloses this element.
+  @override
+  LibraryOrAugmentationElement get enclosingElement3;
+
   /// Return the imports that share this prefix.
   @Deprecated('Use imports2 instead')
   List<ImportElement> get imports;
@@ -1987,13 +2029,17 @@
   @override
   PropertyAccessorElement get declaration;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2;
 
+  @override
+  Element get enclosingElement3;
+
   /// Return `true` if this accessor represents a getter.
   bool get isGetter;
 
@@ -2110,14 +2156,18 @@
   /// a [FunctionType].
   DartType get aliasedType;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement2;
 
   @override
+  CompilationUnitElement get enclosingElement3;
+
+  @override
   String get name;
 
   /// Produces the type resulting from instantiating this typedef with the given
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index acc1838..5cb89c2 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -86,10 +86,10 @@
     // TODO(brianwilkerson) Consider extending this method to take any
     //  declaration and compute the correct range for the name of that
     //  declaration. This might make it easier to be consistent.
-    if (constructor.name != null) {
+    if (constructor.name2 != null) {
       var offset = constructor.returnType.offset;
       reportErrorForOffset(
-          code, offset, constructor.name!.end - offset, arguments);
+          code, offset, constructor.name2!.end - offset, arguments);
     } else {
       reportErrorForNode(code, constructor.returnType, arguments);
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
index d4d2ed2..a9295f5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/defined_names.dart
@@ -3,37 +3,38 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 
 /// Compute the [DefinedNames] for the given [unit].
 DefinedNames computeDefinedNames(CompilationUnit unit) {
   DefinedNames names = DefinedNames();
 
-  void appendName(Set<String> names, SimpleIdentifier? node) {
-    var name = node?.name;
-    if (name != null && name.isNotEmpty) {
-      names.add(name);
+  void appendName(Set<String> names, Token? token) {
+    var lexeme = token?.lexeme;
+    if (lexeme != null && lexeme.isNotEmpty) {
+      names.add(lexeme);
     }
   }
 
   void appendClassMemberName(ClassMember member) {
     if (member is MethodDeclaration) {
-      appendName(names.classMemberNames, member.name);
+      appendName(names.classMemberNames, member.name2);
     } else if (member is FieldDeclaration) {
       for (VariableDeclaration field in member.fields.variables) {
-        appendName(names.classMemberNames, field.name);
+        appendName(names.classMemberNames, field.name2);
       }
     }
   }
 
   void appendTopLevelName(CompilationUnitMember member) {
     if (member is NamedCompilationUnitMember) {
-      appendName(names.topLevelNames, member.name);
+      appendName(names.topLevelNames, member.name2);
       if (member is ClassDeclaration) {
         member.members.forEach(appendClassMemberName);
       }
       if (member is EnumDeclaration) {
         for (var constant in member.constants) {
-          appendName(names.classMemberNames, constant.name);
+          appendName(names.classMemberNames, constant.name2);
         }
         member.members.forEach(appendClassMemberName);
       }
@@ -42,7 +43,7 @@
       }
     } else if (member is TopLevelVariableDeclaration) {
       for (VariableDeclaration variable in member.variables.variables) {
-        appendName(names.topLevelNames, variable.name);
+        appendName(names.topLevelNames, variable.name2);
       }
     }
   }
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 08bc00e..9d94dc4 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -910,13 +910,13 @@
         if (declaration.macroKeyword != null) {
           var constructors = declaration.members
               .whereType<ConstructorDeclaration>()
-              .map((e) => e.name?.name ?? '')
+              .map((e) => e.name2?.lexeme ?? '')
               .where((e) => !e.startsWith('_'))
               .toList();
           if (constructors.isNotEmpty) {
             macroClasses.add(
               MacroClass(
-                name: declaration.name.name,
+                name: declaration.name2.lexeme,
                 constructors: constructors,
               ),
             );
@@ -940,21 +940,21 @@
     final topLevelDeclarations = <String>{};
     for (final declaration in unit.declarations) {
       if (declaration is ClassDeclaration) {
-        topLevelDeclarations.add(declaration.name.name);
+        topLevelDeclarations.add(declaration.name2.lexeme);
       } else if (declaration is EnumDeclaration) {
-        topLevelDeclarations.add(declaration.name.name);
+        topLevelDeclarations.add(declaration.name2.lexeme);
       } else if (declaration is ExtensionDeclaration) {
-        var name = declaration.name;
+        var name = declaration.name2;
         if (name != null) {
-          topLevelDeclarations.add(name.name);
+          topLevelDeclarations.add(name.lexeme);
         }
       } else if (declaration is FunctionDeclaration) {
-        topLevelDeclarations.add(declaration.name.name);
+        topLevelDeclarations.add(declaration.name2.lexeme);
       } else if (declaration is MixinDeclaration) {
-        topLevelDeclarations.add(declaration.name.name);
+        topLevelDeclarations.add(declaration.name2.lexeme);
       } else if (declaration is TopLevelVariableDeclaration) {
         for (var variable in declaration.variables.variables) {
-          topLevelDeclarations.add(variable.name.name);
+          topLevelDeclarations.add(variable.name2.lexeme);
         }
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 265798f..e0ab233 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -18,7 +19,7 @@
   SimpleIdentifier node,
   Element? element,
 ) {
-  if (element == null || element.enclosingElement2 != null) {
+  if (element == null || element.enclosingElement3 != null) {
     return element;
   }
 
@@ -63,7 +64,7 @@
 /// Return the [CompilationUnitElement] that should be used for [element].
 /// Throw [StateError] if the [element] is not linked into a unit.
 CompilationUnitElement getUnitElement(Element element) {
-  for (Element? e = element; e != null; e = e.enclosingElement2) {
+  for (Element? e = element; e != null; e = e.enclosingElement3) {
     if (e is CompilationUnitElement) {
       return e;
     }
@@ -88,21 +89,21 @@
     String? parameterName;
     if (element is ParameterElement) {
       parameterName = element.name;
-      element = element.enclosingElement2!;
+      element = element.enclosingElement3!;
     }
 
     String? classMemberName;
-    if (element.enclosingElement2 is ClassElement ||
-        element.enclosingElement2 is ExtensionElement) {
+    if (element.enclosingElement3 is ClassElement ||
+        element.enclosingElement3 is ExtensionElement) {
       classMemberName = element.name;
-      element = element.enclosingElement2!;
+      element = element.enclosingElement3!;
     }
 
     String? unitMemberName;
-    if (element.enclosingElement2 is CompilationUnitElement) {
+    if (element.enclosingElement3 is CompilationUnitElement) {
       unitMemberName = element.name;
       if (element is ExtensionElement && unitMemberName == null) {
-        var enclosingUnit = element.enclosingElement2;
+        var enclosingUnit = element.enclosingElement3;
         var indexOf = enclosingUnit.extensions.indexOf(element);
         unitMemberName = 'extension-$indexOf';
       }
@@ -139,7 +140,7 @@
     } else if (element.isSynthetic) {
       if (elementKind == ElementKind.CONSTRUCTOR) {
         kind = IndexSyntheticElementKind.constructor;
-        element = element.enclosingElement2!;
+        element = element.enclosingElement3!;
       } else if (element is FunctionElement &&
           element.name == FunctionElement.LOAD_LIBRARY_NAME) {
         kind = IndexSyntheticElementKind.loadLibrary;
@@ -151,7 +152,7 @@
       } else if (elementKind == ElementKind.GETTER ||
           elementKind == ElementKind.SETTER) {
         var accessor = element as PropertyAccessorElement;
-        Element enclosing = element.enclosingElement2;
+        Element enclosing = element.enclosingElement3;
         bool isEnumGetter = enclosing is ClassElement && enclosing.isEnum;
         if (isEnumGetter && accessor.name == 'index') {
           kind = IndexSyntheticElementKind.enumIndex;
@@ -166,7 +167,7 @@
           element = accessor.variable;
         }
       } else if (element is MethodElement) {
-        Element enclosing = element.enclosingElement2;
+        Element enclosing = element.enclosingElement3;
         bool isEnumMethod = enclosing is ClassElement && enclosing.isEnum;
         if (isEnumMethod && element.name == 'toString') {
           kind = IndexSyntheticElementKind.enumToString;
@@ -464,8 +465,8 @@
   /// of the given [node].  The flag [isQualified] is `true` if [node] has an
   /// explicit or implicit qualifier, so cannot be shadowed by a local
   /// declaration.
-  void recordRelation(Element? element, IndexRelationKind kind, AstNode node,
-      bool isQualified) {
+  void recordRelation(Element? element, IndexRelationKind kind,
+      SyntacticEntity node, bool isQualified) {
     if (element != null) {
       recordRelationOffset(
           element, kind, node.offset, node.length, isQualified);
@@ -491,14 +492,14 @@
         elementKind == ElementKind.TYPE_PARAMETER ||
         elementKind == ElementKind.FUNCTION &&
             element is FunctionElement &&
-            element.enclosingElement2 is ExecutableElement ||
+            element.enclosingElement3 is ExecutableElement ||
         false) {
       return;
     }
     // Ignore named parameters of synthetic functions, e.g. created for LUB.
     // These functions are not bound to a source, we cannot index them.
     if (elementKind == ElementKind.PARAMETER && element is ParameterElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement == null || enclosingElement.isSynthetic) {
         return;
       }
@@ -508,7 +509,7 @@
     // named parameters. Ignore them.
     if (elementKind == ElementKind.PARAMETER &&
         element is ParameterElement &&
-        element.enclosingElement2 is GenericFunctionTypeElement) {
+        element.enclosingElement3 is GenericFunctionTypeElement) {
       return;
     }
     // Add the relation.
@@ -564,7 +565,7 @@
     if (node.extendsClause == null) {
       ClassElement? objectElement = declaredElement.supertype?.element;
       recordRelationOffset(objectElement, IndexRelationKind.IS_EXTENDED_BY,
-          node.name.offset, 0, true);
+          node.name2.offset, 0, true);
     }
     recordIsAncestorOf(declaredElement);
     super.visitClassDeclaration(node);
@@ -654,7 +655,7 @@
         offset = constructorSelector.period.offset;
         length = constructorSelector.name.end - offset;
       } else {
-        offset = node.name.end;
+        offset = node.name2.end;
         length = 0;
       }
       recordRelationOffset(
@@ -674,7 +675,7 @@
   @override
   void visitEnumDeclaration(EnumDeclaration node) {
     _addSubtype(
-      node.name.name,
+      node.name2.lexeme,
       withClause: node.withClause,
       implementsClause: node.implementsClause,
       memberNodes: node.members,
@@ -713,8 +714,7 @@
     if (element is FieldFormalParameterElement) {
       var field = element.field;
       if (field != null) {
-        recordRelation(
-            field, IndexRelationKind.IS_WRITTEN_BY, node.identifier, true);
+        recordRelation(field, IndexRelationKind.IS_WRITTEN_BY, node.name, true);
       }
     }
 
@@ -861,11 +861,7 @@
     }
     // this.field parameter
     if (element is FieldFormalParameterElement) {
-      AstNode parent = node.parent!;
-      IndexRelationKind kind =
-          parent is FieldFormalParameter && parent.identifier == node
-              ? IndexRelationKind.IS_WRITTEN_BY
-              : IndexRelationKind.IS_REFERENCED_BY;
+      IndexRelationKind kind = IndexRelationKind.IS_REFERENCED_BY;
       recordRelation(element.field, kind, node, true);
       return;
     }
@@ -901,7 +897,7 @@
       var superParameter = element.superConstructorParameter;
       if (superParameter != null) {
         recordRelation(superParameter, IndexRelationKind.IS_REFERENCED_BY,
-            node.identifier, true);
+            node.name, true);
       }
     }
 
@@ -943,8 +939,8 @@
     onClause?.superclassConstraints.forEach(addSupertype);
     implementsClause?.interfaces.forEach(addSupertype);
 
-    void addMemberName(SimpleIdentifier identifier) {
-      String name = identifier.name;
+    void addMemberName(Token identifier) {
+      String name = identifier.lexeme;
       if (name.isNotEmpty) {
         members.add(name);
       }
@@ -952,10 +948,10 @@
 
     for (ClassMember member in memberNodes) {
       if (member is MethodDeclaration && !member.isStatic) {
-        addMemberName(member.name);
+        addMemberName(member.name2);
       } else if (member is FieldDeclaration && !member.isStatic) {
         for (var field in member.fields.variables) {
-          addMemberName(field.name);
+          addMemberName(field.name2);
         }
       }
     }
@@ -968,7 +964,7 @@
 
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassDeclaration(ClassDeclaration node) {
-    _addSubtype(node.name.name,
+    _addSubtype(node.name2.lexeme,
         superclass: node.extendsClause?.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
@@ -977,7 +973,7 @@
 
   /// Record the given class as a subclass of its direct superclasses.
   void _addSubtypeForClassTypeAlis(ClassTypeAlias node) {
-    _addSubtype(node.name.name,
+    _addSubtype(node.name2.lexeme,
         superclass: node.superclass,
         withClause: node.withClause,
         implementsClause: node.implementsClause,
@@ -986,7 +982,7 @@
 
   /// Record the given mixin as a subclass of its direct superclasses.
   void _addSubtypeForMixinDeclaration(MixinDeclaration node) {
-    _addSubtype(node.name.name,
+    _addSubtype(node.name2.lexeme,
         onClause: node.onClause,
         implementsClause: node.implementsClause,
         memberNodes: node.members);
@@ -999,8 +995,8 @@
       ConstructorElement? constructor) {
     var seenConstructors = <ConstructorElement?>{};
     while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
-      var enclosing = constructor.enclosingElement2;
-      if (enclosing.isMixinApplication) {
+      var enclosing = constructor.enclosingElement3;
+      if (enclosing is ClassElement && enclosing.isMixinApplication) {
         var superInvocation = constructor.constantInitializers
             .whereType<SuperConstructorInvocation>()
             .singleOrNull;
diff --git a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
index 945a0c8..5f37b84 100644
--- a/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/referenced_names.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 
 /// Compute the set of external names referenced in the [unit].
@@ -64,7 +65,7 @@
     _LocalNameScope scope = _LocalNameScope(enclosing);
     for (Statement statement in node.statements) {
       if (statement is FunctionDeclarationStatement) {
-        scope.add(statement.functionDeclaration.name);
+        scope.add(statement.functionDeclaration.name2);
       } else if (statement is VariableDeclarationStatement) {
         scope.addVariableNames(statement.variables);
       }
@@ -80,7 +81,7 @@
       if (member is FieldDeclaration) {
         scope.addVariableNames(member.fields);
       } else if (member is MethodDeclaration) {
-        scope.add(member.name);
+        scope.add(member.name2);
       }
     }
     return scope;
@@ -127,7 +128,7 @@
     _LocalNameScope scope = _LocalNameScope(null);
     for (CompilationUnitMember declaration in node.declarations) {
       if (declaration is NamedCompilationUnitMember) {
-        scope.add(declaration.name);
+        scope.add(declaration.name2);
       } else if (declaration is TopLevelVariableDeclaration) {
         scope.addVariableNames(declaration.variables);
       }
@@ -135,29 +136,29 @@
     return scope;
   }
 
-  void add(SimpleIdentifier? identifier) {
-    if (identifier != null) {
-      (names ??= <String>{}).add(identifier.name);
+  void add(Token? token) {
+    if (token != null) {
+      (names ??= <String>{}).add(token.lexeme);
     }
   }
 
   void addFormalParameters(FormalParameterList? parameterList) {
     if (parameterList != null) {
       parameterList.parameters
-          .map((p) => p is NormalFormalParameter ? p.identifier : null)
+          .map((p) => p is NormalFormalParameter ? p.name : null)
           .forEach(add);
     }
   }
 
   void addTypeParameters(TypeParameterList? typeParameterList) {
     if (typeParameterList != null) {
-      typeParameterList.typeParameters.map((p) => p.name).forEach(add);
+      typeParameterList.typeParameters.map((p) => p.name2).forEach(add);
     }
   }
 
   void addVariableNames(VariableDeclarationList variableList) {
     for (VariableDeclaration variable in variableList.variables) {
-      add(variable.name);
+      add(variable.name2);
     }
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/results.dart b/pkg/analyzer/lib/src/dart/analysis/results.dart
index a3d06bb..8ce9d3d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/results.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/results.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
@@ -343,22 +344,22 @@
 
     if (element is ClassElement) {
       if (node is ClassOrMixinDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       } else if (node is ClassTypeAlias) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       } else if (node is EnumDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       }
     } else if (element is ConstructorElement) {
       if (node is ConstructorDeclaration) {
-        if (node.name != null) {
-          if (_hasOffset(node.name)) {
+        if (node.name2 != null) {
+          if (_hasOffset2(node.name2)) {
             result = node;
           }
         } else {
@@ -369,48 +370,48 @@
       }
     } else if (element is ExtensionElement) {
       if (node is ExtensionDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       }
     } else if (element is FieldElement) {
       if (node is EnumConstantDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       } else if (node is VariableDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       }
     } else if (element is FunctionElement) {
-      if (node is FunctionDeclaration && _hasOffset(node.name)) {
+      if (node is FunctionDeclaration && _hasOffset2(node.name2)) {
         result = node;
       }
     } else if (element is LocalVariableElement) {
-      if (node is VariableDeclaration && _hasOffset(node.name)) {
+      if (node is VariableDeclaration && _hasOffset2(node.name2)) {
         result = node;
       }
     } else if (element is MethodElement) {
-      if (node is MethodDeclaration && _hasOffset(node.name)) {
+      if (node is MethodDeclaration && _hasOffset2(node.name2)) {
         result = node;
       }
     } else if (element is ParameterElement) {
-      if (node is FormalParameter && _hasOffset(node.identifier)) {
+      if (node is FormalParameter && _hasOffset2(node.name)) {
         result = node;
       }
     } else if (element is PropertyAccessorElement) {
       if (node is FunctionDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       } else if (node is MethodDeclaration) {
-        if (_hasOffset(node.name)) {
+        if (_hasOffset2(node.name2)) {
           result = node;
         }
       }
     } else if (element is TopLevelVariableElement) {
-      if (node is VariableDeclaration && _hasOffset(node.name)) {
+      if (node is VariableDeclaration && _hasOffset2(node.name2)) {
         result = node;
       }
     }
@@ -423,4 +424,8 @@
   bool _hasOffset(AstNode? node) {
     return node?.offset == _nameOffset;
   }
+
+  bool _hasOffset2(Token? token) {
+    return token?.offset == _nameOffset;
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index b0ad4c6..749d2b6 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -257,7 +257,7 @@
     } else if (element is PropertyInducingElement) {
       return _searchReferences_Field(element, searchedFiles);
     } else if (kind == ElementKind.FUNCTION || kind == ElementKind.METHOD) {
-      if (element.enclosingElement2 is ExecutableElement) {
+      if (element.enclosingElement3 is ExecutableElement) {
         return _searchReferences_Local(
             element, (n) => n is Block, searchedFiles);
       }
@@ -405,7 +405,7 @@
     // Prepare the element name.
     String name = element.displayName;
     if (element is ConstructorElement) {
-      name = element.enclosingElement2.displayName;
+      name = element.enclosingElement3.displayName;
     }
 
     // Prepare the list of files that reference the element name.
@@ -654,7 +654,7 @@
     ));
     if (parameter.isNamed ||
         parameter.isOptionalPositional ||
-        parameter.enclosingElement2 is ConstructorElement) {
+        parameter.enclosingElement3 is ConstructorElement) {
       results.addAll(await _searchReferences(parameter, searchedFiles));
     }
     return results;
@@ -914,7 +914,7 @@
       return;
     }
 
-    var enclosing = element.enclosingElement2;
+    var enclosing = element.enclosingElement3;
 
     String? className;
     String? mixinName;
diff --git a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
index 20b101b..a7c7a0f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/unlinked_api_signature.dart
@@ -49,7 +49,7 @@
         var functionExpression = declaration.functionExpression;
         _addTokens(
           declaration.beginToken,
-          (functionExpression.parameters ?? declaration.name).endToken,
+          functionExpression.parameters?.endToken ?? declaration.name2,
         );
         _addFunctionBodyModifiers(functionExpression.body);
       } else if (declaration is TopLevelVariableDeclaration) {
@@ -138,7 +138,7 @@
     signature.addInt(_kindMethodDeclaration);
     _addTokens(
       node.beginToken,
-      (node.parameters ?? node.name).endToken,
+      node.parameters?.endToken ?? node.name2,
     );
     signature.addBool(node.body is EmptyFunctionBody);
     _addFunctionBodyModifiers(node.body);
@@ -212,7 +212,7 @@
     signature.addInt(variables.length);
 
     for (var variable in variables) {
-      _addNode(variable.name);
+      _addToken(variable.name2);
       signature.addBool(variable.initializer != null);
       if (includeInitializers) {
         _addNode(variable.initializer);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 4e04433..35324b3 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -95,7 +95,10 @@
   /// Initialize a newly created annotated node. Either or both of the [comment]
   /// and [metadata] can be `null` if the node does not have the corresponding
   /// attribute.
-  AnnotatedNodeImpl(this._comment, List<Annotation>? metadata) {
+  AnnotatedNodeImpl({
+    required CommentImpl? comment,
+    required List<Annotation>? metadata,
+  }) : _comment = comment {
     _becomeParentOf(_comment);
     _metadata._initialize(this, metadata);
   }
@@ -893,13 +896,13 @@
   Token semicolon;
 
   AugmentationImportDirectiveImpl({
-    required CommentImpl? comment,
-    required List<Annotation>? metadata,
+    required super.comment,
+    required super.metadata,
     required this.importKeyword,
     required this.augmentKeyword,
     required this.semicolon,
-    required StringLiteralImpl uri,
-  }) : super(comment, metadata, uri) {
+    required super.uri,
+  }) {
     _becomeParentOf(_uri);
   }
 
@@ -1678,6 +1681,9 @@
   /// native clause.
   NativeClauseImpl? _nativeClause;
 
+  @override
+  ClassElement? declaredElement;
+
   /// Initialize a newly created class declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the class does not have the
   /// corresponding attribute. The [abstractKeyword] can be `null` if the class
@@ -1686,31 +1692,28 @@
   /// and [implementsClause] can be `null` if the class does not have the
   /// corresponding clause. The list of [members] can be `null` if the class
   /// does not have any members.
-  ClassDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.abstractKeyword,
-      this.macroKeyword,
-      this.augmentKeyword,
-      this.classKeyword,
-      SimpleIdentifierImpl name,
-      TypeParameterListImpl? typeParameters,
-      this._extendsClause,
-      this._withClause,
-      ImplementsClauseImpl? implementsClause,
-      Token leftBracket,
-      List<ClassMember> members,
-      Token rightBracket)
-      : super(comment, metadata, name, typeParameters, implementsClause,
-            leftBracket, members, rightBracket) {
+  ClassDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.abstractKeyword,
+    required this.macroKeyword,
+    required this.augmentKeyword,
+    required this.classKeyword,
+    required super.name,
+    required super.typeParameters,
+    required ExtendsClauseImpl? extendsClause,
+    required WithClauseImpl? withClause,
+    required super.implementsClause,
+    required super.leftBracket,
+    required super.members,
+    required super.rightBracket,
+  })  : _extendsClause = extendsClause,
+        _withClause = withClause {
     _becomeParentOf(_extendsClause);
     _becomeParentOf(_withClause);
   }
 
   @override
-  ClassElement? get declaredElement => _name.staticElement as ClassElement?;
-
-  @override
   ExtendsClauseImpl? get extendsClause => _extendsClause;
 
   set extendsClause(ExtendsClause? extendsClause) {
@@ -1746,7 +1749,7 @@
     ..addToken('macroKeyword', macroKeyword)
     ..addToken('augmentKeyword', augmentKeyword)
     ..addToken('classKeyword', classKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addNode('extendsClause', extendsClause)
     ..addNode('withClause', withClause)
@@ -1782,7 +1785,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _extendsClause?.accept(visitor);
     _withClause?.accept(visitor);
@@ -1797,7 +1801,10 @@
   /// Initialize a newly created member of a class. Either or both of the
   /// [comment] and [metadata] can be `null` if the member does not have the
   /// corresponding attribute.
-  ClassMemberImpl(super.comment, super.metadata);
+  ClassMemberImpl({
+    required super.comment,
+    required super.metadata,
+  });
 }
 
 abstract class ClassOrMixinDeclarationImpl
@@ -1821,15 +1828,17 @@
   @override
   Token rightBracket;
 
-  ClassOrMixinDeclarationImpl(
-      super.comment,
-      super.metadata,
-      super.name,
-      this._typeParameters,
-      this._implementsClause,
-      this.leftBracket,
-      List<ClassMember> members,
-      this.rightBracket) {
+  ClassOrMixinDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required super.name,
+    required TypeParameterListImpl? typeParameters,
+    required ImplementsClauseImpl? implementsClause,
+    required this.leftBracket,
+    required List<ClassMember> members,
+    required this.rightBracket,
+  })  : _typeParameters = typeParameters,
+        _implementsClause = implementsClause {
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_implementsClause);
     _members._initialize(this, members);
@@ -1886,7 +1895,7 @@
       ClassMember classMember = _members[i];
       if (classMember is MethodDeclaration) {
         MethodDeclaration method = classMember;
-        if (name == method.name.name) {
+        if (name == method.name2.lexeme) {
           return method;
         }
       }
@@ -1935,27 +1944,33 @@
   /// clause.
   ImplementsClauseImpl? _implementsClause;
 
+  @override
+  ClassElement? declaredElement;
+
   /// Initialize a newly created class type alias. Either or both of the
   /// [comment] and [metadata] can be `null` if the class type alias does not
   /// have the corresponding attribute. The [typeParameters] can be `null` if
   /// the class does not have any type parameters. The [abstractKeyword] can be
   /// `null` if the class is not abstract. The [implementsClause] can be `null`
   /// if the class does not implement any interfaces.
-  ClassTypeAliasImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      Token keyword,
-      SimpleIdentifierImpl name,
-      this._typeParameters,
-      this.equals,
-      this.abstractKeyword,
-      this.macroKeyword,
-      this.augmentKeyword,
-      this._superclass,
-      this._withClause,
-      this._implementsClause,
-      Token semicolon)
-      : super(comment, metadata, keyword, name, semicolon) {
+  ClassTypeAliasImpl({
+    required super.comment,
+    required super.metadata,
+    required super.typedefKeyword,
+    required super.name,
+    required TypeParameterListImpl? typeParameters,
+    required this.equals,
+    required this.abstractKeyword,
+    required this.macroKeyword,
+    required this.augmentKeyword,
+    required NamedTypeImpl superclass,
+    required WithClauseImpl withClause,
+    required ImplementsClauseImpl? implementsClause,
+    required super.semicolon,
+  })  : _typeParameters = typeParameters,
+        _superclass = superclass,
+        _withClause = withClause,
+        _implementsClause = implementsClause {
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_superclass);
     _becomeParentOf(_withClause);
@@ -1963,9 +1978,6 @@
   }
 
   @override
-  ClassElement? get declaredElement => _name.staticElement as ClassElement?;
-
-  @override
   Token get firstTokenAfterCommentAndMetadata {
     return abstractKeyword ?? macroKeyword ?? augmentKeyword ?? typedefKeyword;
   }
@@ -2010,7 +2022,7 @@
   @override
   ChildEntities get _childEntities => super._childEntities
     ..addToken('typedefKeyword', typedefKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addToken('equals', equals)
     ..addToken('abstractKeyword', abstractKeyword)
@@ -2027,7 +2039,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _superclass.accept(visitor);
     _withClause.accept(visitor);
@@ -2409,7 +2422,10 @@
   /// Initialize a newly created generic compilation unit member. Either or both
   /// of the [comment] and [metadata] can be `null` if the member does not have
   /// the corresponding attribute.
-  CompilationUnitMemberImpl(super.comment, super.metadata);
+  CompilationUnitMemberImpl({
+    required super.comment,
+    required super.metadata,
+  });
 }
 
 mixin CompoundAssignmentExpressionImpl implements CompoundAssignmentExpression {
@@ -2700,7 +2716,7 @@
   /// [comment] and [metadata] can be `null` if the constructor does not have
   /// the corresponding attribute. The [constKeyword] can be `null` if the
   /// constructor cannot be used to create a constant. The [factoryKeyword] can
-  /// be `null` if the constructor is not a factory. The [period] and [name] can
+  /// be `null` if the constructor is not a factory. The [period] and [name2] can
   /// both be `null` if the constructor is not a named constructor. The
   /// [separator] can be `null` if the constructor does not have any
   /// initializers and does not redirect to a different constructor. The list of
@@ -2708,20 +2724,25 @@
   /// initializers. The [redirectedConstructor] can be `null` if the constructor
   /// does not redirect to a different constructor. The [body] can be `null` if
   /// the constructor does not have a body.
-  ConstructorDeclarationImpl(
-      super.comment,
-      super.metadata,
-      this.externalKeyword,
-      this.constKeyword,
-      this.factoryKeyword,
-      this._returnType,
-      this.period,
-      this._name,
-      this._parameters,
-      this.separator,
-      List<ConstructorInitializer>? initializers,
-      this._redirectedConstructor,
-      this._body) {
+  ConstructorDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.externalKeyword,
+    required this.constKeyword,
+    required this.factoryKeyword,
+    required IdentifierImpl returnType,
+    required this.period,
+    required SimpleIdentifierImpl? name,
+    required FormalParameterListImpl parameters,
+    required this.separator,
+    required List<ConstructorInitializer>? initializers,
+    required ConstructorNameImpl? redirectedConstructor,
+    required FunctionBodyImpl body,
+  })  : _returnType = returnType,
+        _name = name,
+        _parameters = parameters,
+        _redirectedConstructor = redirectedConstructor,
+        _body = body {
     _becomeParentOf(_returnType);
     _becomeParentOf(_name);
     _becomeParentOf(_parameters);
@@ -2752,13 +2773,20 @@
   @override
   NodeListImpl<ConstructorInitializer> get initializers => _initializers;
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl? get name => _name;
-
-  set name(SimpleIdentifier? identifier) {
-    _name = _becomeParentOf(identifier as SimpleIdentifierImpl?);
+  SimpleIdentifierImpl? get name {
+    _name?.staticElement = declaredElement;
+    return _name;
   }
 
+  set name(SimpleIdentifier? name) {
+    _name = _becomeParentOf(name as SimpleIdentifierImpl);
+  }
+
+  @override
+  Token? get name2 => _name?.token;
+
   @override
   FormalParameterListImpl get parameters => _parameters;
 
@@ -2788,7 +2816,7 @@
     ..addToken('factoryKeyword', factoryKeyword)
     ..addNode('returnType', returnType)
     ..addToken('period', period)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('parameters', parameters)
     ..addToken('separator', separator)
     ..addNodeList('initializers', initializers)
@@ -3123,7 +3151,10 @@
   /// Initialize a newly created declaration. Either or both of the [comment]
   /// and [metadata] can be `null` if the declaration does not have the
   /// corresponding attribute.
-  DeclarationImpl(super.comment, super.metadata);
+  DeclarationImpl({
+    required super.comment,
+    required super.metadata,
+  });
 }
 
 /// The declaration of a single identifier.
@@ -3144,22 +3175,26 @@
   /// The name of the variable being declared.
   SimpleIdentifierImpl _identifier;
 
+  @override
+  LocalVariableElement? declaredElement;
+
   /// Initialize a newly created formal parameter. Either or both of the
   /// [comment] and [metadata] can be `null` if the declaration does not have
   /// the corresponding attribute. The [keyword] can be `null` if a type name is
   /// given. The [type] must be `null` if the keyword is 'var'.
-  DeclaredIdentifierImpl(super.comment, super.metadata, this.keyword,
-      this._type, this._identifier) {
+  DeclaredIdentifierImpl({
+    required super.comment,
+    required super.metadata,
+    required this.keyword,
+    required TypeAnnotationImpl? type,
+    required SimpleIdentifierImpl identifier,
+  })  : _type = type,
+        _identifier = identifier {
     _becomeParentOf(_type);
     _becomeParentOf(_identifier);
   }
 
   @override
-  LocalVariableElement? get declaredElement {
-    return _identifier.staticElement as LocalVariableElement;
-  }
-
-  @override
   Token get endToken => _identifier.endToken;
 
   @override
@@ -3167,8 +3202,12 @@
     return keyword ?? _type?.beginToken ?? _identifier.beginToken;
   }
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl get identifier => _identifier;
+  SimpleIdentifierImpl get identifier {
+    _identifier.staticElement = declaredElement;
+    return _identifier;
+  }
 
   set identifier(SimpleIdentifier identifier) {
     _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
@@ -3181,6 +3220,9 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
+  Token get name => _identifier.token;
+
+  @override
   TypeAnnotationImpl? get type => _type;
 
   set type(TypeAnnotation? type) {
@@ -3191,7 +3233,7 @@
   ChildEntities get _childEntities => super._childEntities
     ..addToken('keyword', keyword)
     ..addNode('type', type)
-    ..addNode('identifier', identifier);
+    ..addToken('name', name);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) => visitor.visitDeclaredIdentifier(this);
@@ -3200,7 +3242,8 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _type?.accept(visitor);
-    _identifier.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    identifier.accept(visitor);
   }
 }
 
@@ -3279,6 +3322,7 @@
     return _parameter.endToken;
   }
 
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifierImpl? get identifier => _parameter.identifier;
 
@@ -3295,6 +3339,9 @@
   NodeListImpl<Annotation> get metadata => _parameter.metadata;
 
   @override
+  Token? get name => _parameter.name;
+
+  @override
   NormalFormalParameterImpl get parameter => _parameter;
 
   set parameter(NormalFormalParameter formalParameter) {
@@ -3338,7 +3385,10 @@
   /// Initialize a newly create directive. Either or both of the [comment] and
   /// [metadata] can be `null` if the directive does not have the corresponding
   /// attribute.
-  DirectiveImpl(super.comment, super.metadata);
+  DirectiveImpl({
+    required super.comment,
+    required super.metadata,
+  });
 
   @Deprecated('Use element2 instead')
   @override
@@ -3643,6 +3693,9 @@
   SimpleIdentifierImpl _name;
 
   @override
+  FieldElement? declaredElement;
+
+  @override
   final EnumConstantArgumentsImpl? arguments;
 
   @override
@@ -3652,35 +3705,38 @@
   /// the [documentationComment] and [metadata] can be `null` if the constant
   /// does not have the corresponding attribute.
   EnumConstantDeclarationImpl({
-    required CommentImpl? documentationComment,
-    required List<Annotation>? metadata,
+    required super.comment,
+    required super.metadata,
     required SimpleIdentifierImpl name,
     required this.arguments,
-  })  : _name = name,
-        super(documentationComment, metadata) {
+  }) : _name = name {
     _becomeParentOf(_name);
     _becomeParentOf(arguments);
   }
 
   @override
-  FieldElement get declaredElement => _name.staticElement as FieldElement;
-
-  @override
   Token get endToken => (arguments ?? _name).endToken;
 
   @override
   Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl get name => _name;
+  SimpleIdentifierImpl get name {
+    _name.staticElement = declaredElement;
+    return _name;
+  }
 
   set name(SimpleIdentifier name) {
     _name = _becomeParentOf(name as SimpleIdentifierImpl);
   }
 
   @override
+  Token get name2 => _name.token;
+
+  @override
   ChildEntities get _childEntities => super._childEntities
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('arguments', arguments);
 
   @override
@@ -3690,7 +3746,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     arguments?.accept(visitor);
   }
 }
@@ -3736,24 +3793,29 @@
   @override
   Token rightBracket;
 
+  @override
+  ClassElement? declaredElement;
+
   /// Initialize a newly created enumeration declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the declaration does not have
   /// the corresponding attribute. The list of [constants] must contain at least
   /// one value.
-  EnumDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.enumKeyword,
-      SimpleIdentifierImpl name,
-      this._typeParameters,
-      this._withClause,
-      this._implementsClause,
-      this.leftBracket,
-      List<EnumConstantDeclaration> constants,
-      this.semicolon,
-      List<ClassMember> members,
-      this.rightBracket)
-      : super(comment, metadata, name) {
+  EnumDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.enumKeyword,
+    required super.name,
+    required TypeParameterListImpl? typeParameters,
+    required WithClauseImpl? withClause,
+    required ImplementsClauseImpl? implementsClause,
+    required this.leftBracket,
+    required List<EnumConstantDeclaration> constants,
+    required this.semicolon,
+    required List<ClassMember> members,
+    required this.rightBracket,
+  })  : _typeParameters = typeParameters,
+        _withClause = withClause,
+        _implementsClause = implementsClause {
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_withClause);
     _becomeParentOf(_implementsClause);
@@ -3765,9 +3827,6 @@
   NodeListImpl<EnumConstantDeclaration> get constants => _constants;
 
   @override
-  ClassElement? get declaredElement => _name.staticElement as ClassElement?;
-
-  @override
   Token get endToken => rightBracket;
 
   @override
@@ -3802,7 +3861,7 @@
   // TODO(brianwilkerson) Add commas?
   ChildEntities get _childEntities => super._childEntities
     ..addToken('enumKeyword', enumKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addNode('withClause', withClause)
     ..addNode('implementsClause', implementsClause)
@@ -3818,7 +3877,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _withClause?.accept(visitor);
     _implementsClause?.accept(visitor);
@@ -3849,14 +3909,15 @@
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute. The list of [combinators] can be `null` if there
   /// are no combinators.
-  ExportDirectiveImpl(
-      super.comment,
-      super.metadata,
-      this.exportKeyword,
-      super.libraryUri,
-      super.configurations,
-      super.combinators,
-      super.semicolon);
+  ExportDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required this.exportKeyword,
+    required super.uri,
+    required super.configurations,
+    required super.combinators,
+    required super.semicolon,
+  });
 
   @Deprecated('Use element2 instead')
   @override
@@ -4255,20 +4316,25 @@
 
   ExtensionElement? _declaredElement;
 
-  ExtensionDeclarationImpl(
-      super.comment,
-      super.metadata,
-      this.extensionKeyword,
-      this.typeKeyword,
-      this._name,
-      this._typeParameters,
-      this.onKeyword,
-      this._extendedType,
-      this._showClause,
-      this._hideClause,
-      this.leftBracket,
-      List<ClassMember> members,
-      this.rightBracket) {
+  ExtensionDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.extensionKeyword,
+    required this.typeKeyword,
+    required SimpleIdentifierImpl? name,
+    required TypeParameterListImpl? typeParameters,
+    required this.onKeyword,
+    required TypeAnnotationImpl extendedType,
+    required ShowClauseImpl? showClause,
+    required HideClauseImpl? hideClause,
+    required this.leftBracket,
+    required List<ClassMember> members,
+    required this.rightBracket,
+  })  : _name = name,
+        _typeParameters = typeParameters,
+        _extendedType = extendedType,
+        _showClause = showClause,
+        _hideClause = hideClause {
     _becomeParentOf(_name);
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_extendedType);
@@ -4306,14 +4372,21 @@
   @override
   NodeListImpl<ClassMember> get members => _members;
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl? get name => _name;
+  SimpleIdentifierImpl? get name {
+    _name?.staticElement = declaredElement;
+    return _name;
+  }
 
   set name(SimpleIdentifier? identifier) {
     _name = _becomeParentOf(identifier as SimpleIdentifierImpl?);
   }
 
   @override
+  Token? get name2 => _name?.token;
+
+  @override
   ShowClauseImpl? get showClause => _showClause;
 
   set showClause(ShowClause? showClause) {
@@ -4330,7 +4403,7 @@
   @override
   ChildEntities get _childEntities => ChildEntities()
     ..addToken('extensionKeyword', extensionKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addToken('onKeyword', onKeyword)
     ..addNode('extendedType', extendedType)
@@ -4345,6 +4418,7 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
+    // ignore: deprecated_member_use_from_same_package
     name?.accept(visitor);
     _typeParameters?.accept(visitor);
     _extendedType.accept(visitor);
@@ -4483,16 +4557,17 @@
   /// [comment] and [metadata] can be `null` if the declaration does not have
   /// the corresponding attribute. The [staticKeyword] can be `null` if the
   /// field is not a static field.
-  FieldDeclarationImpl(
-      super.comment,
-      super.metadata,
-      this.abstractKeyword,
-      this.augmentKeyword,
-      this.covariantKeyword,
-      this.externalKeyword,
-      this.staticKeyword,
-      this._fieldList,
-      this.semicolon) {
+  FieldDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.abstractKeyword,
+    required this.augmentKeyword,
+    required this.covariantKeyword,
+    required this.externalKeyword,
+    required this.staticKeyword,
+    required VariableDeclarationListImpl fieldList,
+    required this.semicolon,
+  }) : _fieldList = fieldList {
     _becomeParentOf(_fieldList);
   }
 
@@ -4617,9 +4692,10 @@
 
   @override
   Token get endToken {
-    return question ?? _parameters?.endToken ?? identifier.endToken;
+    return question ?? _parameters?.endToken ?? name;
   }
 
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifierImpl get identifier => super.identifier!;
 
@@ -4633,6 +4709,9 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
+  Token get name => super.name!;
+
+  @override
   FormalParameterListImpl? get parameters => _parameters;
 
   set parameters(FormalParameterList? parameters) {
@@ -4659,7 +4738,7 @@
     ..addNode('type', type)
     ..addToken('thisKeyword', thisKeyword)
     ..addToken('period', period)
-    ..addNode('identifier', identifier)
+    ..addToken('name', name)
     ..addNode('parameters', parameters);
 
   @override
@@ -4670,6 +4749,7 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _type?.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
     identifier.accept(visitor);
     _typeParameters?.accept(visitor);
     _parameters?.accept(visitor);
@@ -4873,17 +4953,24 @@
 abstract class FormalParameterImpl extends AstNodeImpl
     implements FormalParameter {
   @override
-  ParameterElement? get declaredElement {
-    final identifier = this.identifier;
-    if (identifier == null) {
-      return null;
-    }
-    return identifier.staticElement as ParameterElement?;
-  }
+  ParameterElement? declaredElement;
 
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifierImpl? get identifier;
 
+  /// TODO(scheglov) I was not able to update 'nnbd_migration' any better.
+  SimpleIdentifier? get identifierForMigration {
+    final token = name;
+    if (token != null) {
+      final result = SimpleIdentifierImpl(token);
+      result.staticElement = declaredElement;
+      _becomeParentOf(result);
+      return result;
+    }
+    return null;
+  }
+
   @override
   bool get isNamed => kind.isNamed;
 
@@ -4910,19 +4997,6 @@
 
   /// Return the kind of this parameter.
   ParameterKind get kind;
-
-  static void setDeclaredElement(
-    FormalParameterImpl node,
-    ParameterElement element,
-  ) {
-    if (node is DefaultFormalParameterImpl) {
-      setDeclaredElement(node.parameter, element);
-    } else if (node is SimpleFormalParameterImpl) {
-      node.declaredElement = element;
-    } else {
-      node.identifier!.staticElement = element;
-    }
-  }
 }
 
 /// The formal parameter list of a method declaration, function declaration, or
@@ -5331,31 +5405,31 @@
   /// The function expression being wrapped.
   FunctionExpressionImpl _functionExpression;
 
+  @override
+  ExecutableElement? declaredElement;
+
   /// Initialize a newly created function declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the function does not have the
   /// corresponding attribute. The [externalKeyword] can be `null` if the
   /// function is not an external function. The [returnType] can be `null` if no
   /// return type was specified. The [propertyKeyword] can be `null` if the
   /// function is neither a getter or a setter.
-  FunctionDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.augmentKeyword,
-      this.externalKeyword,
-      this._returnType,
-      this.propertyKeyword,
-      SimpleIdentifierImpl name,
-      this._functionExpression)
-      : super(comment, metadata, name) {
+  FunctionDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.augmentKeyword,
+    required this.externalKeyword,
+    required TypeAnnotationImpl? returnType,
+    required this.propertyKeyword,
+    required super.name,
+    required FunctionExpressionImpl functionExpression,
+  })  : _returnType = returnType,
+        _functionExpression = functionExpression {
     _becomeParentOf(_returnType);
     _becomeParentOf(_functionExpression);
   }
 
   @override
-  ExecutableElement? get declaredElement =>
-      _name.staticElement as ExecutableElement?;
-
-  @override
   Token get endToken => _functionExpression.endToken;
 
   @override
@@ -5394,7 +5468,7 @@
     ..addToken('externalKeyword', externalKeyword)
     ..addNode('returnType', returnType)
     ..addToken('propertyKeyword', propertyKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('functionExpression', functionExpression);
 
   @override
@@ -5404,7 +5478,8 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _returnType?.accept(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _functionExpression.accept(visitor);
   }
 }
@@ -5692,31 +5767,32 @@
   /// The parameters associated with the function type.
   FormalParameterListImpl _parameters;
 
+  @override
+  TypeAliasElement? declaredElement;
+
   /// Initialize a newly created function type alias. Either or both of the
   /// [comment] and [metadata] can be `null` if the function does not have the
   /// corresponding attribute. The [returnType] can be `null` if no return type
   /// was specified. The [typeParameters] can be `null` if the function has no
   /// type parameters.
-  FunctionTypeAliasImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      Token keyword,
-      this._returnType,
-      SimpleIdentifierImpl name,
-      this._typeParameters,
-      this._parameters,
-      Token semicolon)
-      : super(comment, metadata, keyword, name, semicolon) {
+  FunctionTypeAliasImpl({
+    required super.comment,
+    required super.metadata,
+    required super.typedefKeyword,
+    required TypeAnnotationImpl? returnType,
+    required super.name,
+    required TypeParameterListImpl? typeParameters,
+    required FormalParameterListImpl parameters,
+    required super.semicolon,
+  })  : _returnType = returnType,
+        _typeParameters = typeParameters,
+        _parameters = parameters {
     _becomeParentOf(_returnType);
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_parameters);
   }
 
   @override
-  TypeAliasElement? get declaredElement =>
-      _name.staticElement as TypeAliasElement?;
-
-  @override
   FormalParameterListImpl get parameters => _parameters;
 
   set parameters(FormalParameterList parameters) {
@@ -5741,7 +5817,7 @@
   ChildEntities get _childEntities => super._childEntities
     ..addToken('typedefKeyword', typedefKeyword)
     ..addNode('returnType', returnType)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addNode('parameters', parameters)
     ..addToken('semicolon', semicolon);
@@ -5753,7 +5829,8 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _returnType?.accept(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _parameters.accept(visitor);
   }
@@ -5813,12 +5890,13 @@
     } else if (_returnType != null) {
       return _returnType!.beginToken;
     }
-    return identifier.beginToken;
+    return name;
   }
 
   @override
   Token get endToken => question ?? _parameters.endToken;
 
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifierImpl get identifier => super.identifier!;
 
@@ -5832,6 +5910,9 @@
   bool get isFinal => false;
 
   @override
+  Token get name => super.name!;
+
+  @override
   FormalParameterListImpl get parameters => _parameters;
 
   set parameters(FormalParameterList parameters) {
@@ -5855,7 +5936,7 @@
   @override
   ChildEntities get _childEntities => super._childEntities
     ..addNode('returnType', returnType)
-    ..addNode('identifier', identifier)
+    ..addToken('name', name)
     ..addNode('parameters', parameters);
 
   @override
@@ -5866,6 +5947,7 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _returnType?.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
     identifier.accept(visitor);
     _typeParameters?.accept(visitor);
     _parameters.accept(visitor);
@@ -6003,27 +6085,28 @@
   @override
   Token equals;
 
+  @override
+  Element? declaredElement;
+
   /// Returns a newly created generic type alias. Either or both of the
   /// [comment] and [metadata] can be `null` if the variable list does not have
   /// the corresponding attribute. The [typeParameters] can be `null` if there
   /// are no type parameters.
-  GenericTypeAliasImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      Token typedefToken,
-      SimpleIdentifierImpl name,
-      this._typeParameters,
-      this.equals,
-      this._type,
-      Token semicolon)
-      : super(comment, metadata, typedefToken, name, semicolon) {
+  GenericTypeAliasImpl({
+    required super.comment,
+    required super.metadata,
+    required super.typedefKeyword,
+    required super.name,
+    required TypeParameterListImpl? typeParameters,
+    required this.equals,
+    required TypeAnnotationImpl type,
+    required super.semicolon,
+  })  : _typeParameters = typeParameters,
+        _type = type {
     _becomeParentOf(_typeParameters);
     _becomeParentOf(_type);
   }
 
-  @override
-  Element? get declaredElement => name.staticElement;
-
   /// The type of function being defined by the alias.
   ///
   /// If the non-function type aliases feature is enabled, a type alias may have
@@ -6058,7 +6141,7 @@
   ChildEntities get _childEntities => ChildEntities()
     ..addNodeList('metadata', metadata)
     ..addToken('typedefKeyword', typedefKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addToken('equals', equals)
     ..addNode('type', type);
@@ -6071,6 +6154,7 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
+    // ignore: deprecated_member_use_from_same_package
     name.accept(visitor);
     _typeParameters?.accept(visitor);
     _type.accept(visitor);
@@ -6493,19 +6577,18 @@
   /// is not deferred. The [asKeyword] and [prefix] can be `null` if the import
   /// does not specify a prefix. The list of [combinators] can be `null` if
   /// there are no combinators.
-  ImportDirectiveImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.importKeyword,
-      StringLiteralImpl libraryUri,
-      List<Configuration>? configurations,
-      this.deferredKeyword,
-      this.asKeyword,
-      this._prefix,
-      List<Combinator>? combinators,
-      Token semicolon)
-      : super(comment, metadata, libraryUri, configurations, combinators,
-            semicolon) {
+  ImportDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required this.importKeyword,
+    required super.uri,
+    required super.configurations,
+    required this.deferredKeyword,
+    required this.asKeyword,
+    required SimpleIdentifierImpl? prefix,
+    required super.combinators,
+    required super.semicolon,
+  }) : _prefix = prefix {
     _becomeParentOf(_prefix);
   }
 
@@ -7374,13 +7457,13 @@
   Token semicolon;
 
   LibraryAugmentationDirectiveImpl({
-    required CommentImpl? comment,
-    required List<Annotation>? metadata,
+    required super.comment,
+    required super.metadata,
     required this.libraryKeyword,
     required this.augmentKeyword,
-    required StringLiteralImpl uri,
+    required super.uri,
     required this.semicolon,
-  }) : super(comment, metadata, uri);
+  });
 
   @override
   Token get endToken => semicolon;
@@ -7432,8 +7515,13 @@
   /// Initialize a newly created library directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  LibraryDirectiveImpl(super.comment, super.metadata, this.libraryKeyword,
-      this._name, this.semicolon) {
+  LibraryDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required this.libraryKeyword,
+    required LibraryIdentifierImpl name,
+    required this.semicolon,
+  }) : _name = name {
     _becomeParentOf(_name);
   }
 
@@ -7749,6 +7837,14 @@
   /// The body of the method.
   FunctionBodyImpl _body;
 
+  /// Return the element associated with this method, or `null` if the AST
+  /// structure has not been resolved. The element can either be a
+  /// [MethodElement], if this represents the declaration of a normal method, or
+  /// a [PropertyAccessorElement] if this represents the declaration of either a
+  /// getter or a setter.
+  @override
+  ExecutableElement? declaredElement;
+
   /// Initialize a newly created method declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the declaration does not have
   /// the corresponding attribute. The [externalKeyword] can be `null` if the
@@ -7758,18 +7854,23 @@
   /// method is neither a getter or a setter. The [operatorKeyword] can be
   /// `null` if the method does not implement an operator. The [parameters] must
   /// be `null` if this method declares a getter.
-  MethodDeclarationImpl(
-      super.comment,
-      super.metadata,
-      this.externalKeyword,
-      this.modifierKeyword,
-      this._returnType,
-      this.propertyKeyword,
-      this.operatorKeyword,
-      this._name,
-      this._typeParameters,
-      this._parameters,
-      this._body) {
+  MethodDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.externalKeyword,
+    required this.modifierKeyword,
+    required TypeAnnotationImpl? returnType,
+    required this.propertyKeyword,
+    required this.operatorKeyword,
+    required SimpleIdentifierImpl name,
+    required TypeParameterListImpl? typeParameters,
+    required FormalParameterListImpl? parameters,
+    required FunctionBodyImpl body,
+  })  : _returnType = returnType,
+        _name = name,
+        _typeParameters = typeParameters,
+        _parameters = parameters,
+        _body = body {
     _becomeParentOf(_returnType);
     _becomeParentOf(_name);
     _becomeParentOf(_typeParameters);
@@ -7784,15 +7885,6 @@
     _body = _becomeParentOf(functionBody as FunctionBodyImpl);
   }
 
-  /// Return the element associated with this method, or `null` if the AST
-  /// structure has not been resolved. The element can either be a
-  /// [MethodElement], if this represents the declaration of a normal method, or
-  /// a [PropertyAccessorElement] if this represents the declaration of either a
-  /// getter or a setter.
-  @override
-  ExecutableElement? get declaredElement =>
-      _name.staticElement as ExecutableElement?;
-
   @override
   Token get endToken => _body.endToken;
 
@@ -7823,14 +7915,21 @@
   @override
   bool get isStatic => modifierKeyword?.keyword == Keyword.STATIC;
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl get name => _name;
+  SimpleIdentifierImpl get name {
+    _name.staticElement = declaredElement;
+    return _name;
+  }
 
   set name(SimpleIdentifier identifier) {
     _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
+  Token get name2 => _name.token;
+
+  @override
   FormalParameterListImpl? get parameters => _parameters;
 
   set parameters(FormalParameterList? parameters) {
@@ -7858,7 +7957,7 @@
     ..addNode('returnType', returnType)
     ..addToken('propertyKeyword', propertyKeyword)
     ..addToken('operatorKeyword', operatorKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('parameters', parameters)
     ..addNode('body', body);
 
@@ -7869,7 +7968,8 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _returnType?.accept(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _parameters?.accept(visitor);
     _body.accept(visitor);
@@ -8048,6 +8148,9 @@
   /// super-class constraints.
   OnClauseImpl? _onClause;
 
+  @override
+  ClassElement? declaredElement;
+
   /// Initialize a newly created mixin declaration. Either or both of the
   /// [comment] and [metadata] can be `null` if the mixin does not have the
   /// corresponding attribute. The [typeParameters] can be `null` if the mixin
@@ -8055,27 +8158,23 @@
   /// and [implementsClause] can be `null` if the mixin does not have the
   /// corresponding clause. The list of [members] can be `null` if the mixin
   /// does not have any members.
-  MixinDeclarationImpl(
-      CommentImpl? comment,
-      List<Annotation>? metadata,
-      this.augmentKeyword,
-      this.mixinKeyword,
-      SimpleIdentifierImpl name,
-      TypeParameterListImpl? typeParameters,
-      this._onClause,
-      ImplementsClauseImpl? implementsClause,
-      Token leftBracket,
-      List<ClassMember> members,
-      Token rightBracket)
-      : super(comment, metadata, name, typeParameters, implementsClause,
-            leftBracket, members, rightBracket) {
+  MixinDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.augmentKeyword,
+    required this.mixinKeyword,
+    required super.name,
+    required super.typeParameters,
+    required OnClauseImpl? onClause,
+    required super.implementsClause,
+    required super.leftBracket,
+    required super.members,
+    required super.rightBracket,
+  }) : _onClause = onClause {
     _becomeParentOf(_onClause);
   }
 
   @override
-  ClassElement? get declaredElement => _name.staticElement as ClassElement?;
-
-  @override
   Token get firstTokenAfterCommentAndMetadata {
     return mixinKeyword;
   }
@@ -8099,7 +8198,7 @@
   @override
   ChildEntities get _childEntities => super._childEntities
     ..addToken('mixinKeyword', mixinKeyword)
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addNode('typeParameters', typeParameters)
     ..addNode('onClause', onClause)
     ..addNode('implementsClause', implementsClause)
@@ -8113,7 +8212,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _typeParameters?.accept(visitor);
     _onClause?.accept(visitor);
     _implementsClause?.accept(visitor);
@@ -8127,19 +8227,30 @@
   /// The name of the member being declared.
   SimpleIdentifierImpl _name;
 
-  /// Initialize a newly created compilation unit member with the given [name].
+  /// Initialize a newly created compilation unit member with the given [name2].
   /// Either or both of the [comment] and [metadata] can be `null` if the member
   /// does not have the corresponding attribute.
-  NamedCompilationUnitMemberImpl(super.comment, super.metadata, this._name) {
+  NamedCompilationUnitMemberImpl({
+    required super.comment,
+    required super.metadata,
+    required SimpleIdentifierImpl name,
+  }) : _name = name {
     _becomeParentOf(_name);
   }
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl get name => _name;
+  SimpleIdentifierImpl get name {
+    _name.staticElement = declaredElement;
+    return _name;
+  }
 
   set name(SimpleIdentifier identifier) {
     _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
+
+  @override
+  Token get name2 => _name.token;
 }
 
 /// An expression that has a name associated with it. They are used in method
@@ -8317,13 +8428,14 @@
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute. The list of [combinators] can be `null` if there
   /// are no combinators.
-  NamespaceDirectiveImpl(
-      super.comment,
-      super.metadata,
-      super.libraryUri,
-      List<Configuration>? configurations,
-      List<Combinator>? combinators,
-      this.semicolon) {
+  NamespaceDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required super.uri,
+    required List<Configuration>? configurations,
+    required List<Combinator>? combinators,
+    required this.semicolon,
+  }) {
     _configurations._initialize(this, configurations);
     _combinators._initialize(this, combinators);
   }
@@ -8603,8 +8715,12 @@
     _comment = _becomeParentOf(comment as CommentImpl?);
   }
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl? get identifier => _identifier;
+  SimpleIdentifierImpl? get identifier {
+    _identifier?.staticElement = declaredElement;
+    return _identifier;
+  }
 
   set identifier(SimpleIdentifier? identifier) {
     _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl?);
@@ -8628,6 +8744,9 @@
   }
 
   @override
+  Token? get name => _identifier?.token;
+
+  @override
   List<AstNode> get sortedCommentAndAnnotations {
     var comment = _comment;
     return <AstNode>[
@@ -8867,9 +8986,13 @@
   /// Initialize a newly created part directive. Either or both of the [comment]
   /// and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  PartDirectiveImpl(CommentImpl? comment, List<Annotation>? metadata,
-      this.partKeyword, StringLiteralImpl partUri, this.semicolon)
-      : super(comment, metadata, partUri);
+  PartDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required this.partKeyword,
+    required super.uri,
+    required this.semicolon,
+  });
 
   @override
   PartElement? get element2 {
@@ -8934,8 +9057,16 @@
   /// Initialize a newly created part-of directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  PartOfDirectiveImpl(super.comment, super.metadata, this.partKeyword,
-      this.ofKeyword, this._uri, this._libraryName, this.semicolon) {
+  PartOfDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required this.partKeyword,
+    required this.ofKeyword,
+    required StringLiteralImpl? uri,
+    required LibraryIdentifierImpl? libraryName,
+    required this.semicolon,
+  })  : _uri = uri,
+        _libraryName = libraryName {
     _becomeParentOf(_uri);
     _becomeParentOf(_libraryName);
   }
@@ -9821,11 +9952,11 @@
     } else if (_type != null) {
       return _type!.beginToken;
     }
-    return identifier!.beginToken;
+    return name!;
   }
 
   @override
-  Token get endToken => identifier?.endToken ?? type!.endToken;
+  Token get endToken => name ?? type!.endToken;
 
   @override
   bool get isConst => keyword?.keyword == Keyword.CONST;
@@ -9847,7 +9978,7 @@
   ChildEntities get _childEntities => super._childEntities
     ..addToken('keyword', keyword)
     ..addNode('type', type)
-    ..addNode('identifier', identifier);
+    ..addToken('name', name);
 
   @override
   E? accept<E>(AstVisitor<E> visitor) =>
@@ -9857,6 +9988,7 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _type?.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
     identifier?.accept(visitor);
   }
 }
@@ -10023,11 +10155,13 @@
       }
     }
     if (parent is FieldFormalParameter) {
+      // ignore: deprecated_member_use_from_same_package
       if (identical(parent.identifier, target)) {
         return false;
       }
     }
     if (parent is VariableDeclaration) {
+      // ignore: deprecated_member_use_from_same_package
       if (identical(parent.name, target)) {
         return false;
       }
@@ -10652,9 +10786,10 @@
 
   @override
   Token get endToken {
-    return question ?? _parameters?.endToken ?? identifier.endToken;
+    return question ?? _parameters?.endToken ?? name;
   }
 
+  @Deprecated('Use identifier2 instead')
   @override
   SimpleIdentifierImpl get identifier => super.identifier!;
 
@@ -10668,6 +10803,9 @@
   bool get isFinal => keyword?.keyword == Keyword.FINAL;
 
   @override
+  Token get name => super.name!;
+
+  @override
   FormalParameterListImpl? get parameters => _parameters;
 
   set parameters(FormalParameterList? parameters) {
@@ -10694,7 +10832,7 @@
     ..addNode('type', type)
     ..addToken('superKeyword', superKeyword)
     ..addToken('period', period)
-    ..addNode('identifier', identifier)
+    ..addToken('name', name)
     ..addNode('typeParameters', typeParameters)
     ..addNode('parameters', parameters);
 
@@ -10706,6 +10844,7 @@
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
     _type?.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
     identifier.accept(visitor);
     _typeParameters?.accept(visitor);
     _parameters?.accept(visitor);
@@ -11068,8 +11207,13 @@
   /// Initialize a newly created top-level variable declaration. Either or both
   /// of the [comment] and [metadata] can be `null` if the variable does not
   /// have the corresponding attribute.
-  TopLevelVariableDeclarationImpl(super.comment, super.metadata,
-      this.externalKeyword, this._variableList, this.semicolon) {
+  TopLevelVariableDeclarationImpl({
+    required super.comment,
+    required super.metadata,
+    required this.externalKeyword,
+    required VariableDeclarationListImpl variableList,
+    required this.semicolon,
+  }) : _variableList = variableList {
     _becomeParentOf(_variableList);
   }
 
@@ -11215,9 +11359,13 @@
   /// Initialize a newly created type alias. Either or both of the [comment] and
   /// [metadata] can be `null` if the declaration does not have the
   /// corresponding attribute.
-  TypeAliasImpl(CommentImpl? comment, List<Annotation>? metadata,
-      this.typedefKeyword, SimpleIdentifierImpl name, this.semicolon)
-      : super(comment, metadata, name);
+  TypeAliasImpl({
+    required super.comment,
+    required super.metadata,
+    required this.typedefKeyword,
+    required super.name,
+    required this.semicolon,
+  });
 
   @override
   Token get endToken => semicolon;
@@ -11402,12 +11550,22 @@
   /// explicit upper bound.
   TypeAnnotationImpl? _bound;
 
+  @override
+  TypeParameterElement? declaredElement;
+
   /// Initialize a newly created type parameter. Either or both of the [comment]
   /// and [metadata] can be `null` if the parameter does not have the
   /// corresponding attribute. The [extendsKeyword] and [bound] can be `null` if
   /// the parameter does not have an upper bound.
-  TypeParameterImpl(super.comment, super.metadata, this._name,
-      this.extendsKeyword, this._bound) {
+  TypeParameterImpl({
+    required super.comment,
+    required super.metadata,
+    required SimpleIdentifierImpl name,
+    required this.extendsKeyword,
+    required TypeAnnotationImpl? bound,
+    this.varianceKeyword,
+  })  : _name = name,
+        _bound = bound {
     _becomeParentOf(_name);
     _becomeParentOf(_bound);
   }
@@ -11420,10 +11578,6 @@
   }
 
   @override
-  TypeParameterElement? get declaredElement =>
-      _name.staticElement as TypeParameterElement?;
-
-  @override
   Token get endToken {
     if (_bound == null) {
       return _name.endToken;
@@ -11434,6 +11588,7 @@
   @override
   Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
 
+  @Deprecated('Use name2 instead')
   @override
   SimpleIdentifierImpl get name => _name;
 
@@ -11442,8 +11597,11 @@
   }
 
   @override
+  Token get name2 => _name.token;
+
+  @override
   ChildEntities get _childEntities => super._childEntities
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addToken('extendsKeyword', extendsKeyword)
     ..addNode('bound', bound);
 
@@ -11453,7 +11611,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _bound?.accept(visitor);
   }
 }
@@ -11526,7 +11685,11 @@
   /// Initialize a newly create URI-based directive. Either or both of the
   /// [comment] and [metadata] can be `null` if the directive does not have the
   /// corresponding attribute.
-  UriBasedDirectiveImpl(super.comment, super.metadata, this._uri) {
+  UriBasedDirectiveImpl({
+    required super.comment,
+    required super.metadata,
+    required StringLiteralImpl uri,
+  }) : _uri = uri {
     _becomeParentOf(_uri);
   }
 
@@ -11606,6 +11769,9 @@
   /// The name of the variable being declared.
   SimpleIdentifierImpl _name;
 
+  @override
+  VariableElement? declaredElement;
+
   /// The equal sign separating the variable name from the initial value, or
   /// `null` if the initial value was not specified.
   @override
@@ -11623,16 +11789,17 @@
 
   /// Initialize a newly created variable declaration. The [equals] and
   /// [initializer] can be `null` if there is no initializer.
-  VariableDeclarationImpl(this._name, this.equals, this._initializer)
-      : super(null, null) {
+  VariableDeclarationImpl({
+    required SimpleIdentifierImpl name,
+    required this.equals,
+    required ExpressionImpl? initializer,
+  })  : _name = name,
+        _initializer = initializer,
+        super(comment: null, metadata: null) {
     _becomeParentOf(_name);
     _becomeParentOf(_initializer);
   }
 
-  @override
-  VariableElement? get declaredElement =>
-      _name.staticElement as VariableElement?;
-
   /// This overridden implementation of [documentationComment] looks in the
   /// grandparent node for Dartdoc comments if no documentation is specifically
   /// available on the node.
@@ -11684,16 +11851,23 @@
     return parent is VariableDeclarationList && parent.isLate;
   }
 
+  @Deprecated('Use name2 instead')
   @override
-  SimpleIdentifierImpl get name => _name;
+  SimpleIdentifierImpl get name {
+    _name.staticElement = declaredElement;
+    return _name;
+  }
 
   set name(SimpleIdentifier identifier) {
     _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
+  Token get name2 => _name.token;
+
+  @override
   ChildEntities get _childEntities => super._childEntities
-    ..addNode('name', name)
+    ..addToken('name', name2)
     ..addToken('equals', equals)
     ..addNode('initializer', initializer);
 
@@ -11703,7 +11877,8 @@
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
-    _name.accept(visitor);
+    // ignore: deprecated_member_use_from_same_package
+    name.accept(visitor);
     _initializer?.accept(visitor);
   }
 }
@@ -11742,8 +11917,14 @@
   /// the [comment] and [metadata] can be `null` if the variable list does not
   /// have the corresponding attribute. The [keyword] can be `null` if a type
   /// was specified. The [type] must be `null` if the keyword is 'var'.
-  VariableDeclarationListImpl(super.comment, super.metadata, this.lateKeyword,
-      this.keyword, this._type, List<VariableDeclaration> variables) {
+  VariableDeclarationListImpl({
+    required super.comment,
+    required super.metadata,
+    required this.lateKeyword,
+    required this.keyword,
+    required TypeAnnotationImpl? type,
+    required List<VariableDeclaration> variables,
+  }) : _type = type {
     _becomeParentOf(_type);
     _variables._initialize(this, variables);
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index d0fffa1..78a09e7 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -53,66 +53,6 @@
           Expression target, List<Expression> cascadeSections) =>
       CascadeExpressionImpl(target as ExpressionImpl, cascadeSections);
 
-  ClassDeclarationImpl classDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? abstractKeyword,
-          Token? macroKeyword,
-          Token? augmentKeyword,
-          Token classKeyword,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          ExtendsClause? extendsClause,
-          WithClause? withClause,
-          ImplementsClause? implementsClause,
-          Token leftBracket,
-          List<ClassMember> members,
-          Token rightBracket) =>
-      ClassDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          abstractKeyword,
-          macroKeyword,
-          augmentKeyword,
-          classKeyword,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          extendsClause as ExtendsClauseImpl?,
-          withClause as WithClauseImpl?,
-          implementsClause as ImplementsClauseImpl?,
-          leftBracket,
-          members,
-          rightBracket);
-
-  ClassTypeAliasImpl classTypeAlias(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token keyword,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          Token equals,
-          Token? abstractKeyword,
-          Token? macroKeyword,
-          Token? augmentKeyword,
-          NamedType superclass,
-          WithClause withClause,
-          ImplementsClause? implementsClause,
-          Token semicolon) =>
-      ClassTypeAliasImpl(
-          comment as CommentImpl?,
-          metadata,
-          keyword,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          equals,
-          abstractKeyword,
-          macroKeyword,
-          augmentKeyword,
-          superclass as NamedTypeImpl,
-          withClause as WithClauseImpl,
-          implementsClause as ImplementsClauseImpl?,
-          semicolon);
-
   CommentReferenceImpl commentReference(
           Token? newKeyword, CommentReferableExpression expression) =>
       CommentReferenceImpl(
@@ -163,35 +103,6 @@
           rightParenthesis,
           libraryUri as StringLiteralImpl);
 
-  ConstructorDeclarationImpl constructorDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? externalKeyword,
-          Token? constKeyword,
-          Token? factoryKeyword,
-          Identifier returnType,
-          Token? period,
-          SimpleIdentifier? name,
-          FormalParameterList parameters,
-          Token? separator,
-          List<ConstructorInitializer>? initializers,
-          ConstructorName? redirectedConstructor,
-          FunctionBody? body) =>
-      ConstructorDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          externalKeyword,
-          constKeyword,
-          factoryKeyword,
-          returnType as IdentifierImpl,
-          period,
-          name as SimpleIdentifierImpl?,
-          parameters as FormalParameterListImpl,
-          separator,
-          initializers,
-          redirectedConstructor as ConstructorNameImpl?,
-          body as FunctionBodyImpl);
-
   ConstructorFieldInitializerImpl constructorFieldInitializer(
           Token? thisKeyword,
           Token? period,
@@ -219,15 +130,6 @@
       ContinueStatementImpl(
           continueKeyword, label as SimpleIdentifierImpl?, semicolon);
 
-  DeclaredIdentifierImpl declaredIdentifier(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? keyword,
-          TypeAnnotation? type,
-          SimpleIdentifier identifier) =>
-      DeclaredIdentifierImpl(comment as CommentImpl?, metadata, keyword,
-          type as TypeAnnotationImpl?, identifier as SimpleIdentifierImpl);
-
   DefaultFormalParameterImpl defaultFormalParameter(
           NormalFormalParameter parameter,
           ParameterKind kind,
@@ -273,85 +175,6 @@
   CommentImpl endOfLineComment(List<Token> tokens) =>
       CommentImpl.createEndOfLineComment(tokens);
 
-  EnumConstantDeclarationImpl enumConstantDeclaration(Comment? comment,
-          List<Annotation>? metadata, SimpleIdentifier name) =>
-      EnumConstantDeclarationImpl(
-        documentationComment: comment as CommentImpl?,
-        metadata: metadata,
-        name: name as SimpleIdentifierImpl,
-        arguments: null,
-      );
-
-  @Deprecated('Use enumDeclaration2() instead')
-  EnumDeclarationImpl enumDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token enumKeyword,
-          SimpleIdentifier name,
-          Token leftBracket,
-          List<EnumConstantDeclaration> constants,
-          Token rightBracket) =>
-      enumDeclaration2(
-          comment: comment,
-          metadata: metadata,
-          enumKeyword: enumKeyword,
-          name: name,
-          typeParameters: null,
-          withClause: null,
-          implementsClause: null,
-          leftBracket: leftBracket,
-          constants: constants,
-          semicolon: null,
-          members: [],
-          rightBracket: rightBracket);
-
-  EnumDeclarationImpl enumDeclaration2({
-    required Comment? comment,
-    required List<Annotation>? metadata,
-    required Token enumKeyword,
-    required SimpleIdentifier name,
-    required TypeParameterList? typeParameters,
-    required WithClause? withClause,
-    required ImplementsClause? implementsClause,
-    required Token leftBracket,
-    required List<EnumConstantDeclaration> constants,
-    required List<ClassMember> members,
-    required Token? semicolon,
-    required Token rightBracket,
-  }) {
-    return EnumDeclarationImpl(
-      comment as CommentImpl?,
-      metadata,
-      enumKeyword,
-      name as SimpleIdentifierImpl,
-      typeParameters as TypeParameterListImpl?,
-      withClause as WithClauseImpl?,
-      implementsClause as ImplementsClauseImpl?,
-      leftBracket,
-      constants,
-      semicolon,
-      members,
-      rightBracket,
-    );
-  }
-
-  ExportDirectiveImpl exportDirective(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token keyword,
-          StringLiteral libraryUri,
-          List<Configuration>? configurations,
-          List<Combinator>? combinators,
-          Token semicolon) =>
-      ExportDirectiveImpl(
-          comment as CommentImpl?,
-          metadata,
-          keyword,
-          libraryUri as StringLiteralImpl,
-          configurations,
-          combinators,
-          semicolon);
-
   ExpressionFunctionBodyImpl expressionFunctionBody(Token? keyword,
           Token functionDefinition, Expression expression, Token? semicolon) =>
       ExpressionFunctionBodyImpl(keyword, null, functionDefinition,
@@ -374,35 +197,6 @@
   ExtendsClauseImpl extendsClause(Token extendsKeyword, NamedType superclass) =>
       ExtendsClauseImpl(extendsKeyword, superclass as NamedTypeImpl);
 
-  ExtensionDeclarationImpl extensionDeclaration(
-          {Comment? comment,
-          List<Annotation>? metadata,
-          required Token extensionKeyword,
-          Token? typeKeyword,
-          SimpleIdentifier? name,
-          TypeParameterList? typeParameters,
-          required Token onKeyword,
-          required TypeAnnotation extendedType,
-          ShowClause? showClause,
-          HideClause? hideClause,
-          required Token leftBracket,
-          required List<ClassMember> members,
-          required Token rightBracket}) =>
-      ExtensionDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          extensionKeyword,
-          typeKeyword,
-          name as SimpleIdentifierImpl?,
-          typeParameters as TypeParameterListImpl?,
-          onKeyword,
-          extendedType as TypeAnnotationImpl,
-          showClause as ShowClauseImpl?,
-          hideClause as HideClauseImpl?,
-          leftBracket,
-          members,
-          rightBracket);
-
   ExtensionOverrideImpl extensionOverride(
           {required Identifier extensionName,
           TypeArgumentList? typeArguments,
@@ -412,27 +206,6 @@
           typeArguments as TypeArgumentListImpl?,
           argumentList as ArgumentListImpl);
 
-  FieldDeclarationImpl fieldDeclaration2(
-          {Comment? comment,
-          List<Annotation>? metadata,
-          Token? abstractKeyword,
-          Token? augmentKeyword,
-          Token? covariantKeyword,
-          Token? externalKeyword,
-          Token? staticKeyword,
-          required VariableDeclarationList fieldList,
-          required Token semicolon}) =>
-      FieldDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          abstractKeyword,
-          augmentKeyword,
-          covariantKeyword,
-          externalKeyword,
-          staticKeyword,
-          fieldList as VariableDeclarationListImpl,
-          semicolon);
-
   FieldFormalParameterImpl fieldFormalParameter2(
           {Comment? comment,
           List<Annotation>? metadata,
@@ -540,25 +313,6 @@
         body as StatementImpl);
   }
 
-  FunctionDeclarationImpl functionDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? augmentKeyword,
-          Token? externalKeyword,
-          TypeAnnotation? returnType,
-          Token? propertyKeyword,
-          SimpleIdentifier name,
-          FunctionExpression functionExpression) =>
-      FunctionDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          augmentKeyword,
-          externalKeyword,
-          returnType as TypeAnnotationImpl?,
-          propertyKeyword,
-          name as SimpleIdentifierImpl,
-          functionExpression as FunctionExpressionImpl);
-
   FunctionDeclarationStatementImpl functionDeclarationStatement(
           FunctionDeclaration functionDeclaration) =>
       FunctionDeclarationStatementImpl(
@@ -583,25 +337,6 @@
       FunctionReferenceImpl(function as ExpressionImpl,
           typeArguments: typeArguments as TypeArgumentListImpl?);
 
-  FunctionTypeAliasImpl functionTypeAlias(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token keyword,
-          TypeAnnotation? returnType,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          FormalParameterList parameters,
-          Token semicolon) =>
-      FunctionTypeAliasImpl(
-          comment as CommentImpl?,
-          metadata,
-          keyword,
-          returnType as TypeAnnotationImpl?,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          parameters as FormalParameterListImpl,
-          semicolon);
-
   FunctionTypedFormalParameterImpl functionTypedFormalParameter2(
           {Comment? comment,
           List<Annotation>? metadata,
@@ -636,25 +371,6 @@
           parameters as FormalParameterListImpl,
           question: question);
 
-  GenericTypeAliasImpl genericTypeAlias(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token typedefKeyword,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          Token equals,
-          TypeAnnotation type,
-          Token semicolon) =>
-      GenericTypeAliasImpl(
-          comment as CommentImpl?,
-          metadata,
-          typedefKeyword,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          equals,
-          type as TypeAnnotationImpl,
-          semicolon);
-
   HideClauseImpl hideClause(
           {required Token hideKeyword,
           required List<ShowHideClauseElement> elements}) =>
@@ -713,30 +429,6 @@
           typeArguments: typeArguments as TypeArgumentListImpl?,
           typeArgumentTypes: typeArgumentTypes);
 
-  ImportDirectiveImpl importDirective(
-    Comment? comment,
-    List<Annotation>? metadata,
-    Token keyword,
-    StringLiteral libraryUri,
-    List<Configuration>? configurations,
-    Token? deferredKeyword,
-    Token? asKeyword,
-    SimpleIdentifier? prefix,
-    List<Combinator>? combinators,
-    Token semicolon,
-  ) =>
-      ImportDirectiveImpl(
-          comment as CommentImpl?,
-          metadata,
-          keyword,
-          libraryUri as StringLiteralImpl,
-          configurations,
-          deferredKeyword,
-          asKeyword,
-          prefix as SimpleIdentifierImpl?,
-          combinators,
-          semicolon);
-
   IndexExpressionImpl indexExpressionForCascade2(
           {required Token period,
           Token? question,
@@ -787,15 +479,6 @@
           List<Label> labels, Statement statement) =>
       LabeledStatementImpl(labels, statement as StatementImpl);
 
-  LibraryDirectiveImpl libraryDirective(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token libraryKeyword,
-          LibraryIdentifier name,
-          Token semicolon) =>
-      LibraryDirectiveImpl(comment as CommentImpl?, metadata, libraryKeyword,
-          name as LibraryIdentifierImpl, semicolon);
-
   LibraryIdentifierImpl libraryIdentifier(List<SimpleIdentifier> components) =>
       LibraryIdentifierImpl(components);
 
@@ -826,31 +509,6 @@
       MapLiteralEntryImpl(
           key as ExpressionImpl, separator, value as ExpressionImpl);
 
-  MethodDeclarationImpl methodDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? externalKeyword,
-          Token? modifierKeyword,
-          TypeAnnotation? returnType,
-          Token? propertyKeyword,
-          Token? operatorKeyword,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          FormalParameterList? parameters,
-          FunctionBody body) =>
-      MethodDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          externalKeyword,
-          modifierKeyword,
-          returnType as TypeAnnotationImpl?,
-          propertyKeyword,
-          operatorKeyword,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          parameters as FormalParameterListImpl?,
-          body as FunctionBodyImpl);
-
   MethodInvocationImpl methodInvocation(
           Expression? target,
           Token? operator,
@@ -864,31 +522,6 @@
           typeArguments as TypeArgumentListImpl?,
           argumentList as ArgumentListImpl);
 
-  MixinDeclarationImpl mixinDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? augmentKeyword,
-          Token mixinKeyword,
-          SimpleIdentifier name,
-          TypeParameterList? typeParameters,
-          OnClause? onClause,
-          ImplementsClause? implementsClause,
-          Token leftBracket,
-          List<ClassMember> members,
-          Token rightBracket) =>
-      MixinDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          augmentKeyword,
-          mixinKeyword,
-          name as SimpleIdentifierImpl,
-          typeParameters as TypeParameterListImpl?,
-          onClause as OnClauseImpl?,
-          implementsClause as ImplementsClauseImpl?,
-          leftBracket,
-          members,
-          rightBracket);
-
   NamedExpressionImpl namedExpression(Label name, Expression expression) =>
       NamedExpressionImpl(name as LabelImpl, expression as ExpressionImpl);
 
@@ -923,28 +556,6 @@
       ParenthesizedExpressionImpl(
           leftParenthesis, expression as ExpressionImpl, rightParenthesis);
 
-  PartDirectiveImpl partDirective(Comment? comment, List<Annotation>? metadata,
-          Token partKeyword, StringLiteral partUri, Token semicolon) =>
-      PartDirectiveImpl(comment as CommentImpl?, metadata, partKeyword,
-          partUri as StringLiteralImpl, semicolon);
-
-  PartOfDirectiveImpl partOfDirective(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token partKeyword,
-          Token ofKeyword,
-          StringLiteral? uri,
-          LibraryIdentifier? libraryName,
-          Token semicolon) =>
-      PartOfDirectiveImpl(
-          comment as CommentImpl?,
-          metadata,
-          partKeyword,
-          ofKeyword,
-          uri as StringLiteralImpl?,
-          libraryName as LibraryIdentifierImpl?,
-          semicolon);
-
   PostfixExpressionImpl postfixExpression(Expression operand, Token operator) =>
       PostfixExpressionImpl(operand as ExpressionImpl, operator);
 
@@ -1117,19 +728,6 @@
           Token throwKeyword, Expression expression) =>
       ThrowExpressionImpl(throwKeyword, expression as ExpressionImpl);
 
-  TopLevelVariableDeclarationImpl topLevelVariableDeclaration(
-          Comment? comment,
-          List<Annotation>? metadata,
-          VariableDeclarationList variableList,
-          Token semicolon,
-          {Token? externalKeyword}) =>
-      TopLevelVariableDeclarationImpl(
-          comment as CommentImpl?,
-          metadata,
-          externalKeyword,
-          variableList as VariableDeclarationListImpl,
-          semicolon);
-
   TryStatementImpl tryStatement(
           Token tryKeyword,
           Block body,
@@ -1146,63 +744,10 @@
   TypeLiteralImpl typeLiteral({required NamedType typeName}) =>
       TypeLiteralImpl(typeName as NamedTypeImpl);
 
-  TypeParameterImpl typeParameter(
-          Comment? comment,
-          List<Annotation>? metadata,
-          SimpleIdentifier name,
-          Token? extendsKeyword,
-          TypeAnnotation? bound) =>
-      TypeParameterImpl(
-          comment as CommentImpl?,
-          metadata,
-          name as SimpleIdentifierImpl,
-          extendsKeyword,
-          bound as TypeAnnotationImpl?);
-
-  TypeParameterImpl typeParameter2(
-          {Comment? comment,
-          List<Annotation>? metadata,
-          required SimpleIdentifier name,
-          Token? extendsKeyword,
-          TypeAnnotation? bound,
-          Token? varianceKeyword}) =>
-      TypeParameterImpl(
-          comment as CommentImpl?,
-          metadata,
-          name as SimpleIdentifierImpl,
-          extendsKeyword,
-          bound as TypeAnnotationImpl?)
-        ..varianceKeyword = varianceKeyword;
-
   TypeParameterListImpl typeParameterList(Token leftBracket,
           List<TypeParameter> typeParameters, Token rightBracket) =>
       TypeParameterListImpl(leftBracket, typeParameters, rightBracket);
 
-  VariableDeclarationImpl variableDeclaration(
-          SimpleIdentifier name, Token? equals, Expression? initializer) =>
-      VariableDeclarationImpl(
-          name as SimpleIdentifierImpl, equals, initializer as ExpressionImpl?);
-
-  VariableDeclarationListImpl variableDeclarationList(
-          Comment? comment,
-          List<Annotation>? metadata,
-          Token? keyword,
-          TypeAnnotation? type,
-          List<VariableDeclaration> variables) =>
-      VariableDeclarationListImpl(comment as CommentImpl?, metadata, null,
-          keyword, type as TypeAnnotationImpl?, variables);
-
-  VariableDeclarationListImpl variableDeclarationList2(
-      {Comment? comment,
-      List<Annotation>? metadata,
-      Token? lateKeyword,
-      Token? keyword,
-      TypeAnnotation? type,
-      required List<VariableDeclaration> variables}) {
-    return VariableDeclarationListImpl(comment as CommentImpl?, metadata,
-        lateKeyword, keyword, type as TypeAnnotationImpl?, variables);
-  }
-
   VariableDeclarationStatementImpl variableDeclarationStatement(
           VariableDeclarationList variableList, Token semicolon) =>
       VariableDeclarationStatementImpl(
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 4612dc3..6e910aa 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -69,11 +69,26 @@
   }
 
   @override
+  Element? visitFormalParameter(FormalParameter node) {
+    return node.declaredElement;
+  }
+
+  @override
   Element? visitFunctionDeclaration(FunctionDeclaration node) {
     return node.declaredElement;
   }
 
   @override
+  Element? visitFunctionTypeAlias(FunctionTypeAlias node) {
+    return node.declaredElement;
+  }
+
+  @override
+  Element? visitGenericTypeAlias(GenericTypeAlias node) {
+    return node.declaredElement;
+  }
+
+  @override
   Element? visitIdentifier(Identifier node) {
     var parent = node.parent;
     if (parent is Annotation) {
@@ -86,14 +101,16 @@
       // Constructor Elements
       var returnType = parent.returnType;
       if (identical(returnType, node)) {
-        var name = parent.name;
+        var name = parent.name2;
         if (name != null) {
-          return name.staticElement;
+          return parent.declaredElement;
         }
         var element = node.staticElement;
         if (element is ClassElement) {
           return element.unnamedConstructor;
         }
+      } else if (parent.name2 == node.endToken) {
+        return parent.declaredElement;
       }
     } else if (parent is LibraryIdentifier) {
       var grandParent = parent.parent;
@@ -176,6 +193,11 @@
   }
 
   @override
+  Element? visitTypeParameter(TypeParameter node) {
+    return node.declaredElement;
+  }
+
+  @override
   Element? visitVariableDeclaration(VariableDeclaration node) {
     return node.declaredElement;
   }
diff --git a/pkg/analyzer/lib/src/dart/ast/invokes_super_self.dart b/pkg/analyzer/lib/src/dart/ast/invokes_super_self.dart
index d3633fb..c17d674 100644
--- a/pkg/analyzer/lib/src/dart/ast/invokes_super_self.dart
+++ b/pkg/analyzer/lib/src/dart/ast/invokes_super_self.dart
@@ -72,7 +72,7 @@
 extension MethodDeclarationExtension on MethodDeclaration {
   bool get invokesSuperSelf {
     var visitor = _SuperVisitor(
-      name.name,
+      name2.lexeme,
       isSetter ? _Usage.writing : _Usage.reading,
     );
     body.accept(visitor);
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 f344609..963f028 100644
--- a/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
@@ -167,7 +167,7 @@
     _visitToken(node.macroKeyword, suffix: ' ');
     _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     _visitNode(node.extendsClause, prefix: ' ');
     _visitNode(node.withClause, prefix: ' ');
@@ -186,7 +186,7 @@
     _visitToken(node.macroKeyword, suffix: ' ');
     _visitToken(node.augmentKeyword, suffix: ' ');
     sink.write('class ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     sink.write(' = ');
     _visitNode(node.superclass);
@@ -237,7 +237,7 @@
     _visitToken(node.constKeyword, suffix: ' ');
     _visitToken(node.factoryKeyword, suffix: ' ');
     _visitNode(node.returnType);
-    _visitNode(node.name, prefix: '.');
+    _visitToken(node.name2, prefix: '.');
     _visitNode(node.parameters);
     _visitNodeList(node.initializers, prefix: ' : ', separator: ', ');
     _visitNode(node.redirectedConstructor, prefix: ' = ');
@@ -281,7 +281,7 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.keyword, suffix: ' ');
     _visitNode(node.type, suffix: ' ');
-    _visitNode(node.identifier);
+    _visitToken(node.name);
   }
 
   @override
@@ -336,7 +336,7 @@
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.arguments);
   }
 
@@ -344,7 +344,7 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('enum ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     _visitNode(node.withClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
@@ -399,7 +399,7 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     _visitToken(node.extensionKeyword, suffix: ' ');
     _visitToken(node.typeKeyword, suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     sink.write(' ');
     _visitToken(node.onKeyword);
@@ -437,7 +437,7 @@
     _visitToken(node.keyword, suffix: ' ');
     _visitNode(node.type, suffix: ' ');
     sink.write('this.');
-    _visitNode(node.identifier);
+    _visitToken(node.name);
     _visitNode(node.typeParameters);
     _visitNode(node.parameters);
   }
@@ -528,7 +528,7 @@
     _visitToken(node.externalKeyword, suffix: ' ');
     _visitNode(node.returnType, suffix: ' ');
     _visitToken(node.propertyKeyword, suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.functionExpression);
   }
 
@@ -562,7 +562,7 @@
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('typedef ');
     _visitNode(node.returnType, suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     _visitNode(node.parameters);
     sink.write(';');
@@ -574,7 +574,7 @@
     _visitToken(node.requiredKeyword, suffix: ' ');
     _visitToken(node.covariantKeyword, suffix: ' ');
     _visitNode(node.returnType, suffix: ' ');
-    _visitNode(node.identifier);
+    _visitToken(node.name);
     _visitNode(node.typeParameters);
     _visitNode(node.parameters);
     if (node.question != null) {
@@ -597,7 +597,7 @@
   void visitGenericTypeAlias(GenericTypeAlias node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('typedef ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     sink.write(' = ');
     _visitNode(node.type);
@@ -771,7 +771,7 @@
     _visitNode(node.returnType, suffix: ' ');
     _visitToken(node.propertyKeyword, suffix: ' ');
     _visitToken(node.operatorKeyword, suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     if (!node.isGetter) {
       _visitNode(node.typeParameters);
       _visitNode(node.parameters);
@@ -792,7 +792,7 @@
   void visitMixinDeclaration(MixinDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
     sink.write('mixin ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.typeParameters);
     _visitNode(node.onClause, prefix: ' ');
     _visitNode(node.implementsClause, prefix: ' ');
@@ -958,10 +958,10 @@
     _visitToken(node.covariantKeyword, suffix: ' ');
     _visitToken(node.keyword, suffix: ' ');
     _visitNode(node.type);
-    if (node.type != null && node.identifier != null) {
+    if (node.type != null && node.name != null) {
       sink.write(' ');
     }
-    _visitNode(node.identifier);
+    _visitToken(node.name);
   }
 
   @override
@@ -1005,7 +1005,7 @@
     _visitToken(node.keyword, suffix: ' ');
     _visitNode(node.type, suffix: ' ');
     sink.write('super.');
-    _visitNode(node.identifier);
+    _visitToken(node.name);
     _visitNode(node.typeParameters);
     _visitNode(node.parameters);
   }
@@ -1093,7 +1093,7 @@
     if (varianceKeyword != null) {
       sink.write('${varianceKeyword.lexeme} ');
     }
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.bound, prefix: ' extends ');
   }
 
@@ -1107,7 +1107,7 @@
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
     _visitNodeList(node.metadata, separator: ' ', suffix: ' ');
-    _visitNode(node.name);
+    _visitToken(node.name2);
     _visitNode(node.initializer, prefix: ' = ');
   }
 
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 251454c..fe970af 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -249,7 +249,7 @@
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.abstractKeyword, other.abstractKeyword) &&
         isEqualTokens(node.classKeyword, other.classKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualNodes(node.extendsClause, other.extendsClause) &&
         isEqualNodes(node.withClause, other.withClause) &&
@@ -266,7 +266,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualTokens(node.equals, other.equals) &&
         isEqualTokens(node.abstractKeyword, other.abstractKeyword) &&
@@ -332,7 +332,7 @@
         isEqualTokens(node.factoryKeyword, other.factoryKeyword) &&
         isEqualNodes(node.returnType, other.returnType) &&
         isEqualTokens(node.period, other.period) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.parameters, other.parameters) &&
         isEqualTokens(node.separator, other.separator) &&
         _isEqualNodeLists(node.initializers, other.initializers) &&
@@ -387,7 +387,7 @@
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.keyword, other.keyword) &&
         isEqualNodes(node.type, other.type) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualTokens(node.name, other.name);
   }
 
   @override
@@ -450,7 +450,7 @@
     return isEqualNodes(
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
-        isEqualNodes(node.name, other.name);
+        isEqualTokens(node.name2, other.name2);
   }
 
   @override
@@ -460,7 +460,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.enumKeyword, other.enumKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualTokens(node.leftBracket, other.leftBracket) &&
         _isEqualNodeLists(node.constants, other.constants) &&
         isEqualTokens(node.rightBracket, other.rightBracket);
@@ -507,7 +507,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.extensionKeyword, other.extensionKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualTokens(node.onKeyword, other.onKeyword) &&
         isEqualNodes(node.extendedType, other.extendedType) &&
@@ -547,7 +547,7 @@
         isEqualNodes(node.type, other.type) &&
         isEqualTokens(node.thisKeyword, other.thisKeyword) &&
         isEqualTokens(node.period, other.period) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualTokens(node.name, other.name);
   }
 
   @override
@@ -627,7 +627,7 @@
         isEqualTokens(node.externalKeyword, other.externalKeyword) &&
         isEqualNodes(node.returnType, other.returnType) &&
         isEqualTokens(node.propertyKeyword, other.propertyKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.functionExpression, other.functionExpression);
   }
 
@@ -666,7 +666,7 @@
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
         isEqualNodes(node.returnType, other.returnType) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualNodes(node.parameters, other.parameters) &&
         isEqualTokens(node.semicolon, other.semicolon);
@@ -679,7 +679,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualNodes(node.returnType, other.returnType) &&
-        isEqualNodes(node.identifier, other.identifier) &&
+        isEqualTokens(node.name, other.name) &&
         isEqualNodes(node.parameters, other.parameters);
   }
 
@@ -700,7 +700,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.typedefKeyword, other.typedefKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualTokens(node.equals, other.equals) &&
         isEqualNodes(node.type, other.type);
@@ -894,7 +894,7 @@
         isEqualNodes(node.returnType, other.returnType) &&
         isEqualTokens(node.propertyKeyword, other.propertyKeyword) &&
         isEqualTokens(node.operatorKeyword, other.operatorKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.parameters, other.parameters) &&
         isEqualNodes(node.body, other.body);
   }
@@ -915,7 +915,7 @@
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.mixinKeyword, other.mixinKeyword) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualNodes(node.typeParameters, other.typeParameters) &&
         isEqualNodes(node.onClause, other.onClause) &&
         isEqualNodes(node.implementsClause, other.implementsClause) &&
@@ -1099,7 +1099,7 @@
         _isEqualNodeLists(node.metadata, other.metadata) &&
         isEqualTokens(node.keyword, other.keyword) &&
         isEqualNodes(node.type, other.type) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualTokens(node.name, other.name);
   }
 
   @override
@@ -1153,7 +1153,7 @@
         isEqualNodes(node.type, other.type) &&
         isEqualTokens(node.superKeyword, other.superKeyword) &&
         isEqualTokens(node.period, other.period) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualTokens(node.name, other.name);
   }
 
   @override
@@ -1250,7 +1250,7 @@
     return isEqualNodes(
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualTokens((node as TypeParameterImpl).varianceKeyword,
             (other as TypeParameterImpl).varianceKeyword) &&
         isEqualTokens(node.extendsKeyword, other.extendsKeyword) &&
@@ -1271,7 +1271,7 @@
     return isEqualNodes(
             node.documentationComment, other.documentationComment) &&
         _isEqualNodeLists(node.metadata, other.metadata) &&
-        isEqualNodes(node.name, other.name) &&
+        isEqualTokens(node.name2, other.name2) &&
         isEqualTokens(node.equals, other.equals) &&
         isEqualNodes(node.initializer, other.initializer);
   }
@@ -1805,10 +1805,7 @@
 
   @override
   bool visitClassDeclaration(covariant ClassDeclarationImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.typeParameters, _oldNode)) {
+    if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
     } else if (identical(node.extendsClause, _oldNode)) {
@@ -1831,10 +1828,7 @@
 
   @override
   bool visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.typeParameters, _oldNode)) {
+    if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
     } else if (identical(node.superclass, _oldNode)) {
@@ -1915,9 +1909,6 @@
     if (identical(node.returnType, _oldNode)) {
       node.returnType = _newNode as Identifier;
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.parameters, _oldNode)) {
       node.parameters = _newNode as FormalParameterList;
       return true;
@@ -1986,9 +1977,6 @@
     if (identical(node.type, _oldNode)) {
       node.type = _newNode as TypeAnnotation;
       return true;
-    } else if (identical(node.identifier, _oldNode)) {
-      node.identifier = _newNode as SimpleIdentifier;
-      return true;
     }
     return visitAnnotatedNode(node);
   }
@@ -2048,19 +2036,12 @@
   @override
   bool visitEnumConstantDeclaration(
       covariant EnumConstantDeclarationImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    }
     return visitAnnotatedNode(node);
   }
 
   @override
   bool visitEnumDeclaration(covariant EnumDeclarationImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.typeParameters, _oldNode)) {
+    if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
     } else if (identical(node.withClause, _oldNode)) {
@@ -2115,9 +2096,6 @@
       return true;
     } else if (_replaceInList(node.metadata)) {
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
@@ -2264,9 +2242,6 @@
     if (identical(node.returnType, _oldNode)) {
       node.returnType = _newNode as TypeAnnotation;
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.functionExpression, _oldNode)) {
       node.functionExpression = _newNode as FunctionExpression;
       return true;
@@ -2332,9 +2307,6 @@
     if (identical(node.returnType, _oldNode)) {
       node.returnType = _newNode as TypeAnnotation;
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
@@ -2379,10 +2351,7 @@
   @override
   bool visitGenericTypeAlias(GenericTypeAlias node) {
     var nodeImpl = node as GenericTypeAliasImpl;
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.typeParameters, _oldNode)) {
+    if (identical(node.typeParameters, _oldNode)) {
       nodeImpl.typeParameters = _newNode as TypeParameterList;
       return true;
     } else if (identical(node.type, _oldNode)) {
@@ -2591,9 +2560,6 @@
     if (identical(node.returnType, _oldNode)) {
       node.returnType = _newNode as TypeAnnotation;
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.parameters, _oldNode)) {
       node.parameters = _newNode as FormalParameterList;
       return true;
@@ -2632,9 +2598,6 @@
       return true;
     } else if (_replaceInList(node.metadata)) {
       return true;
-    } else if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
     } else if (identical(node.typeParameters, _oldNode)) {
       node.typeParameters = _newNode as TypeParameterList;
       return true;
@@ -2707,9 +2670,6 @@
     if (identical(node.documentationComment, _oldNode)) {
       node.documentationComment = _newNode as Comment;
       return true;
-    } else if (identical(node.identifier, _oldNode)) {
-      node.identifier = _newNode as SimpleIdentifier;
-      return true;
     } else if (_replaceInList(node.metadata)) {
       return true;
     }
@@ -3016,10 +2976,7 @@
 
   @override
   bool visitTypeParameter(covariant TypeParameterImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.bound, _oldNode)) {
+    if (identical(node.bound, _oldNode)) {
       node.bound = _newNode as TypeAnnotation;
       return true;
     }
@@ -3044,10 +3001,7 @@
 
   @override
   bool visitVariableDeclaration(covariant VariableDeclarationImpl node) {
-    if (identical(node.name, _oldNode)) {
-      node.name = _newNode as SimpleIdentifier;
-      return true;
-    } else if (identical(node.initializer, _oldNode)) {
+    if (identical(node.initializer, _oldNode)) {
       node.initializer = _newNode as Expression;
       return true;
       // TODO(srawlins) also replace node's declared element's
@@ -3173,8 +3127,8 @@
 
   @override
   void visitCatchClause(CatchClause node) {
-    _addToScope2(node.exceptionParameter2?.name);
-    _addToScope2(node.stackTraceParameter2?.name);
+    _addToScope(node.exceptionParameter2?.name);
+    _addToScope(node.stackTraceParameter2?.name);
     super.visitCatchClause(node);
   }
 
@@ -3193,7 +3147,7 @@
 
   @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
-    _addToScope(node.loopVariable.identifier);
+    _addToScope(node.loopVariable.name);
     super.visitForEachPartsWithDeclaration(node);
   }
 
@@ -3260,28 +3214,19 @@
 
   void _addParameters(NodeList<FormalParameter> vars) {
     for (FormalParameter var2 in vars) {
-      _addToScope(var2.identifier);
+      _addToScope(var2.name);
     }
   }
 
-  void _addToScope(SimpleIdentifier? identifier) {
+  void _addToScope(Token? identifier) {
     if (identifier != null && _isInRange(identifier)) {
-      _locals.add(identifier.name);
-    }
-  }
-
-  /// TODO(scheglov) If we still have [_addToScope] after:
-  /// https://dart-review.googlesource.com/c/sdk/+/252566,
-  /// rename to `_addNodeToScope` and `_addTokenToScope`.
-  void _addToScope2(Token? identifier) {
-    if (identifier != null && _isInRange2(identifier)) {
       _locals.add(identifier.lexeme);
     }
   }
 
   void _addVariables(NodeList<VariableDeclaration> variables) {
     for (VariableDeclaration variable in variables) {
-      _addToScope(variable.name);
+      _addToScope(variable.name2);
     }
   }
 
@@ -3297,21 +3242,12 @@
         _addVariables(statement.variables.variables);
       } else if (statement is FunctionDeclarationStatement &&
           !_referenceIsWithinLocalFunction) {
-        _addToScope(statement.functionDeclaration.name);
+        _addToScope(statement.functionDeclaration.name2);
       }
     }
   }
 
-  bool _isInRange(AstNode node) {
-    if (_position < 0) {
-      // if source position is not set then all nodes are in range
-      return true;
-      // not reached
-    }
-    return node.end < _position;
-  }
-
-  bool _isInRange2(Token token) {
+  bool _isInRange(Token token) {
     if (_position < 0) {
       // if source position is not set then all nodes are in range
       return true;
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 2095651..e197e85 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -373,7 +373,7 @@
       // lookup for ==
       var method = element.lookUpConcreteMethod("==", _currentLibrary);
       if (method == null ||
-          (method.enclosingElement2 as ClassElement).isDartCoreObject) {
+          (method.enclosingElement3 as ClassElement).isDartCoreObject) {
         return false;
       }
       // there is == that we don't like
@@ -576,7 +576,8 @@
       if (member is FieldDeclaration && !member.isStatic) {
         for (VariableDeclaration variableDeclaration
             in member.fields.variables) {
-          if (isEnumDeclaration && variableDeclaration.name.name == 'values') {
+          if (isEnumDeclaration &&
+              variableDeclaration.name2.lexeme == 'values') {
             continue;
           }
           var initializer = variableDeclaration.initializer;
@@ -597,7 +598,7 @@
                   CompileTimeErrorCode
                       .CONST_CONSTRUCTOR_WITH_FIELD_INITIALIZED_BY_NON_CONST,
                   constKeyword,
-                  [variableDeclaration.name.name]);
+                  [variableDeclaration.name2.lexeme]);
             }
           }
         }
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 3449496..2f0dfe0 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -198,7 +198,7 @@
   void computeDependencies(
       ConstantEvaluationTarget constant, ReferenceFinderCallback callback) {
     if (constant is ConstFieldElementImpl && constant.isEnumConstant) {
-      var enclosing = constant.enclosingElement2;
+      var enclosing = constant.enclosingElement3;
       if (enclosing is EnumElementImpl) {
         if (enclosing.name == 'values') {
           return;
@@ -258,7 +258,7 @@
             }
           }
         }
-        for (FieldElement field in constant.enclosingElement2.fields) {
+        for (FieldElement field in constant.enclosingElement3.fields) {
           // Note: non-static const isn't allowed but we handle it anyway so
           // that we won't be confused by incorrect code.
           if ((field.isFinal || field.isConst) &&
@@ -372,7 +372,7 @@
       return null;
     }
     var typeProvider = constructor.library.typeProvider;
-    if (constructor.enclosingElement2 == typeProvider.symbolElement) {
+    if (constructor.enclosingElement3 == typeProvider.symbolElement) {
       // The dart:core.Symbol has a const factory constructor that redirects
       // to dart:_internal.Symbol.  That in turn redirects to an external
       // const constructor, which we won't be able to evaluate.
@@ -396,7 +396,7 @@
 
   static _EnumConstant? _enumConstant(VariableElementImpl element) {
     if (element is ConstFieldElementImpl && element.isEnumConstant) {
-      var enum_ = element.enclosingElement2;
+      var enum_ = element.enclosingElement3;
       if (enum_ is EnumElementImpl) {
         var index = enum_.constants.indexOf(element);
         assert(index >= 0);
@@ -873,7 +873,7 @@
       if (element.name == "identical") {
         NodeList<Expression> arguments = node.argumentList.arguments;
         if (arguments.length == 2) {
-          var enclosingElement = element.enclosingElement2;
+          var enclosingElement = element.enclosingElement3;
           if (enclosingElement is CompilationUnitElement) {
             LibraryElement library = enclosingElement.library;
             if (library.isDartCore) {
@@ -1427,7 +1427,7 @@
       return false;
     }
     return identifier.name == 'length' &&
-        identifier.staticElement?.enclosingElement2 is! ExtensionElement;
+        identifier.staticElement?.enclosingElement3 is! ExtensionElement;
   }
 
   void _reportNotPotentialConstants(AstNode node) {
@@ -2129,7 +2129,7 @@
     List<Expression> arguments, {
     required bool isNullSafe,
   }) {
-    ClassElement definingClass = _constructor.enclosingElement2;
+    final definingClass = _constructor.enclosingElement3;
     var argumentCount = arguments.length;
     if (_constructor.name == "fromEnvironment") {
       if (!_checkFromEnvironmentArguments(arguments, definingType)) {
@@ -2232,7 +2232,7 @@
   }
 
   void _checkFields() {
-    var fields = _constructor.enclosingElement2.fields;
+    var fields = _constructor.enclosingElement3.fields;
     for (var field in fields) {
       if ((field.isFinal || field.isConst) &&
           !field.isStatic &&
@@ -2521,7 +2521,7 @@
   }
 
   void _checkTypeParameters() {
-    var typeParameters = _constructor.enclosingElement2.typeParameters;
+    var typeParameters = _constructor.enclosingElement3.typeParameters;
     var typeArguments = _typeArguments;
     if (typeParameters.isNotEmpty &&
         typeArguments != null &&
diff --git a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
index 284072f..c4e7db3 100644
--- a/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
+++ b/pkg/analyzer/lib/src/dart/constant/potentially_constant.dart
@@ -227,7 +227,7 @@
     }
 
     if (element is ParameterElement) {
-      var enclosing = element.enclosingElement2;
+      var enclosing = element.enclosingElement3;
       if (enclosing is ConstructorElement &&
           isConstConstructorElement(enclosing)) {
         if (node.thisOrAncestorOfType<ConstructorInitializer>() != null) {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index b9ef02c..cd1e068 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -103,17 +103,23 @@
   @override
   String get displayName => name;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElementImpl get enclosingElement {
     return _enclosingElement as CompilationUnitElementImpl;
   }
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElementImpl get enclosingElement2 {
     return _enclosingElement as CompilationUnitElementImpl;
   }
 
+  @override
+  CompilationUnitElementImpl get enclosingElement3 {
+    return _enclosingElement as CompilationUnitElementImpl;
+  }
+
   /// Set the fields contained in this class to the given [fields].
   set fields(List<FieldElement> fields) {
     assert(!isMixinApplication);
@@ -320,7 +326,7 @@
               !getter.isAbstract &&
               !getter.isStatic &&
               getter.isAccessibleIn2(library) &&
-              getter.enclosingElement2 != this));
+              getter.enclosingElement3 != this));
 
   ExecutableElement? lookUpInheritedConcreteMember(
       String name, LibraryElement library) {
@@ -340,7 +346,7 @@
               !method.isAbstract &&
               !method.isStatic &&
               method.isAccessibleIn2(library) &&
-              method.enclosingElement2 != this));
+              method.enclosingElement3 != this));
 
   @override
   PropertyAccessorElement? lookUpInheritedConcreteSetter(
@@ -350,7 +356,7 @@
               !setter.isAbstract &&
               !setter.isStatic &&
               setter.isAccessibleIn2(library) &&
-              setter.enclosingElement2 != this));
+              setter.enclosingElement3 != this));
 
   @override
   MethodElement? lookUpInheritedMethod(
@@ -359,7 +365,7 @@
           (MethodElement method) =>
               !method.isStatic &&
               method.isAccessibleIn2(library) &&
-              method.enclosingElement2 != this));
+              method.enclosingElement3 != this));
 
   @override
   MethodElement? lookUpMethod(String methodName, LibraryElement library) =>
@@ -545,18 +551,24 @@
     required this.uri,
   }) : super(null, importKeywordOffset);
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElementImpl get enclosingElement {
     return super.enclosingElement2 as LibraryOrAugmentationElementImpl;
   }
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElementImpl get enclosingElement2 {
     return super.enclosingElement2 as LibraryOrAugmentationElementImpl;
   }
 
   @override
+  LibraryOrAugmentationElementImpl get enclosingElement3 {
+    return super.enclosingElement3 as LibraryOrAugmentationElementImpl;
+  }
+
+  @override
   LibraryAugmentationElementImpl? get importedAugmentation {
     final uri = this.uri;
     if (uri is DirectiveUriWithAugmentationImpl) {
@@ -714,7 +726,7 @@
   bool get hasNoSuchMethod {
     MethodElement? method = lookUpConcreteMethod(
         FunctionElement.NO_SUCH_METHOD_METHOD_NAME, library);
-    var definingClass = method?.enclosingElement2 as ClassElement?;
+    var definingClass = method?.enclosingElement3 as ClassElement?;
     return definingClass != null && !definingClass.isDartCoreObject;
   }
 
@@ -1140,16 +1152,21 @@
     _classes = classes;
   }
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryElement get enclosingElement =>
       super.enclosingElement2 as LibraryElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElement get enclosingElement2 =>
       super.enclosingElement2 as LibraryOrAugmentationElement;
 
   @override
+  LibraryOrAugmentationElement get enclosingElement3 =>
+      super.enclosingElement3 as LibraryOrAugmentationElement;
+
+  @override
   CompilationUnitElementImpl get enclosingUnit {
     return this;
   }
@@ -1224,7 +1241,7 @@
   }
 
   @override
-  AnalysisSession get session => enclosingElement2.session;
+  AnalysisSession get session => enclosingElement3.session;
 
   @override
   List<TopLevelVariableElement> get topLevelVariables {
@@ -1398,7 +1415,7 @@
 
   @override
   String get displayName {
-    var className = enclosingElement2.name;
+    var className = enclosingElement3.name;
     var name = this.name;
     if (name.isNotEmpty) {
       return '$className.$name';
@@ -1407,16 +1424,21 @@
     }
   }
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   AbstractClassElementImpl get enclosingElement =>
       super.enclosingElement2 as AbstractClassElementImpl;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   AbstractClassElementImpl get enclosingElement2 =>
       super.enclosingElement2 as AbstractClassElementImpl;
 
   @override
+  InterfaceElement get enclosingElement3 =>
+      super.enclosingElement3 as AbstractClassElementImpl;
+
+  @override
   bool get isConst {
     return hasModifier(Modifier.CONST);
   }
@@ -1451,7 +1473,7 @@
 
   @override
   Element get nonSynthetic {
-    return isSynthetic ? enclosingElement2 : this;
+    return isSynthetic ? enclosingElement3 : this;
   }
 
   @override
@@ -1476,7 +1498,7 @@
 
   @override
   InterfaceType get returnTypeInternal {
-    return (_returnType ??= enclosingElement2.thisType) as InterfaceType;
+    return (_returnType ??= enclosingElement3.thisType) as InterfaceType;
   }
 
   ConstructorElement? get superConstructor {
@@ -1605,7 +1627,7 @@
       if (library == null) {
         throw StateError(
           '[library: null][this: ($runtimeType) $this]'
-          '[enclosingElement2: $enclosingElement2]'
+          '[enclosingElement: $enclosingElement3]'
           '[reference: $reference]',
         );
       }
@@ -1977,7 +1999,7 @@
     final element = this.element;
     if (element is ConstructorElement) {
       return element.library.isDartCore &&
-          element.enclosingElement2.name == _DEPRECATED_CLASS_NAME;
+          element.enclosingElement3.name == _DEPRECATED_CLASS_NAME;
     } else if (element is PropertyAccessorElement) {
       return element.library.isDartCore &&
           element.name == _DEPRECATED_VARIABLE_NAME;
@@ -2107,7 +2129,7 @@
   }) {
     final element = this.element;
     return element is ConstructorElement &&
-        element.enclosingElement2.name == className &&
+        element.enclosingElement3.name == className &&
         element.library.name == libraryName;
   }
 
@@ -2221,7 +2243,7 @@
     _docComment = doc;
   }
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element? get enclosingElement => _enclosingElement;
 
@@ -2230,9 +2252,13 @@
     _enclosingElement = element as ElementImpl?;
   }
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element? get enclosingElement2 => _enclosingElement;
 
+  @override
+  Element? get enclosingElement3 => _enclosingElement;
+
   /// Return the enclosing unit element (which might be the same as `this`), or
   /// `null` if this element is not contained in any compilation unit.
   CompilationUnitElementImpl get enclosingUnit {
@@ -2581,12 +2607,12 @@
 
   @override
   AnalysisSession? get session {
-    return enclosingElement2?.session;
+    return enclosingElement3?.session;
   }
 
   @override
   Source? get source {
-    return enclosingElement2?.source;
+    return enclosingElement3?.source;
   }
 
   /// Return the context to resolve type parameters in, or `null` if neither
@@ -2696,7 +2722,7 @@
   ) {
     Element? element = this;
     while (element != null && !predicate(element)) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     return element as E?;
   }
@@ -2706,9 +2732,9 @@
     Element? element = this;
     while (element != null && element is! E) {
       if (element is CompilationUnitElement) {
-        element = element.enclosingElement2;
+        element = element.enclosingElement3;
       } else {
-        element = element.enclosingElement2;
+        element = element.enclosingElement3;
       }
     }
     return element as E?;
@@ -2787,7 +2813,7 @@
     Element? ancestor = element;
     while (ancestor != null) {
       components.insert(0, (ancestor as ElementImpl).identifier);
-      ancestor = ancestor.enclosingElement2;
+      ancestor = ancestor.enclosingElement3;
     }
     _components = components;
   }
@@ -3044,14 +3070,18 @@
   /// [offset].
   ExecutableElementImpl(String super.name, super.offset, {super.reference});
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement => super.enclosingElement2!;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2 => super.enclosingElement2!;
 
   @override
+  Element get enclosingElement3 => super.enclosingElement3!;
+
+  @override
   bool get hasImplicitReturnType {
     return hasModifier(Modifier.IMPLICIT_TYPE);
   }
@@ -3321,18 +3351,24 @@
   @override
   String get displayName => name ?? '';
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElementImpl get enclosingElement {
     return _enclosingElement as CompilationUnitElementImpl;
   }
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElementImpl get enclosingElement2 {
     return super.enclosingElement2 as CompilationUnitElementImpl;
   }
 
   @override
+  CompilationUnitElementImpl get enclosingElement3 {
+    return super.enclosingElement3 as CompilationUnitElementImpl;
+  }
+
+  @override
   DartType get extendedType =>
       ElementTypeProvider.current.getExtendedType(this);
 
@@ -3530,7 +3566,7 @@
   ///
   /// Such fields are `index`, `_name`, and `values`.
   bool get isSyntheticEnumField {
-    return enclosingElement2 is EnumElementImpl &&
+    return enclosingElement3 is EnumElementImpl &&
         isSynthetic &&
         getter?.isSynthetic == true &&
         setter == null;
@@ -3598,7 +3634,7 @@
   @override
   String get identifier {
     String identifier = super.identifier;
-    Element? enclosing = enclosingElement2;
+    Element? enclosing = enclosingElement3;
     if (enclosing is ExecutableElement || enclosing is VariableElement) {
       identifier += "@$nameOffset";
     }
@@ -3866,15 +3902,20 @@
   @override
   String get displayName => name;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ExecutableElement get enclosingElement =>
       super.enclosingElement2 as ExecutableElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ExecutableElement get enclosingElement2 =>
       super.enclosingElement2 as ExecutableElement;
 
+  @override
+  ExecutableElement get enclosingElement3 =>
+      super.enclosingElement3 as ExecutableElement;
+
   /// Return `true` if this label is associated with a `switch` member (`case
   /// ` or`default`).
   bool get isOnSwitchMember => _onSwitchMember;
@@ -4840,8 +4881,8 @@
 
   @override
   Element get nonSynthetic {
-    if (isSynthetic && enclosingElement2 is EnumElementImpl) {
-      return enclosingElement2;
+    if (isSynthetic && enclosingElement3 is EnumElementImpl) {
+      return enclosingElement3;
     }
     return this;
   }
@@ -5087,13 +5128,18 @@
   @override
   String? get documentationComment => null;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element? get enclosingElement => null;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element? get enclosingElement2 => null;
 
   @override
+  Element? get enclosingElement3 => null;
+
+  @override
   bool get hasAlwaysThrows => false;
 
   @override
@@ -5321,13 +5367,17 @@
   /// [offset].
   NonParameterVariableElementImpl(String super.name, super.offset);
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement => super.enclosingElement2!;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2 => super.enclosingElement2!;
 
+  @override
+  Element get enclosingElement3 => super.enclosingElement3!;
+
   bool get hasInitializer {
     return hasModifier(Modifier.HAS_INITIALIZER);
   }
@@ -5596,7 +5646,7 @@
 
   @override
   CompilationUnitElementImpl get enclosingUnit {
-    var enclosingLibrary = enclosingElement2 as LibraryElementImpl;
+    var enclosingLibrary = enclosingElement3 as LibraryElementImpl;
     return enclosingLibrary._definingCompilationUnit;
   }
 
@@ -5627,15 +5677,20 @@
   @override
   String get displayName => name;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryElement get enclosingElement =>
       super.enclosingElement2 as LibraryElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   LibraryOrAugmentationElementImpl get enclosingElement2 =>
       super.enclosingElement2 as LibraryOrAugmentationElementImpl;
 
+  @override
+  LibraryOrAugmentationElementImpl get enclosingElement3 =>
+      super.enclosingElement3 as LibraryOrAugmentationElementImpl;
+
   @Deprecated('Use imports2 instead')
   @override
   List<ImportElement> get imports {
@@ -5646,7 +5701,7 @@
 
   @override
   List<LibraryImportElement> get imports2 {
-    return enclosingElement2.libraryImports
+    return enclosingElement3.libraryImports
         .where((import) => import.prefix?.element == this)
         .toList();
   }
@@ -5660,7 +5715,7 @@
   }
 
   @override
-  Scope get scope => _scope ??= PrefixScope(enclosingElement2, this);
+  Scope get scope => _scope ??= PrefixScope(enclosingElement3, this);
 
   @override
   T? accept<T>(ElementVisitor<T> visitor) => visitor.visitPrefixElement(this);
@@ -5801,14 +5856,18 @@
     reference?.element = this;
   }
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement => variable.enclosingElement2!;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2 => variable.enclosingElement2!;
 
   @override
+  Element get enclosingElement3 => variable.enclosingElement3!;
+
+  @override
   bool get hasImplicitReturnType => variable.hasImplicitType;
 
   @override
@@ -5820,8 +5879,8 @@
     if (!variable.isSynthetic) {
       return variable;
     }
-    assert(enclosingElement2 is EnumElementImpl);
-    return enclosingElement2;
+    assert(enclosingElement3 is EnumElementImpl);
+    return enclosingElement3;
   }
 
   @override
@@ -5866,14 +5925,18 @@
     property.setter = this;
   }
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement => variable.enclosingElement2!;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   Element get enclosingElement2 => variable.enclosingElement2!;
 
   @override
+  Element get enclosingElement3 => variable.enclosingElement3!;
+
+  @override
   bool get isSetter => true;
 
   @override
@@ -5969,10 +6032,10 @@
   @override
   Element get nonSynthetic {
     if (isSynthetic) {
-      if (enclosingElement2 is EnumElementImpl) {
+      if (enclosingElement3 is EnumElementImpl) {
         // TODO(scheglov) remove 'index'?
         if (name == 'index' || name == 'values') {
-          return enclosingElement2;
+          return enclosingElement3;
         }
       }
       return (getter ?? setter)!;
@@ -6113,16 +6176,16 @@
 
   @override
   ParameterElement? get superConstructorParameter {
-    final enclosingElement2 = this.enclosingElement2;
-    if (enclosingElement2 is ConstructorElementImpl) {
-      var superConstructor = enclosingElement2.superConstructor;
+    final enclosingElement3 = this.enclosingElement3;
+    if (enclosingElement3 is ConstructorElementImpl) {
+      var superConstructor = enclosingElement3.superConstructor;
       if (superConstructor != null) {
         var superParameters = superConstructor.parameters;
         if (isNamed) {
           return superParameters
               .firstWhereOrNull((e) => e.isNamed && e.name == name);
         } else {
-          var index = indexIn(enclosingElement2);
+          var index = indexIn(enclosingElement3);
           var positionalSuperParameters =
               superParameters.where((e) => e.isPositional).toList();
           if (index >= 0 && index < positionalSuperParameters.length) {
@@ -6223,15 +6286,20 @@
   @override
   String get displayName => name;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement =>
       super.enclosingElement2 as CompilationUnitElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   CompilationUnitElement get enclosingElement2 =>
       super.enclosingElement2 as CompilationUnitElement;
 
+  @override
+  CompilationUnitElement get enclosingElement3 =>
+      super.enclosingElement3 as CompilationUnitElement;
+
   /// Returns whether this alias is a "proper rename" of [aliasedClass], as
   /// defined in the constructor-tearoffs specification.
   bool get isProperRename {
@@ -6470,7 +6538,7 @@
       return true;
     }
     if (other is TypeParameterElement) {
-      if (other.enclosingElement2 == null || enclosingElement2 == null) {
+      if (other.enclosingElement3 == null || enclosingElement3 == null) {
         return identical(other, this);
       }
       return other.location == location;
@@ -6700,7 +6768,7 @@
   String? get documentationComment => base.documentationComment;
 
   @override
-  Element? get enclosingElement => base.enclosingElement2;
+  Element? get enclosingElement => base.enclosingElement3;
 
   @override
   bool get hasAlwaysThrows => base.hasAlwaysThrows;
@@ -6866,7 +6934,7 @@
   Source get librarySource => library.source;
 
   @override
-  Source get source => enclosingElement2!.source!;
+  Source get source => enclosingElement3!.source!;
 }
 
 /// Instances of [List]s that are used as "not yet computed" values, they
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index 6b256a0..6186e8a 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -16,21 +16,21 @@
   /// Return the target kinds defined for this [ElementAnnotation].
   Set<TargetKind> get targetKinds {
     final element = this.element;
-    ClassElement? classElement;
+    InterfaceElement? interfaceElement;
     if (element is PropertyAccessorElement) {
       if (element.isGetter) {
         var type = element.returnType;
         if (type is InterfaceType) {
-          classElement = type.element;
+          interfaceElement = type.element;
         }
       }
     } else if (element is ConstructorElement) {
-      classElement = element.enclosingElement2;
+      interfaceElement = element.enclosingElement3;
     }
-    if (classElement == null) {
+    if (interfaceElement == null) {
       return const <TargetKind>{};
     }
-    for (var annotation in classElement.metadata) {
+    for (var annotation in interfaceElement.metadata) {
       if (annotation.isTarget) {
         var value = annotation.computeConstantValue()!;
         var kinds = <TargetKind>{};
@@ -68,21 +68,21 @@
       return true;
     }
 
-    var ancestor = enclosingElement2;
+    var ancestor = enclosingElement3;
     if (ancestor is ClassElement) {
       if (ancestor.hasDoNotStore) {
         return true;
       }
-      ancestor = ancestor.enclosingElement2;
+      ancestor = ancestor.enclosingElement3;
     } else if (ancestor is ExtensionElement) {
       if (ancestor.hasDoNotStore) {
         return true;
       }
-      ancestor = ancestor.enclosingElement2;
+      ancestor = ancestor.enclosingElement3;
     }
 
     return ancestor is CompilationUnitElement &&
-        ancestor.enclosingElement2.hasDoNotStore;
+        ancestor.enclosingElement3.hasDoNotStore;
   }
 
   /// Return `true` if this element is an instance member of a class or mixin.
@@ -94,7 +94,7 @@
   /// [PropertyAccessorElement]s.
   bool get isInstanceMember {
     var this_ = this;
-    var enclosing = this_.enclosingElement2;
+    var enclosing = this_.enclosingElement3;
     if (enclosing is ClassElement) {
       return this_ is MethodElement && !this_.isStatic ||
           this_ is PropertyAccessorElement && !this_.isStatic;
@@ -105,7 +105,7 @@
 
 extension ExecutableElementExtension on ExecutableElement {
   bool get isEnumConstructor {
-    return this is ConstructorElement && enclosingElement2 is EnumElementImpl;
+    return this is ConstructorElement && enclosingElement3 is EnumElementImpl;
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 9768db4..ad86fb1 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -366,7 +366,7 @@
         continue;
       }
 
-      var class_ = executable.enclosingElement2;
+      var class_ = executable.enclosingElement3;
       if (class_ is ClassElement && class_.isDartCoreObject) {
         continue;
       }
@@ -518,7 +518,7 @@
         }
 
         var current = currentList.single;
-        if (candidate.enclosingElement2 == mixinElement) {
+        if (candidate.enclosingElement3 == mixinElement) {
           namedCandidates[name] = [
             isNonNullableByDefault
                 ? candidate
@@ -714,7 +714,7 @@
     Name name,
     ExecutableElement executable,
   ) {
-    if (executable.enclosingElement2 == class_) {
+    if (executable.enclosingElement3 == class_) {
       return executable;
     }
 
@@ -902,7 +902,7 @@
   }
 
   static bool _isDeclaredInObject(ExecutableElement element) {
-    var enclosing = element.enclosingElement2;
+    var enclosing = element.enclosingElement3;
     return enclosing is ClassElement &&
         enclosing.supertype == null &&
         !enclosing.isMixin;
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 242170d..b0708f0 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -43,14 +43,18 @@
   @override
   String get displayName => declaration.displayName;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ClassElement get enclosingElement => declaration.enclosingElement2;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
   ClassElement get enclosingElement2 => declaration.enclosingElement2;
 
   @override
+  InterfaceElement get enclosingElement3 => declaration.enclosingElement3;
+
+  @override
   bool get isConst => declaration.isConst;
 
   @override
@@ -348,12 +352,16 @@
   @override
   String get displayName => declaration.displayName;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element get enclosingElement => declaration.enclosingElement2;
+  Element get enclosingElement => declaration.enclosingElement3;
+
+  @Deprecated('Use enclosingElement3 instead')
+  @override
+  Element get enclosingElement2 => declaration.enclosingElement3;
 
   @override
-  Element get enclosingElement2 => declaration.enclosingElement2;
+  Element get enclosingElement3 => declaration.enclosingElement3;
 
   @override
   PropertyAccessorElement? get getter {
@@ -442,12 +450,16 @@
   @override
   FunctionElement get declaration => super.declaration as FunctionElement;
 
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element get enclosingElement => declaration.enclosingElement2;
+  Element get enclosingElement => declaration.enclosingElement3;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element get enclosingElement2 => declaration.enclosingElement2;
+  Element get enclosingElement2 => declaration.enclosingElement3;
+
+  @override
+  Element get enclosingElement3 => declaration.enclosingElement3;
 
   @override
   bool get isDartCoreIdentical => declaration.isDartCoreIdentical;
@@ -505,12 +517,16 @@
   @override
   String? get documentationComment => _declaration.documentationComment;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element? get enclosingElement => _declaration.enclosingElement2;
+  Element? get enclosingElement => _declaration.enclosingElement3;
+
+  @Deprecated('Use enclosingElement3 instead')
+  @override
+  Element? get enclosingElement2 => _declaration.enclosingElement3;
 
   @override
-  Element? get enclosingElement2 => _declaration.enclosingElement2;
+  Element? get enclosingElement3 => _declaration.enclosingElement3;
 
   @override
   bool get hasAlwaysThrows => _declaration.hasAlwaysThrows;
@@ -799,12 +815,16 @@
   @override
   MethodElement get declaration => super.declaration as MethodElement;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element get enclosingElement => declaration.enclosingElement2;
+  Element get enclosingElement => declaration.enclosingElement3;
+
+  @Deprecated('Use enclosingElement3 instead')
+  @override
+  Element get enclosingElement2 => declaration.enclosingElement3;
 
   @override
-  Element get enclosingElement2 => declaration.enclosingElement2;
+  Element get enclosingElement3 => declaration.enclosingElement3;
 
   @override
   String get name => declaration.name;
@@ -887,12 +907,16 @@
   @override
   String? get defaultValueCode => declaration.defaultValueCode;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element? get enclosingElement => declaration.enclosingElement2;
+  Element? get enclosingElement => declaration.enclosingElement3;
+
+  @Deprecated('Use enclosingElement3 instead')
+  @override
+  Element? get enclosingElement2 => declaration.enclosingElement3;
 
   @override
-  Element? get enclosingElement2 => declaration.enclosingElement2;
+  Element? get enclosingElement3 => declaration.enclosingElement3;
 
   @override
   bool get hasDefaultValue => declaration.hasDefaultValue;
@@ -1032,12 +1056,16 @@
   PropertyAccessorElement get declaration =>
       super.declaration as PropertyAccessorElement;
 
-  @Deprecated('Use enclosingElement2 instead')
+  @Deprecated('Use enclosingElement3 instead')
   @override
-  Element get enclosingElement => declaration.enclosingElement2;
+  Element get enclosingElement => declaration.enclosingElement3;
+
+  @Deprecated('Use enclosingElement3 instead')
+  @override
+  Element get enclosingElement2 => declaration.enclosingElement3;
 
   @override
-  Element get enclosingElement2 => declaration.enclosingElement2;
+  Element get enclosingElement3 => declaration.enclosingElement3;
 
   @override
   bool get isGetter => declaration.isGetter;
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index 3faa7fb..eaff897 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -1696,7 +1696,7 @@
     // If the method being invoked comes from an extension, don't refine the
     // type because we can only make guarantees about methods defined in the
     // SDK, and the numeric methods we refine are all instance methods.
-    if (methodElement.enclosingElement2 is ExtensionElement) {
+    if (methodElement.enclosingElement3 is ExtensionElement) {
       return currentType;
     }
 
@@ -1800,7 +1800,7 @@
     // If the method being invoked comes from an extension, don't refine the
     // type because we can only make guarantees about methods defined in the
     // SDK, and the numeric methods we refine are all instance methods.
-    if (methodElement.enclosingElement2 is ExtensionElement) {
+    if (methodElement.enclosingElement3 is ExtensionElement) {
       return currentType;
     }
 
diff --git a/pkg/analyzer/lib/src/dart/micro/utils.dart b/pkg/analyzer/lib/src/dart/micro/utils.dart
index c5113f7..48c3c78 100644
--- a/pkg/analyzer/lib/src/dart/micro/utils.dart
+++ b/pkg/analyzer/lib/src/dart/micro/utils.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/element_locator.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:collection/src/iterable_extensions.dart';
@@ -15,6 +16,9 @@
   if (node == null) {
     return null;
   }
+  if (node is DeclaredSimpleIdentifier) {
+    node = node.parent;
+  }
   if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
     node = node.parent;
   }
@@ -43,8 +47,8 @@
     ConstructorElement? constructor) {
   var seenConstructors = <ConstructorElement?>{};
   while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
-    var enclosing = constructor.enclosingElement2;
-    if (enclosing.isMixinApplication) {
+    var enclosing = constructor.enclosingElement3;
+    if (enclosing is ClassElement && enclosing.isMixinApplication) {
       var superInvocation = constructor.constantInitializers
           .whereType<SuperConstructorInvocation>()
           .singleOrNull;
@@ -73,7 +77,7 @@
     String prefix,
     Element element,
     Map<LibraryImportElement, Set<Element>> importElementsMap) {
-  if (element.enclosingElement2 is! CompilationUnitElement) {
+  if (element.enclosingElement3 is! CompilationUnitElement) {
     return null;
   }
   var usedLibrary = element.library;
@@ -280,7 +284,7 @@
             MatchInfo(e.nameOffset + e.nameLength, 0, MatchKind.DECLARATION));
       } else {
         var offset = node.period!.offset;
-        var length = node.name!.end - offset;
+        var length = node.name2!.end - offset;
         references.add(MatchInfo(offset, length, MatchKind.DECLARATION));
       }
     }
@@ -310,7 +314,7 @@
         length = 0;
       }
       references.add(MatchInfo(offset, length, kind));
-    } else if (e != null && e.enclosingElement2 == element) {
+    } else if (e != null && e.enclosingElement3 == element) {
       kind = MatchKind.REFERENCE;
       offset = node.offset;
       length = element.nameLength;
@@ -329,7 +333,7 @@
         offset = constructorSelector.period.offset;
         length = constructorSelector.name.end - offset;
       } else {
-        offset = node.name.end;
+        offset = node.name2.end;
         length = 0;
       }
       var kind = node.arguments == null
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 339f8df..0e5cbf2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -29,15 +29,16 @@
     }
     node.constructorName.accept(_resolver);
     var element = node.constructorName.staticElement;
-    if (element != null &&
-        !element.isFactory &&
-        element.enclosingElement2.isAbstract) {
-      _resolver.errorReporter.reportErrorForNode(
-        CompileTimeErrorCode
-            .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
-        node,
-        [],
-      );
+    if (element != null && !element.isFactory) {
+      final enclosingElement = element.enclosingElement3;
+      if (enclosingElement is ClassElement && enclosingElement.isAbstract) {
+        _resolver.errorReporter.reportErrorForNode(
+          CompileTimeErrorCode
+              .TEAROFF_OF_GENERATIVE_CONSTRUCTOR_OF_ABSTRACT_CLASS,
+          node,
+          [],
+        );
+      }
     }
     var name = node.constructorName.name;
     if (element == 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 dba662f..d746b4b 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -175,7 +175,7 @@
     ExecutableElement element, {
     required bool implicitReceiver,
   }) {
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (implicitReceiver) {
       if (_resolver.enclosingExtension != null) {
         _resolver.errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
index 729d28a..52a7b37 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -26,7 +26,7 @@
   int unnamedParameterIndex = 0;
   for (var formalParameter in parameters) {
     var key = formalParameter.isNamed
-        ? formalParameter.identifier?.name ?? ''
+        ? formalParameter.name?.lexeme ?? ''
         : unnamedParameterIndex++;
     if (formalParameter.isExplicitlyTyped) {
       result.add(key);
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index ac88021..0f67ceec 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -220,7 +220,7 @@
     ExecutableElement element,
     bool nullReceiver,
   ) {
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (nullReceiver) {
       if (_resolver.enclosingExtension != null) {
         _resolver.errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index cc95ced..362b8a7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -568,7 +568,7 @@
 
     if (element is LocalVariableElement ||
         (element is FunctionElement &&
-            element.enclosingElement2 is ExecutableElement)) {
+            element.enclosingElement3 is ExecutableElement)) {
       errorReporter.reportError(
         DiagnosticFactory().referencedBeforeDeclaration(
           errorReporter.source,
diff --git a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
index 08996d4..53483f9 100644
--- a/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/prefixed_identifier_resolver.dart
@@ -135,7 +135,7 @@
       return false;
     }
     if (parent is ConstructorDeclaration) {
-      if (parent.name == node || parent.returnType == node) {
+      if (parent.returnType == node) {
         return false;
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index fd96f2e..082e7fb 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -291,7 +291,7 @@
           propertyName,
         );
       } else {
-        var enclosingElement = element.enclosingElement2;
+        var enclosingElement = element.enclosingElement3;
         if (enclosingElement is ExtensionElement &&
             enclosingElement.name == null) {
           _resolver.errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index a528110..1283c93 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -240,7 +240,7 @@
   @override
   void visitClassDeclaration(covariant ClassDeclarationImpl node) {
     ClassElementImpl element = _elementWalker!.getClass();
-    node.name.staticElement = element;
+    node.declaredElement = element;
     _namedTypeResolver.enclosingClass = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -275,7 +275,7 @@
   @override
   void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
     ClassElementImpl element = _elementWalker!.getClass();
-    node.name.staticElement = element;
+    node.declaredElement = element;
     _namedTypeResolver.enclosingClass = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -303,7 +303,7 @@
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     ConstructorElementImpl element = _elementWalker!.getConstructor();
     (node as ConstructorDeclarationImpl).declaredElement = element;
-    node.name?.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -330,10 +330,10 @@
 
   @override
   void visitDeclaredIdentifier(covariant DeclaredIdentifierImpl node) {
-    var nameNode = node.identifier;
-    var element = LocalVariableElementImpl(nameNode.name, nameNode.offset);
+    var nameToken = node.name;
+    var element = LocalVariableElementImpl(nameToken.lexeme, nameToken.offset);
     _elementHolder.enclose(element);
-    nameNode.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -354,14 +354,14 @@
   @override
   void visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
     var normalParameter = node.parameter;
-    var nameNode = normalParameter.identifier;
+    var nameToken = normalParameter.name;
 
     ParameterElementImpl element;
     if (_elementWalker != null) {
       element = _elementWalker!.getParameter();
     } else {
-      var name = nameNode?.name ?? '';
-      var nameOffset = nameNode?.offset ?? -1;
+      var name = nameToken?.lexeme ?? '';
+      var nameOffset = nameToken?.offset ?? -1;
       if (node.parameter is FieldFormalParameter) {
         // Only for recovery, this should not happen in valid code.
         element = DefaultFieldFormalParameterElementImpl(
@@ -389,10 +389,8 @@
       }
     }
 
-    if (normalParameter is SimpleFormalParameterImpl) {
-      normalParameter.declaredElement = element;
-    }
-    nameNode?.staticElement = element;
+    normalParameter.declaredElement = element;
+    node.declaredElement = element;
 
     normalParameter.accept(this);
 
@@ -409,8 +407,8 @@
   @override
   void visitEnumConstantDeclaration(
       covariant EnumConstantDeclarationImpl node) {
-    var element = _elementWalker!.getVariable();
-    node.name.staticElement = element;
+    var element = _elementWalker!.getVariable() as ConstFieldElementImpl;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -427,7 +425,7 @@
   @override
   void visitEnumDeclaration(covariant EnumDeclarationImpl node) {
     EnumElementImpl element = _elementWalker!.getEnum();
-    node.name.staticElement = element;
+    node.declaredElement = element;
     _namedTypeResolver.enclosingClass = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -466,7 +464,7 @@
   void visitExtensionDeclaration(ExtensionDeclaration node) {
     var element = _elementWalker!.getExtension();
     (node as ExtensionDeclarationImpl).declaredElement = element;
-    node.name?.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -489,15 +487,15 @@
     if (node.parent is DefaultFormalParameter) {
       element = node.declaredElement as FieldFormalParameterElementImpl;
     } else {
-      var nameNode = node.identifier;
+      var nameToken = node.name;
       if (_elementWalker != null) {
         element =
             _elementWalker!.getParameter() as FieldFormalParameterElementImpl;
       } else {
         // Only for recovery, this should not happen in valid code.
         element = FieldFormalParameterElementImpl(
-          name: nameNode.name,
-          nameOffset: nameNode.offset,
+          name: nameToken.lexeme,
+          nameOffset: nameToken.offset,
           parameterKind: node.kind,
         );
         _elementHolder.enclose(element);
@@ -506,7 +504,7 @@
         element.isFinal = node.isFinal;
         _setCodeRange(element, node);
       }
-      nameNode.staticElement = element;
+      node.declaredElement = element;
     }
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -548,7 +546,7 @@
       element = node.isGetter || node.isSetter
           ? _elementWalker!.getAccessor()
           : _elementWalker!.getFunction();
-      node.name.staticElement = element;
+      node.declaredElement = element;
     } else {
       element = node.declaredElement as ExecutableElementImpl;
 
@@ -648,7 +646,7 @@
   @override
   void visitFunctionTypeAlias(covariant FunctionTypeAliasImpl node) {
     var element = _elementWalker!.getTypedef();
-    node.name.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -670,13 +668,13 @@
     if (node.parent is DefaultFormalParameter) {
       element = node.declaredElement as ParameterElementImpl;
     } else {
-      var nameNode = node.identifier;
+      var nameToken = node.name;
       if (_elementWalker != null) {
         element = _elementWalker!.getParameter();
       } else {
         element = ParameterElementImpl(
-          name: nameNode.name,
-          nameOffset: nameNode.offset,
+          name: nameToken.lexeme,
+          nameOffset: nameToken.offset,
           parameterKind: node.kind,
         );
         _elementHolder.addParameter(element);
@@ -685,7 +683,7 @@
         element.isFinal = node.isFinal;
         _setCodeRange(element, node);
       }
-      nameNode.staticElement = element;
+      node.declaredElement = element;
     }
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -762,7 +760,7 @@
   @override
   void visitGenericTypeAlias(covariant GenericTypeAliasImpl node) {
     var element = _elementWalker!.getTypedef();
-    node.name.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -864,7 +862,7 @@
     ExecutableElementImpl element = node.isGetter || node.isSetter
         ? _elementWalker!.getAccessor()
         : _elementWalker!.getFunction();
-    node.name.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -899,7 +897,7 @@
   @override
   void visitMixinDeclaration(covariant MixinDeclarationImpl node) {
     var element = _elementWalker!.getMixin();
-    node.name.staticElement = element;
+    node.declaredElement = element;
 
     _setOrCreateMetadataElements(element, node.metadata);
 
@@ -975,14 +973,14 @@
     if (node.parent is DefaultFormalParameter) {
       element = node.declaredElement as ParameterElementImpl;
     } else {
-      var nameNode = node.identifier;
+      var nameToken = node.name;
       if (_elementWalker != null) {
         element = _elementWalker!.getParameter();
       } else {
-        if (nameNode != null) {
+        if (nameToken != null) {
           element = ParameterElementImpl(
-            name: nameNode.name,
-            nameOffset: nameNode.offset,
+            name: nameToken.lexeme,
+            nameOffset: nameToken.offset,
             parameterKind: node.kind,
           );
         } else {
@@ -1003,7 +1001,6 @@
         }
         node.declaredElement = element;
       }
-      nameNode?.staticElement = element;
       node.declaredElement = element;
     }
 
@@ -1021,15 +1018,15 @@
     if (node.parent is DefaultFormalParameter) {
       element = node.declaredElement as SuperFormalParameterElementImpl;
     } else {
-      var nameNode = node.identifier;
+      var nameToken = node.name;
       if (_elementWalker != null) {
         element =
             _elementWalker!.getParameter() as SuperFormalParameterElementImpl;
       } else {
         // Only for recovery, this should not happen in valid code.
         element = SuperFormalParameterElementImpl(
-          name: nameNode.name,
-          nameOffset: nameNode.offset,
+          name: nameToken.lexeme,
+          nameOffset: nameToken.offset,
           parameterKind: node.kind,
         );
         _elementHolder.enclose(element);
@@ -1038,7 +1035,7 @@
         element.isFinal = node.isFinal;
         _setCodeRange(element, node);
       }
-      nameNode.staticElement = element;
+      node.declaredElement = element;
     }
 
     _setOrCreateMetadataElements(element, node.metadata);
@@ -1112,7 +1109,7 @@
     VariableElementImpl element;
     if (_elementWalker != null) {
       element = _elementWalker!.getVariable();
-      node.name.staticElement = element;
+      node.declaredElement = element;
     } else {
       var localElement = node.declaredElement as LocalVariableElementImpl;
       element = localElement;
@@ -1196,9 +1193,9 @@
   void _buildLocalFunctionElement(
       covariant FunctionDeclarationStatementImpl statement) {
     var node = statement.functionDeclaration;
-    var nameNode = node.name;
-    var element = FunctionElementImpl(nameNode.name, nameNode.offset);
-    nameNode.staticElement = element;
+    var nameToken = node.name2;
+    var element = FunctionElementImpl(nameToken.lexeme, nameToken.offset);
+    node.declaredElement = element;
     _define(element);
     _elementHolder.enclose(element);
   }
@@ -1209,21 +1206,21 @@
     var isLate = variableList.isLate;
     for (var variable in variableList.variables) {
       variable as VariableDeclarationImpl;
-      var variableName = variable.name;
+      var nameToken = variable.name2;
 
       LocalVariableElementImpl element;
       if (isConst && variable.initializer != null) {
         element = ConstLocalVariableElementImpl(
-          variableName.name,
-          variableName.offset,
+          nameToken.lexeme,
+          nameToken.offset,
         );
       } else {
         element = LocalVariableElementImpl(
-          variableName.name,
-          variableName.offset,
+          nameToken.lexeme,
+          nameToken.offset,
         );
       }
-      variableName.staticElement = element;
+      variable.declaredElement = element;
       _elementHolder.enclose(element);
       _define(element);
 
@@ -1241,18 +1238,20 @@
 
     for (var typeParameter in typeParameterList.typeParameters) {
       typeParameter as TypeParameterImpl;
-      var name = typeParameter.name;
+      var name = typeParameter.name2;
 
       TypeParameterElementImpl element;
       if (_elementWalker != null) {
         element = _elementWalker!.getTypeParameter();
       } else {
-        element = TypeParameterElementImpl(name.name, name.offset);
+        element = TypeParameterElementImpl(name.lexeme, name.offset);
         _elementHolder.addTypeParameter(element);
 
         _setCodeRange(element, typeParameter);
       }
-      name.staticElement = element;
+      typeParameter.declaredElement = element;
+      // ignore: deprecated_member_use_from_same_package
+      typeParameter.name.staticElement = element;
       _define(element);
       _setOrCreateMetadataElements(element, typeParameter.metadata);
     }
diff --git a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
index 9846ada..97dbd16 100644
--- a/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/simple_identifier_resolver.dart
@@ -77,7 +77,7 @@
       return false;
     }
     if (parent is ConstructorDeclaration) {
-      if (parent.name == node || parent.returnType == node) {
+      if (parent.returnType == node) {
         return false;
       }
     }
diff --git a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
index 17d7f04..d9be7b7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -33,7 +33,7 @@
         _resolver.errorReporter.reportErrorForNode(
           HintCode.INFERENCE_FAILURE_ON_UNINITIALIZED_VARIABLE,
           node,
-          [node.name.name],
+          [node.name2.lexeme],
         );
       }
       return;
@@ -70,8 +70,13 @@
       element.constantInitializer = initializer;
     }
 
-    _resolver.checkForInvalidAssignment(node.name, initializer,
-        whyNotPromoted: whyNotPromoted);
+    _resolver.checkForAssignableExpressionAtType(
+      initializer,
+      initializer.typeOrThrow,
+      element.type,
+      CompileTimeErrorCode.INVALID_ASSIGNMENT,
+      whyNotPromoted: whyNotPromoted,
+    );
   }
 
   void _setInferredType(VariableElement element, DartType initializerType) {
diff --git a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
index 9726e9f..d3dfb14 100644
--- a/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
+++ b/pkg/analyzer/lib/src/diagnostic/diagnostic_factory.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
@@ -74,19 +75,19 @@
   AnalysisError invalidOverride(
       Source source,
       ErrorCode? errorCode,
-      AstNode errorNode,
+      SyntacticEntity errorNode,
       ExecutableElement member,
       ExecutableElement superMember) {
     errorCode ??= CompileTimeErrorCode.INVALID_OVERRIDE;
     // Elements enclosing members that can participate in overrides are always
-    // named, so we can safely assume `_thisMember.enclosingElement2.name` and
-    // `superMember.enclosingElement2.name` are non-`null`.
+    // named, so we can safely assume `_thisMember.enclosingElement3.name` and
+    // `superMember.enclosingElement3.name` are non-`null`.
     return AnalysisError(
         source, errorNode.offset, errorNode.length, errorCode, [
       member.name,
-      member.enclosingElement2.name!,
+      member.enclosingElement3.name!,
       member.type,
-      superMember.enclosingElement2.name!,
+      superMember.enclosingElement3.name!,
       superMember.type,
     ], [
       // Only include the context location for INVALID_OVERRIDE because for
diff --git a/pkg/analyzer/lib/src/error/assignment_verifier.dart b/pkg/analyzer/lib/src/error/assignment_verifier.dart
index 4e7b029..9cef247 100644
--- a/pkg/analyzer/lib/src/error/assignment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/assignment_verifier.dart
@@ -91,7 +91,7 @@
         _errorReporter.reportErrorForNode(
           CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
           node,
-          [variable.name, variable.enclosingElement2.displayName],
+          [variable.name, variable.enclosingElement3.displayName],
         );
       } else {
         _errorReporter.reportErrorForNode(
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index a1b430c..8b3e2ad 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -171,7 +171,7 @@
           }
         }
       } else if (parent is ConstructorDeclaration) {
-        var class_ = parent.declaredElement!.enclosingElement2;
+        var class_ = parent.declaredElement!.enclosingElement3;
         if (class_.isPrivate || (parentElement?.isPrivate ?? false)) {
           _errorReporter.reportErrorForNode(
               HintCode.INVALID_INTERNAL_ANNOTATION, node, []);
@@ -301,9 +301,9 @@
       if (undefinedParam != null) {
         String? name;
         if (parent is FunctionDeclaration) {
-          name = parent.name.name;
+          name = parent.name2.lexeme;
         } else if (parent is MethodDeclaration) {
-          name = parent.name.name;
+          name = parent.name2.lexeme;
         }
         if (name != null) {
           var paramName = undefinedParam is SimpleStringLiteral
@@ -323,7 +323,7 @@
         var invokedElement = element.element!;
         var name = invokedElement.name;
         if (invokedElement is ConstructorElement) {
-          var className = invokedElement.enclosingElement2.name;
+          var className = invokedElement.enclosingElement3.name;
           if (name!.isEmpty) {
             name = className;
           } else {
@@ -471,7 +471,7 @@
           final element = field.declaredElement;
           if (element is PropertyAccessorElement || element is FieldElement) {
             Name name = Name(_currentLibrary.source.uri, element!.name);
-            Element enclosingElement = element.enclosingElement2!;
+            Element enclosingElement = element.enclosingElement3!;
             if (enclosingElement is ClassElement) {
               var overridden = _inheritanceManager
                   .getMember2(enclosingElement, name, forSuper: true);
@@ -493,11 +493,11 @@
             _hasNonVirtualAnnotation(overriddenElement)) {
           // Overridden members are always inside classes or mixins, which are
           // always named, so we can safely assume
-          // `overriddenElement.enclosingElement2.name` is non-`null`.
-          _errorReporter.reportErrorForNode(
-              HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER, field.name, [
-            field.name.name,
-            overriddenElement.enclosingElement2.displayName
+          // `overriddenElement.enclosingElement3.name` is non-`null`.
+          _errorReporter.reportErrorForToken(
+              HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER, field.name2, [
+            field.name2.lexeme,
+            overriddenElement.enclosingElement3.displayName
           ]);
         }
         if (!_invalidAccessVerifier._inTestDirectory) {
@@ -534,7 +534,8 @@
 
       // Return types are inferred only on non-recursive local functions.
       if (node.parent is CompilationUnit && !node.isSetter) {
-        _checkStrictInferenceReturnType(node.returnType, node, node.name.name);
+        _checkStrictInferenceReturnType(
+            node.returnType, node, node.name2.lexeme);
       }
       _checkStrictInferenceInParameters(node.functionExpression.parameters,
           body: node.functionExpression.body);
@@ -571,15 +572,14 @@
 
   @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
-    _checkStrictInferenceReturnType(node.returnType, node, node.name.name);
+    _checkStrictInferenceReturnType(node.returnType, node, node.name2.lexeme);
     _checkStrictInferenceInParameters(node.parameters);
     super.visitFunctionTypeAlias(node);
   }
 
   @override
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
-    _checkStrictInferenceReturnType(
-        node.returnType, node, node.identifier.name);
+    _checkStrictInferenceReturnType(node.returnType, node, node.name.lexeme);
     _checkStrictInferenceInParameters(node.parameters);
     super.visitFunctionTypedFormalParameter(node);
   }
@@ -598,7 +598,7 @@
   void visitGenericTypeAlias(GenericTypeAlias node) {
     if (node.functionType != null) {
       _checkStrictInferenceReturnType(
-          node.functionType!.returnType, node, node.name.name);
+          node.functionType!.returnType, node, node.name2.lexeme);
     }
     super.visitGenericTypeAlias(node);
   }
@@ -640,7 +640,7 @@
   void visitMethodDeclaration(MethodDeclaration node) {
     bool wasInDoNotStoreMember = _inDoNotStoreMember;
     var element = node.declaredElement!;
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
 
     Name name = Name(_currentLibrary.source.uri, element.name);
 
@@ -672,7 +672,8 @@
           : false;
 
       if (!node.isSetter && !elementIsOverride) {
-        _checkStrictInferenceReturnType(node.returnType, node, node.name.name);
+        _checkStrictInferenceReturnType(
+            node.returnType, node, node.name2.lexeme);
       }
       if (!elementIsOverride) {
         _checkStrictInferenceInParameters(node.parameters, body: node.body);
@@ -687,11 +688,12 @@
           _hasNonVirtualAnnotation(overriddenElement)) {
         // Overridden members are always inside classes or mixins, which are
         // always named, so we can safely assume
-        // `overriddenElement.enclosingElement2.name` is non-`null`.
-        _errorReporter.reportErrorForNode(
-            HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER,
-            node.name,
-            [node.name.name, overriddenElement.enclosingElement2.displayName]);
+        // `overriddenElement.enclosingElement3.name` is non-`null`.
+        _errorReporter.reportErrorForToken(
+            HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER, node.name2, [
+          node.name2.lexeme,
+          overriddenElement.enclosingElement3.displayName
+        ]);
       }
 
       super.visitMethodDeclaration(node);
@@ -1051,8 +1053,8 @@
           definedOrInheritedNonFinalInstanceFields(
               element, HashSet<ClassElement>());
       if (nonFinalFields.isNotEmpty) {
-        _errorReporter.reportErrorForNode(
-            HintCode.MUST_BE_IMMUTABLE, node.name, [nonFinalFields.join(', ')]);
+        _errorReporter.reportErrorForToken(HintCode.MUST_BE_IMMUTABLE,
+            node.name2, [nonFinalFields.join(', ')]);
       }
     }
   }
@@ -1124,8 +1126,8 @@
     // Note that null return types are expected to be flagged by other analyses.
     var returnType = decl.returnType?.type;
     if (returnType is VoidType) {
-      _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_DECL,
-          decl.name, [decl.name.toString()]);
+      _errorReporter.reportErrorForToken(HintCode.INVALID_FACTORY_METHOD_DECL,
+          decl.name2, [decl.name2.lexeme]);
       return;
     }
 
@@ -1153,8 +1155,8 @@
       }
     }
 
-    _errorReporter.reportErrorForNode(HintCode.INVALID_FACTORY_METHOD_IMPL,
-        decl.name, [decl.name.toString()]);
+    _errorReporter.reportErrorForToken(
+        HintCode.INVALID_FACTORY_METHOD_IMPL, decl.name2, [decl.name2.lexeme]);
   }
 
   void _checkForInvalidSealedSuperclass(NamedCompilationUnitMember node) {
@@ -1314,18 +1316,25 @@
       return;
     }
 
-    var errorNode = functionNode;
     if (functionNode is FunctionDeclaration) {
-      errorNode = functionNode.name;
+      _errorReporter.reportErrorForToken(
+        HintCode.MISSING_RETURN,
+        functionNode.name2,
+        [returnType],
+      );
     } else if (functionNode is MethodDeclaration) {
-      errorNode = functionNode.name;
+      _errorReporter.reportErrorForToken(
+        HintCode.MISSING_RETURN,
+        functionNode.name2,
+        [returnType],
+      );
+    } else {
+      _errorReporter.reportErrorForNode(
+        HintCode.MISSING_RETURN,
+        functionNode,
+        [returnType],
+      );
     }
-
-    _errorReporter.reportErrorForNode(
-      HintCode.MISSING_RETURN,
-      errorNode,
-      [returnType],
-    );
   }
 
   void _checkForNullableTypeInCatchClause(CatchClause node) {
@@ -1451,7 +1460,7 @@
   ///
   /// Return `true` if and only if a hint code is generated on the passed node.
   bool _checkForUnnecessaryNoSuchMethod(MethodDeclaration node) {
-    if (node.name.name != FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
+    if (node.name2.lexeme != FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
       return false;
     }
     bool isNonObjectNoSuchMethodInvocation(Expression? invocation) {
@@ -1461,7 +1470,7 @@
         SimpleIdentifier name = invocation.methodName;
         if (name.name == FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
           var methodElement = name.staticElement;
-          var classElement = methodElement?.enclosingElement2;
+          var classElement = methodElement?.enclosingElement3;
           return methodElement is MethodElement &&
               classElement is ClassElement &&
               !classElement.isDartCoreObject;
@@ -1473,8 +1482,8 @@
     FunctionBody body = node.body;
     if (body is ExpressionFunctionBody) {
       if (isNonObjectNoSuchMethodInvocation(body.expression)) {
-        _errorReporter.reportErrorForNode(
-            HintCode.UNNECESSARY_NO_SUCH_METHOD, node.name);
+        _errorReporter.reportErrorForToken(
+            HintCode.UNNECESSARY_NO_SUCH_METHOD, node.name2);
         return true;
       }
     } else if (body is BlockFunctionBody) {
@@ -1483,8 +1492,8 @@
         Statement returnStatement = statements.first;
         if (returnStatement is ReturnStatement &&
             isNonObjectNoSuchMethodInvocation(returnStatement.expression)) {
-          _errorReporter.reportErrorForNode(
-              HintCode.UNNECESSARY_NO_SUCH_METHOD, node.name);
+          _errorReporter.reportErrorForToken(
+              HintCode.UNNECESSARY_NO_SUCH_METHOD, node.name2);
           return true;
         }
       }
@@ -1611,7 +1620,7 @@
 
       for (var param in parameterList.parameters) {
         // Param is defined.
-        if (param.identifier?.name == unlessParam) {
+        if (param.name?.lexeme == unlessParam) {
           return null;
         }
       }
@@ -1804,8 +1813,7 @@
   }
 
   static String _formalParameterNameOrEmpty(FormalParameter node) {
-    var identifier = node.identifier;
-    return identifier?.name ?? '';
+    return node.name?.lexeme ?? '';
   }
 
   static bool _hasNonVirtualAnnotation(ExecutableElement element) {
@@ -1901,7 +1909,7 @@
 
       if (node.leftOperand is SuperExpression) {
         var methodDeclaration = node.thisOrAncestorOfType<MethodDeclaration>();
-        if (methodDeclaration?.name.name == operator.lexeme) {
+        if (methodDeclaration?.name2.lexeme == operator.lexeme) {
           return;
         }
       }
@@ -1965,7 +1973,7 @@
       SimpleIdentifier identifier, Element element) {
     bool hasProtected = _hasProtected(element);
     if (hasProtected) {
-      var definingClass = element.enclosingElement2 as ClassElement;
+      var definingClass = element.enclosingElement3 as ClassElement;
       if (_hasTypeOrSuperType(_enclosingClass, definingClass)) {
         return;
       }
@@ -2004,7 +2012,7 @@
       node = identifier;
     }
 
-    var definingClass = element.enclosingElement2;
+    var definingClass = element.enclosingElement3;
     if (hasProtected) {
       _errorReporter.reportErrorForNode(
           HintCode.INVALID_USE_OF_PROTECTED_MEMBER,
@@ -2032,7 +2040,7 @@
           parent is PropertyAccess && parent.target is SuperExpression) {
         var methodDeclaration =
             grandparent?.thisOrAncestorOfType<MethodDeclaration>();
-        if (methodDeclaration?.name.name == identifier.name) {
+        if (methodDeclaration?.name2.lexeme == identifier.name) {
           validOverride = true;
         }
       }
@@ -2060,12 +2068,12 @@
 
   bool _hasProtected(Element element) {
     if (element is PropertyAccessorElement &&
-        element.enclosingElement2 is ClassElement &&
+        element.enclosingElement3 is ClassElement &&
         (element.hasProtected || element.variable.hasProtected)) {
       return true;
     }
     if (element is MethodElement &&
-        element.enclosingElement2 is ClassElement &&
+        element.enclosingElement3 is ClassElement &&
         element.hasProtected) {
       return true;
     }
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index 42d4dde..13fe69c 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -234,10 +234,10 @@
           _fieldMap[fieldElement] = _InitState.initInFieldFormal;
         } else if (state == _InitState.initInDeclaration) {
           if (fieldElement.isFinal || fieldElement.isConst) {
-            _errorReporter.reportErrorForNode(
+            _errorReporter.reportErrorForToken(
               CompileTimeErrorCode
                   .FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
-              parameter.identifier,
+              parameter.name,
               [fieldElement.displayName],
             );
           }
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 609bc46..82b95dd 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -50,7 +50,7 @@
   void verify({
     required ExecutableElement superMember,
     required ErrorReporter errorReporter,
-    required AstNode errorNode,
+    required SyntacticEntity errorNode,
     ErrorCode? errorCode,
   }) {
     var isCorrect = isCorrectOverrideOf(superMember: superMember);
@@ -110,7 +110,7 @@
 
   void verify({
     required ErrorReporter errorReporter,
-    required AstNode errorNode,
+    required SyntacticEntity errorNode,
   }) {
     var superParameters = _superParameters();
     for (var entry in superParameters.entries) {
@@ -123,16 +123,17 @@
           var superMember = superParameter.member;
           // Elements enclosing members that can participate in overrides are
           // always named, so we can safely assume
-          // `_thisMember.enclosingElement2.name` and
-          // `superMember.enclosingElement2.name` are non-`null`.
-          errorReporter.reportErrorForNode(
+          // `_thisMember.enclosingElement3.name` and
+          // `superMember.enclosingElement3.name` are non-`null`.
+          errorReporter.reportErrorForOffset(
             CompileTimeErrorCode.INVALID_OVERRIDE,
-            errorNode,
+            errorNode.offset,
+            errorNode.length,
             [
               _thisMember.name,
-              _thisMember.enclosingElement2.name!,
+              _thisMember.enclosingElement3.name!,
               _thisMember.type,
-              superMember.enclosingElement2.name!,
+              superMember.enclosingElement3.name!,
               superMember.type,
             ],
           );
@@ -143,7 +144,7 @@
 
   List<_SuperMember> _superMembers() {
     var classHierarchy = _session.classHierarchy;
-    var classElement = _thisMember.enclosingElement2 as ClassElement;
+    var classElement = _thisMember.enclosingElement3 as ClassElement;
     var interfaces = classHierarchy.implementedInterfaces(classElement);
 
     var superMembers = <_SuperMember>[];
@@ -272,5 +273,5 @@
   _SuperParameter(this.element, this.type);
 
   ExecutableElement get member =>
-      element.enclosingElement2 as ExecutableElement;
+      element.enclosingElement3 as ExecutableElement;
 }
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index 954b777..a3aed31 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -169,7 +169,7 @@
       // TODO(jwren) We should modify ConstructorElement.getDisplayName(),
       // or have the logic centralized elsewhere, instead of doing this logic
       // here.
-      displayName = element.enclosingElement2.displayName;
+      displayName = element.enclosingElement3.displayName;
       if (element.displayName.isNotEmpty) {
         displayName = "$displayName.${element.displayName}";
       }
@@ -268,7 +268,7 @@
   /// Return `true` if [element] is a [ParameterElement] declared in [node].
   static bool _isLocalParameter(Element? element, AstNode? node) {
     if (element is ParameterElement) {
-      var definingFunction = element.enclosingElement2 as ExecutableElement;
+      var definingFunction = element.enclosingElement3 as ExecutableElement;
 
       for (; node != null; node = node.parent) {
         if (node is ConstructorDeclaration) {
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 58db0cd..3afd901 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -5,6 +5,7 @@
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
@@ -54,8 +55,9 @@
     var staticSetters = <String, Element>{};
 
     for (EnumConstantDeclaration constant in node.constants) {
-      _checkDuplicateIdentifier(staticGetters, constant.name);
-      _checkValuesDeclarationInEnum(constant.name);
+      _checkDuplicateIdentifier(staticGetters, constant.name2,
+          element: constant.declaredElement!);
+      _checkValuesDeclarationInEnum(constant.name2);
     }
 
     for (var member in node.members) {
@@ -79,10 +81,11 @@
         }
       } else if (member is FieldDeclaration) {
         for (var field in member.fields.variables) {
-          var identifier = field.name;
+          var identifier = field.name2;
           _checkDuplicateIdentifier(
             member.isStatic ? staticGetters : instanceGetters,
             identifier,
+            element: field.declaredElement!,
             setterScope: member.isStatic ? staticSetters : instanceSetters,
           );
           _checkValuesDeclarationInEnum(identifier);
@@ -90,27 +93,28 @@
       } else if (member is MethodDeclaration) {
         _checkDuplicateIdentifier(
           member.isStatic ? staticGetters : instanceGetters,
-          member.name,
+          member.name2,
+          element: member.declaredElement!,
           setterScope: member.isStatic ? staticSetters : instanceSetters,
         );
         if (!(member.isStatic && member.isSetter)) {
-          _checkValuesDeclarationInEnum(member.name);
+          _checkValuesDeclarationInEnum2(member.name2);
         }
       }
     }
 
     if (enumName == 'values') {
-      _errorReporter.reportErrorForNode(
+      _errorReporter.reportErrorForToken(
         CompileTimeErrorCode.ENUM_WITH_NAME_VALUES,
-        node.name,
+        node.name2,
       );
     }
 
     for (var constant in node.constants) {
-      if (constant.name.name == enumName) {
-        _errorReporter.reportErrorForNode(
+      if (constant.name2.lexeme == enumName) {
+        _errorReporter.reportErrorForToken(
           CompileTimeErrorCode.ENUM_CONSTANT_SAME_NAME_AS_ENCLOSING,
-          constant.name,
+          constant.name2,
         );
       }
     }
@@ -141,7 +145,7 @@
             [
               enumElement.displayName,
               baseName,
-              inherited.enclosingElement2.displayName,
+              inherited.enclosingElement3.displayName,
             ],
           );
         }
@@ -168,7 +172,7 @@
             [
               enumElement.displayName,
               baseName,
-              inherited.enclosingElement2.displayName,
+              inherited.enclosingElement3.displayName,
             ],
           );
         }
@@ -186,17 +190,19 @@
     for (var member in node.members) {
       if (member is FieldDeclaration) {
         for (var field in member.fields.variables) {
-          var identifier = field.name;
+          var identifier = field.name2;
           _checkDuplicateIdentifier(
             member.isStatic ? staticGetters : instanceGetters,
             identifier,
+            element: field.declaredElement!,
             setterScope: member.isStatic ? staticSetters : instanceSetters,
           );
         }
       } else if (member is MethodDeclaration) {
         _checkDuplicateIdentifier(
           member.isStatic ? staticGetters : instanceGetters,
-          member.name,
+          member.name2,
+          element: member.declaredElement!,
           setterScope: member.isStatic ? staticSetters : instanceSetters,
         );
       }
@@ -207,11 +213,11 @@
       if (member is FieldDeclaration) {
         if (member.isStatic) {
           for (var field in member.fields.variables) {
-            var identifier = field.name;
-            var name = identifier.name;
+            var identifier = field.name2;
+            var name = identifier.lexeme;
             if (instanceGetters.containsKey(name) ||
                 instanceSetters.containsKey(name)) {
-              _errorReporter.reportErrorForNode(
+              _errorReporter.reportErrorForToken(
                 CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE,
                 identifier,
                 [name],
@@ -221,11 +227,11 @@
         }
       } else if (member is MethodDeclaration) {
         if (member.isStatic) {
-          var identifier = member.name;
-          var name = identifier.name;
+          var identifier = member.name2;
+          var name = identifier.lexeme;
           if (instanceGetters.containsKey(name) ||
               instanceSetters.containsKey(name)) {
-            _errorReporter.reportErrorForNode(
+            _errorReporter.reportErrorForToken(
               CompileTimeErrorCode.EXTENSION_CONFLICTING_STATIC_AND_INSTANCE,
               identifier,
               [name],
@@ -241,7 +247,8 @@
   void checkForVariables(VariableDeclarationList node) {
     Map<String, Element> definedNames = HashMap<String, Element>();
     for (VariableDeclaration variable in node.variables) {
-      _checkDuplicateIdentifier(definedNames, variable.name);
+      _checkDuplicateIdentifier(definedNames, variable.name2,
+          element: variable.declaredElement!);
     }
   }
 
@@ -253,11 +260,12 @@
   void checkParameters(FormalParameterList node) {
     Map<String, Element> definedNames = HashMap<String, Element>();
     for (FormalParameter parameter in node.parameters) {
-      var identifier = parameter.identifier;
+      var identifier = parameter.name;
       if (identifier != null) {
         // The identifier can be null if this is a parameter list for a generic
         // function type.
-        _checkDuplicateIdentifier(definedNames, identifier);
+        _checkDuplicateIdentifier(definedNames, identifier,
+            element: parameter.declaredElement!);
       }
     }
   }
@@ -268,11 +276,15 @@
     for (Statement statement in statements) {
       if (statement is VariableDeclarationStatement) {
         for (VariableDeclaration variable in statement.variables.variables) {
-          _checkDuplicateIdentifier(definedNames, variable.name);
+          _checkDuplicateIdentifier(definedNames, variable.name2,
+              element: variable.declaredElement!);
         }
       } else if (statement is FunctionDeclarationStatement) {
         _checkDuplicateIdentifier(
-            definedNames, statement.functionDeclaration.name);
+          definedNames,
+          statement.functionDeclaration.name2,
+          element: statement.functionDeclaration.declaredElement!,
+        );
       }
     }
   }
@@ -281,7 +293,8 @@
   void checkTypeParameters(TypeParameterList node) {
     Map<String, Element> definedNames = HashMap<String, Element>();
     for (TypeParameter parameter in node.typeParameters) {
-      _checkDuplicateIdentifier(definedNames, parameter.name);
+      _checkDuplicateIdentifier(definedNames, parameter.name2,
+          element: parameter.declaredElement!);
     }
   }
 
@@ -336,18 +349,18 @@
     }
     for (CompilationUnitMember member in node.declarations) {
       if (member is ExtensionDeclaration) {
-        var identifier = member.name;
+        var identifier = member.name2;
         if (identifier != null) {
           _checkDuplicateIdentifier(definedGetters, identifier,
-              setterScope: definedSetters);
+              element: member.declaredElement!, setterScope: definedSetters);
         }
       } else if (member is NamedCompilationUnitMember) {
-        _checkDuplicateIdentifier(definedGetters, member.name,
-            setterScope: definedSetters);
+        _checkDuplicateIdentifier(definedGetters, member.name2,
+            element: member.declaredElement!, setterScope: definedSetters);
       } else if (member is TopLevelVariableDeclaration) {
         for (VariableDeclaration variable in member.variables.variables) {
-          _checkDuplicateIdentifier(definedGetters, variable.name,
-              setterScope: definedSetters);
+          _checkDuplicateIdentifier(definedGetters, variable.name2,
+              element: variable.declaredElement!, setterScope: definedSetters);
         }
       }
     }
@@ -367,7 +380,7 @@
           // [member] is erroneous; do not count it as a possible duplicate.
           continue;
         }
-        var name = member.name?.name ?? '';
+        var name = member.name2?.lexeme ?? '';
         if (name == 'new') {
           name = '';
         }
@@ -383,17 +396,18 @@
         }
       } else if (member is FieldDeclaration) {
         for (VariableDeclaration field in member.fields.variables) {
-          SimpleIdentifier identifier = field.name;
           _checkDuplicateIdentifier(
             member.isStatic ? staticGetters : instanceGetters,
-            identifier,
+            field.name2,
+            element: field.declaredElement!,
             setterScope: member.isStatic ? staticSetters : instanceSetters,
           );
         }
       } else if (member is MethodDeclaration) {
         _checkDuplicateIdentifier(
           member.isStatic ? staticGetters : instanceGetters,
-          member.name,
+          member.name2,
+          element: member.declaredElement!,
           setterScope: member.isStatic ? staticSetters : instanceSetters,
         );
       }
@@ -412,12 +426,12 @@
       if (member is FieldDeclaration) {
         if (member.isStatic) {
           for (VariableDeclaration field in member.fields.variables) {
-            SimpleIdentifier identifier = field.name;
-            String name = identifier.name;
+            final identifier = field.name2;
+            String name = identifier.lexeme;
             if (instanceGetters.containsKey(name) ||
                 instanceSetters.containsKey(name)) {
               String className = element.displayName;
-              _errorReporter.reportErrorForNode(
+              _errorReporter.reportErrorForToken(
                   CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
                   identifier,
                   [className, name, className]);
@@ -426,12 +440,12 @@
         }
       } else if (member is MethodDeclaration) {
         if (member.isStatic) {
-          SimpleIdentifier identifier = member.name;
-          String name = identifier.name;
+          final identifier = member.name2;
+          String name = identifier.lexeme;
           if (instanceGetters.containsKey(name) ||
               instanceSetters.containsKey(name)) {
             String className = element.name;
-            _errorReporter.reportErrorForNode(
+            _errorReporter.reportErrorForToken(
                 CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE,
                 identifier,
                 [className, name, className]);
@@ -476,20 +490,19 @@
   /// in one of the scopes - [getterScope] or [setterScope], and produce an
   /// error if it is.
   void _checkDuplicateIdentifier(
-      Map<String, Element> getterScope, SimpleIdentifier identifier,
-      {Element? element, Map<String, Element>? setterScope}) {
+      Map<String, Element> getterScope, Token identifier,
+      {required Element element, Map<String, Element>? setterScope}) {
     if (identifier.isSynthetic) {
       return;
     }
-    element ??= identifier.staticElement!;
 
     // Fields define getters and setters, so check them separately.
     if (element is PropertyInducingElement) {
       _checkDuplicateIdentifier(getterScope, identifier,
-          element: element.getter, setterScope: setterScope);
+          element: element.getter!, setterScope: setterScope);
       if (!element.isConst && !element.isFinal) {
         _checkDuplicateIdentifier(getterScope, identifier,
-            element: element.setter, setterScope: setterScope);
+            element: element.setter!, setterScope: setterScope);
       }
       return;
     }
@@ -504,7 +517,7 @@
       return CompileTimeErrorCode.DUPLICATE_DEFINITION;
     }
 
-    var name = identifier.name;
+    var name = identifier.lexeme;
     if (element is MethodElement) {
       name = element.name;
     }
@@ -512,7 +525,7 @@
     var previous = getterScope[name];
     if (previous != null) {
       if (!_isGetterSetterPair(element, previous)) {
-        _errorReporter.reportErrorForNode(
+        _errorReporter.reportErrorForToken(
           getError(previous, element),
           identifier,
           [name],
@@ -526,7 +539,7 @@
       if (element is PropertyAccessorElement && element.isSetter) {
         previous = setterScope[name];
         if (previous != null) {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForToken(
             getError(previous, element),
             identifier,
             [name],
@@ -538,9 +551,18 @@
     }
   }
 
-  void _checkValuesDeclarationInEnum(SimpleIdentifier name) {
-    if (name.name == 'values') {
-      _errorReporter.reportErrorForNode(
+  void _checkValuesDeclarationInEnum(Token name) {
+    if (name.lexeme == 'values') {
+      _errorReporter.reportErrorForToken(
+        CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM,
+        name,
+      );
+    }
+  }
+
+  void _checkValuesDeclarationInEnum2(Token name) {
+    if (name.lexeme == 'values') {
+      _errorReporter.reportErrorForToken(
         CompileTimeErrorCode.VALUES_DECLARATION_IN_ENUM,
         name,
       );
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 469f0f5..ba54bdc 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -53,23 +53,23 @@
           var setterType = setter.parameters[0].type;
           if (!_match(getterType, setterType)) {
             Element errorElement;
-            if (getter.enclosingElement2 == classElement) {
+            if (getter.enclosingElement3 == classElement) {
               errorElement = getter;
-            } else if (setter.enclosingElement2 == classElement) {
+            } else if (setter.enclosingElement3 == classElement) {
               errorElement = setter;
             } else {
               errorElement = classElement;
             }
 
             var getterName = getter.displayName;
-            if (getter.enclosingElement2 != classElement) {
-              var getterClassName = getter.enclosingElement2.displayName;
+            if (getter.enclosingElement3 != classElement) {
+              var getterClassName = getter.enclosingElement3.displayName;
               getterName = '$getterClassName.$getterName';
             }
 
             var setterName = setter.displayName;
-            if (setter.enclosingElement2 != classElement) {
-              var setterClassName = setter.enclosingElement2.displayName;
+            if (setter.enclosingElement3 != classElement) {
+              var setterClassName = setter.enclosingElement3.displayName;
               setterName = '$setterClassName.$setterName';
             }
 
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index 81adecd..7574408 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -94,7 +94,7 @@
 
   void _recordIfExtensionMember(Element? element) {
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ExtensionElement) {
         _recordUsedExtension(enclosingElement);
       }
@@ -165,7 +165,7 @@
     if (_recordPrefixMap(identifier, element)) {
       return;
     }
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (enclosingElement is CompilationUnitElement) {
       _recordUsedElement(element);
     } else if (enclosingElement is ExtensionElement) {
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 89c04f9..4e9bd87 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -4,6 +4,8 @@
 
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/constant/value.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -19,9 +21,9 @@
 import 'package:analyzer/src/error/getter_setter_types_verifier.dart';
 import 'package:analyzer/src/task/inference_error.dart';
 
-class InheritanceOverrideVerifier {
-  static const _missingOverridesKey = 'missingOverrides';
+final _missingOverrides = Expando<List<ExecutableElement>>();
 
+class InheritanceOverrideVerifier {
   final TypeSystemImpl _typeSystem;
   final TypeProvider _typeProvider;
   final InheritanceManager3 _inheritance;
@@ -43,7 +45,8 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameNode: declaration.name,
+          classNameToken: declaration.name2,
+          classElement: declaration.declaredElement as AbstractClassElementImpl,
           implementsClause: declaration.implementsClause,
           members: declaration.members,
           superclass: declaration.extendsClause?.superclass,
@@ -57,7 +60,8 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameNode: declaration.name,
+          classNameToken: declaration.name2,
+          classElement: declaration.declaredElement as AbstractClassElementImpl,
           implementsClause: declaration.implementsClause,
           superclass: declaration.superclass,
           withClause: declaration.withClause,
@@ -70,7 +74,8 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameNode: declaration.name,
+          classNameToken: declaration.name2,
+          classElement: declaration.declaredElement as AbstractClassElementImpl,
           implementsClause: declaration.implementsClause,
           members: declaration.members,
           withClause: declaration.withClause,
@@ -83,7 +88,8 @@
           reporter: _reporter,
           featureSet: unit.featureSet,
           library: library,
-          classNameNode: declaration.name,
+          classNameToken: declaration.name2,
+          classElement: declaration.declaredElement as AbstractClassElementImpl,
           implementsClause: declaration.implementsClause,
           members: declaration.members,
           onClause: declaration.onClause,
@@ -103,7 +109,7 @@
   /// Returns [ExecutableElement] members that are in the interface of the
   /// given class, but don't have concrete implementations.
   static List<ExecutableElement> missingOverrides(ClassDeclaration node) {
-    return node.name.getProperty(_missingOverridesKey) ?? const [];
+    return _missingOverrides[node.name2] ?? const [];
   }
 }
 
@@ -118,7 +124,7 @@
   final Uri libraryUri;
   final AbstractClassElementImpl classElement;
 
-  final SimpleIdentifier classNameNode;
+  final Token classNameToken;
   final List<ClassMember> members;
   final ImplementsClause? implementsClause;
   final OnClause? onClause;
@@ -137,14 +143,14 @@
     required this.reporter,
     required this.featureSet,
     required this.library,
-    required this.classNameNode,
+    required this.classNameToken,
+    required this.classElement,
     this.implementsClause,
     this.members = const [],
     this.onClause,
     this.superclass,
     this.withClause,
-  })  : libraryUri = library.source.uri,
-        classElement = classNameNode.staticElement as AbstractClassElementImpl;
+  }) : libraryUri = library.source.uri;
 
   bool get _isNonNullableByDefault => typeSystem.isNonNullableByDefault;
 
@@ -158,9 +164,9 @@
     if (!classElement.isEnum &&
         !classElement.isAbstract &&
         implementsDartCoreEnum) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.CONCRETE_CLASS_HAS_ENUM_SUPERINTERFACE,
-        classNameNode,
+        classNameToken,
       );
       return true;
     }
@@ -174,7 +180,7 @@
 
     // Report conflicts between direct superinterfaces of the class.
     for (var conflict in interface.conflicts) {
-      _reportInconsistentInheritance(classNameNode, conflict);
+      _reportInconsistentInheritance(classNameToken, conflict);
     }
 
     if (classElement.supertype != null) {
@@ -206,13 +212,13 @@
         var fieldList = member.fields;
         for (var field in fieldList.variables) {
           var fieldElement = field.declaredElement as FieldElement;
-          _checkDeclaredMember(field.name, libraryUri, fieldElement.getter);
-          _checkDeclaredMember(field.name, libraryUri, fieldElement.setter);
+          _checkDeclaredMember(field.name2, libraryUri, fieldElement.getter);
+          _checkDeclaredMember(field.name2, libraryUri, fieldElement.setter);
           if (!member.isStatic && !classElement.isEnum) {
-            _checkIllegalEnumValuesDeclaration(field.name);
+            _checkIllegalEnumValuesDeclaration(field.name2);
           }
           if (!member.isStatic) {
-            _checkIllegalConcreteEnumMemberDeclaration(field.name);
+            _checkIllegalConcreteEnumMemberDeclaration(field.name2);
           }
         }
       } else if (member is MethodDeclaration) {
@@ -221,13 +227,13 @@
           continue;
         }
 
-        _checkDeclaredMember(member.name, libraryUri, member.declaredElement,
+        _checkDeclaredMember(member.name2, libraryUri, member.declaredElement,
             methodParameterNodes: member.parameters?.parameters);
         if (!(member.isStatic || member.isAbstract || member.isSetter)) {
-          _checkIllegalConcreteEnumMemberDeclaration(member.name);
+          _checkIllegalConcreteEnumMemberDeclaration(member.name2);
         }
         if (!member.isStatic && !classElement.isEnum) {
-          _checkIllegalEnumValuesDeclaration(member.name);
+          _checkIllegalEnumValuesDeclaration(member.name2);
         }
       }
     }
@@ -293,7 +299,7 @@
         ).verify(
           superMember: interfaceElement,
           errorReporter: reporter,
-          errorNode: classNameNode,
+          errorNode: classNameToken,
           errorCode: CompileTimeErrorCode.INVALID_IMPLEMENTATION_OVERRIDE,
         );
       }
@@ -308,7 +314,7 @@
   /// instance members in each of [directSuperInterfaces].  The [libraryUri] is
   /// the URI of the library containing the [member].
   void _checkDeclaredMember(
-    AstNode node,
+    SyntacticEntity node,
     Uri libraryUri,
     ExecutableElement? member, {
     List<FormalParameter>? methodParameterNodes,
@@ -542,7 +548,7 @@
                     .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
                 derivedOptionalNodes[i],
                 [
-                  baseExecutable.enclosingElement2.displayName,
+                  baseExecutable.enclosingElement3.displayName,
                   baseExecutable.displayName,
                   name
                 ],
@@ -571,7 +577,7 @@
                   .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
               derivedOptionalNodes[i],
               [
-                baseExecutable.enclosingElement2.displayName,
+                baseExecutable.enclosingElement3.displayName,
                 baseExecutable.displayName
               ],
             );
@@ -659,14 +665,14 @@
     return false;
   }
 
-  void _checkIllegalConcreteEnumMemberDeclaration(SimpleIdentifier name) {
+  void _checkIllegalConcreteEnumMemberDeclaration(Token name) {
     if (implementsDartCoreEnum &&
         !classElement.isDartCoreEnumImpl &&
-        const {'index', 'hashCode', '=='}.contains(name.name)) {
-      reporter.reportErrorForNode(
+        const {'index', 'hashCode', '=='}.contains(name.lexeme)) {
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_DECLARATION,
         name,
-        [name.name],
+        [name.lexeme],
       );
     }
   }
@@ -688,11 +694,11 @@
       ) {
         var member = concreteMap[Name(libraryUri, memberName)];
         if (member != null) {
-          var enclosingClass = member.enclosingElement2;
+          var enclosingClass = member.enclosingElement3;
           if (enclosingClass is ClassElement && filter(enclosingClass)) {
-            reporter.reportErrorForNode(
+            reporter.reportErrorForToken(
               CompileTimeErrorCode.ILLEGAL_CONCRETE_ENUM_MEMBER_INHERITANCE,
-              classNameNode,
+              classNameToken,
               [memberName, enclosingClass.name],
             );
           }
@@ -705,9 +711,9 @@
     }
   }
 
-  void _checkIllegalEnumValuesDeclaration(SimpleIdentifier name) {
-    if (implementsDartCoreEnum && name.name == 'values') {
-      reporter.reportErrorForNode(
+  void _checkIllegalEnumValuesDeclaration(Token name) {
+    if (implementsDartCoreEnum && name.lexeme == 'values') {
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_DECLARATION,
         name,
       );
@@ -726,10 +732,10 @@
       );
       var inherited = getter ?? setter;
       if (inherited != null) {
-        reporter.reportErrorForNode(
+        reporter.reportErrorForToken(
           CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE,
-          classNameNode,
-          [inherited.enclosingElement2.name!],
+          classNameToken,
+          [inherited.enclosingElement3.name!],
         );
       }
     }
@@ -780,7 +786,7 @@
 
     for (var member in members) {
       if (member is MethodDeclaration) {
-        var displayName = member.name.name;
+        var displayName = member.name2.lexeme;
         var name2 = displayName;
         if (member.isSetter) {
           name2 += '=';
@@ -788,10 +794,10 @@
         if (checkMemberNameCombo(member, name2, displayName)) return true;
       } else if (member is FieldDeclaration) {
         for (var variableDeclaration in member.fields.variables) {
-          var name2 = variableDeclaration.name.name;
-          if (checkMemberNameCombo(member, name2, name2)) return true;
+          var name = variableDeclaration.name2.lexeme;
+          if (checkMemberNameCombo(member, name, name)) return true;
           if (!variableDeclaration.isFinal) {
-            if (checkMemberNameCombo(member, '$name2=', name2)) return true;
+            if (checkMemberNameCombo(member, '$name=', name)) return true;
           }
         }
       }
@@ -799,35 +805,35 @@
     return false;
   }
 
-  void _reportInconsistentInheritance(AstNode node, Conflict conflict) {
+  void _reportInconsistentInheritance(Token token, Conflict conflict) {
     var name = conflict.name;
 
     if (conflict is GetterMethodConflict) {
       // Members that participate in inheritance are always enclosed in named
       // elements so it is safe to assume that
-      // `conflict.getter.enclosingElement2.name` and
-      // `conflict.method.enclosingElement2.name` are both non-`null`.
-      reporter.reportErrorForNode(
+      // `conflict.getter.enclosingElement3.name` and
+      // `conflict.method.enclosingElement3.name` are both non-`null`.
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.INCONSISTENT_INHERITANCE_GETTER_AND_METHOD,
-        node,
+        token,
         [
           name.name,
-          conflict.getter.enclosingElement2.name!,
-          conflict.method.enclosingElement2.name!
+          conflict.getter.enclosingElement3.name!,
+          conflict.method.enclosingElement3.name!
         ],
       );
     } else if (conflict is CandidatesConflict) {
       var candidatesStr = conflict.candidates.map((candidate) {
-        var className = candidate.enclosingElement2.name;
+        var className = candidate.enclosingElement3.name;
         var typeStr = candidate.type.getDisplayString(
           withNullability: _isNonNullableByDefault,
         );
         return '$className.${name.name} ($typeStr)';
       }).join(', ');
 
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.INCONSISTENT_INHERITANCE,
-        node,
+        token,
         [name.name, candidatesStr],
       );
     } else {
@@ -840,10 +846,7 @@
       return;
     }
 
-    classNameNode.setProperty(
-      InheritanceOverrideVerifier._missingOverridesKey,
-      elements,
-    );
+    _missingOverrides[classNameToken] = elements;
 
     var descriptions = <String>[];
     for (ExecutableElement element in elements) {
@@ -857,7 +860,7 @@
       }
 
       var elementName = element.displayName;
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       var enclosingName = enclosingElement.displayName;
       var description = "$prefix$enclosingName.$elementName";
 
@@ -866,34 +869,34 @@
     descriptions.sort();
 
     if (descriptions.length == 1) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
-        classNameNode,
+        classNameToken,
         [descriptions[0]],
       );
     } else if (descriptions.length == 2) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
-        classNameNode,
+        classNameToken,
         [descriptions[0], descriptions[1]],
       );
     } else if (descriptions.length == 3) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
-        classNameNode,
+        classNameToken,
         [descriptions[0], descriptions[1], descriptions[2]],
       );
     } else if (descriptions.length == 4) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
-        classNameNode,
+        classNameToken,
         [descriptions[0], descriptions[1], descriptions[2], descriptions[3]],
       );
     } else {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         CompileTimeErrorCode
             .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
-        classNameNode,
+        classNameToken,
         [
           descriptions[0],
           descriptions[1],
@@ -911,9 +914,9 @@
       var inferenceError = element.typeInferenceError;
       if (inferenceError?.kind ==
           TopLevelInferenceErrorKind.overrideNoCombinedSuperSignature) {
-        reporter.reportErrorForNode(
+        reporter.reportErrorForToken(
           CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE,
-          node.name,
+          node.name2,
           [
             classElement.name,
             inferenceError!.arguments[0],
@@ -985,21 +988,21 @@
     final namesForError = notOverriddenNames.toList();
 
     if (namesForError.length == 1) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         HintCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_ONE,
-        classNameNode,
+        classNameToken,
         namesForError,
       );
     } else if (namesForError.length == 2) {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         HintCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_TWO,
-        classNameNode,
+        classNameToken,
         namesForError,
       );
     } else {
-      reporter.reportErrorForNode(
+      reporter.reportErrorForToken(
         HintCode.MISSING_OVERRIDE_OF_MUST_BE_OVERRIDDEN_THREE_PLUS,
-        classNameNode,
+        classNameToken,
         [
           namesForError[0],
           namesForError[1],
diff --git a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
index 3ce9a09..a248430 100644
--- a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
+++ b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
@@ -28,17 +28,17 @@
 
     if (element is MethodElement && _hasConcreteSuperMethod(element)) {
       _verifySuperIsCalled(
-          node, overridden.name, overridden.enclosingElement2.name);
+          node, overridden.name, overridden.enclosingElement3.name);
       return;
     }
 
-    var enclosingElement = element.enclosingElement2 as ClassElement;
+    var enclosingElement = element.enclosingElement3 as ClassElement;
     if (element is PropertyAccessorElement && element.isGetter) {
       var inheritedConcreteGetter = enclosingElement
           .lookUpInheritedConcreteGetter(element.name, element.library);
       if (inheritedConcreteGetter != null) {
         _verifySuperIsCalled(
-            node, overridden.name, overridden.enclosingElement2.name);
+            node, overridden.name, overridden.enclosingElement3.name);
       }
       return;
     }
@@ -53,7 +53,7 @@
         if (name.endsWith('=')) {
           name = name.substring(0, name.length - 1);
         }
-        _verifySuperIsCalled(node, name, overridden.enclosingElement2.name);
+        _verifySuperIsCalled(node, name, overridden.enclosingElement3.name);
       }
     }
   }
@@ -69,10 +69,10 @@
   ExecutableElement? _findOverriddenMemberWithMustCallSuper(
       ExecutableElement element) {
     //Element member = node.declaredElement;
-    if (element.enclosingElement2 is! ClassElement) {
+    if (element.enclosingElement3 is! ClassElement) {
       return null;
     }
-    var classElement = element.enclosingElement2 as ClassElement;
+    var classElement = element.enclosingElement3 as ClassElement;
     String name = element.name;
 
     // Walk up the type hierarchy from [classElement], ignoring direct
@@ -109,7 +109,7 @@
 
   /// Returns whether [node] overrides a concrete method.
   bool _hasConcreteSuperMethod(ExecutableElement element) {
-    var classElement = element.enclosingElement2 as ClassElement;
+    var classElement = element.enclosingElement3 as ClassElement;
     String name = element.name;
 
     if (classElement.supertype.isConcrete(name)) {
@@ -133,8 +133,8 @@
     if (!declaredElement.invokesSuperSelf) {
       // Overridable elements are always enclosed in named elements, so it is
       // safe to assume [overriddenEnclosingName] is non-`null`.
-      _errorReporter.reportErrorForNode(
-          HintCode.MUST_CALL_SUPER, node.name, [overriddenEnclosingName!]);
+      _errorReporter.reportErrorForToken(
+          HintCode.MUST_CALL_SUPER, node.name2, [overriddenEnclosingName!]);
     }
     return;
   }
diff --git a/pkg/analyzer/lib/src/error/override_verifier.dart b/pkg/analyzer/lib/src/error/override_verifier.dart
index 5a87250..e3a6fcb 100644
--- a/pkg/analyzer/lib/src/error/override_verifier.dart
+++ b/pkg/analyzer/lib/src/error/override_verifier.dart
@@ -54,9 +54,9 @@
         var setter = fieldElement.setter;
         if (setter != null && _isOverride(setter)) continue;
 
-        _errorReporter.reportErrorForNode(
+        _errorReporter.reportErrorForToken(
           HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD,
-          field.name,
+          field.name2,
         );
       }
     }
@@ -67,20 +67,20 @@
     var element = node.declaredElement!;
     if (element.hasOverride && !_isOverride(element)) {
       if (element is MethodElement) {
-        _errorReporter.reportErrorForNode(
+        _errorReporter.reportErrorForToken(
           HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD,
-          node.name,
+          node.name2,
         );
       } else if (element is PropertyAccessorElement) {
         if (element.isGetter) {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForToken(
             HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER,
-            node.name,
+            node.name2,
           );
         } else {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForToken(
             HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER,
-            node.name,
+            node.name2,
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
index 03bd2ed..51cc6f1 100644
--- a/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/required_parameters_verifier.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -38,7 +39,7 @@
     _check(
       parameters: node.constructorElement?.parameters,
       arguments: node.arguments?.argumentList.arguments ?? <Expression>[],
-      errorNode: node.name,
+      errorNode: node.name2,
     );
   }
 
@@ -111,7 +112,7 @@
     required List<ParameterElement>? parameters,
     ConstructorElement? enclosingConstructor,
     required List<Expression> arguments,
-    required AstNode errorNode,
+    required SyntacticEntity errorNode,
   }) {
     if (parameters == null) {
       return;
@@ -122,9 +123,10 @@
         String parameterName = parameter.name;
         if (!_containsNamedExpression(
             enclosingConstructor, arguments, parameterName)) {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForOffset(
             CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT,
-            errorNode,
+            errorNode.offset,
+            errorNode.length,
             [parameterName],
           );
         }
@@ -137,15 +139,17 @@
               enclosingConstructor, arguments, parameterName)) {
             var reason = annotation.reason;
             if (reason != null) {
-              _errorReporter.reportErrorForNode(
+              _errorReporter.reportErrorForOffset(
                 HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS,
-                errorNode,
+                errorNode.offset,
+                errorNode.length,
                 [parameterName, reason],
               );
             } else {
-              _errorReporter.reportErrorForNode(
+              _errorReporter.reportErrorForOffset(
                 HintCode.MISSING_REQUIRED_PARAM,
-                errorNode,
+                errorNode.offset,
+                errorNode.length,
                 [parameterName],
               );
             }
diff --git a/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart b/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
index 309ead0..2fcbb0c 100644
--- a/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
+++ b/pkg/analyzer/lib/src/error/super_formal_parameters_verifier.dart
@@ -24,10 +24,10 @@
       } else {
         result.positionalArgumentCount++;
         if (hasExplicitPositionalArguments) {
-          errorReporter?.reportErrorForNode(
+          errorReporter?.reportErrorForToken(
             CompileTimeErrorCode
                 .POSITIONAL_SUPER_FORMAL_PARAMETER_WITH_POSITIONAL_ARGUMENT,
-            parameter.identifier,
+            parameter.name,
           );
         }
       }
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index c2c2f51..1386d07 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -97,7 +97,7 @@
       return;
     }
 
-    var enumElement = constructorElement.enclosingElement2;
+    var enumElement = constructorElement.enclosingElement3;
     var typeParameters = enumElement.typeParameters;
 
     var typeArgumentList = node.arguments?.typeArguments;
@@ -131,9 +131,11 @@
       bound = substitution.substituteType(bound);
 
       if (!_typeSystem.isSubtypeOf(typeArgument, bound)) {
-        _errorReporter.reportErrorForNode(
+        final errorTarget = typeArgumentNodes?[i] ?? node.name2;
+        _errorReporter.reportErrorForOffset(
           CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
-          typeArgumentNodes?[i] ?? node.name,
+          errorTarget.offset,
+          errorTarget.length,
           [typeArgument, typeParameter.name, bound],
         );
       }
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index 66a2b0f..22e7a62 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -257,7 +257,7 @@
           usedElements.addElement(parameter);
         }
       }
-      var enclosingElement = element?.enclosingElement2;
+      var enclosingElement = element?.enclosingElement3;
       if (element == null) {
         if (isIdentifierRead) {
           usedElements.unresolvedReadMembers.add(node.name);
@@ -457,6 +457,40 @@
       : _libraryUri = library.source.uri;
 
   @override
+  void visitClassDeclaration(ClassDeclaration node) {
+    final declaredElement = node.declaredElement as ClassElement;
+    _visitClassElement(declaredElement);
+
+    super.visitClassDeclaration(node);
+  }
+
+  @override
+  void visitConstructorDeclaration(ConstructorDeclaration node) {
+    if (node.name2 != null) {
+      final declaredElement = node.declaredElement as ConstructorElement;
+      _visitConstructorElement(declaredElement);
+    }
+
+    super.visitConstructorDeclaration(node);
+  }
+
+  @override
+  void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
+    final declaredElement = node.declaredElement as FieldElement;
+    _visitFieldElement(declaredElement);
+
+    super.visitEnumConstantDeclaration(node);
+  }
+
+  @override
+  void visitEnumDeclaration(EnumDeclaration node) {
+    final declaredElement = node.declaredElement as ClassElement;
+    _visitClassElement(declaredElement);
+
+    super.visitEnumDeclaration(node);
+  }
+
+  @override
   void visitFormalParameterList(FormalParameterList node) {
     for (var element in node.parameterElements) {
       if (!_isUsedElement(element!)) {
@@ -468,6 +502,54 @@
   }
 
   @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
+    final declaredElement = node.declaredElement;
+    if (declaredElement is FunctionElement) {
+      _visitFunctionElement(declaredElement);
+    } else if (declaredElement is PropertyAccessorElement) {
+      _visitPropertyAccessorElement(declaredElement);
+    }
+
+    super.visitFunctionDeclaration(node);
+  }
+
+  @override
+  void visitFunctionTypeAlias(FunctionTypeAlias node) {
+    final declaredElement = node.declaredElement as TypeAliasElement;
+    _visitTypeAliasElement(declaredElement);
+
+    super.visitFunctionTypeAlias(node);
+  }
+
+  @override
+  void visitGenericTypeAlias(GenericTypeAlias node) {
+    final declaredElement = node.declaredElement as TypeAliasElement;
+    _visitTypeAliasElement(declaredElement);
+
+    super.visitGenericTypeAlias(node);
+  }
+
+  @override
+  void visitMethodDeclaration(MethodDeclaration node) {
+    final declaredElement = node.declaredElement;
+    if (declaredElement is MethodElement) {
+      _visitMethodElement(declaredElement);
+    } else if (declaredElement is PropertyAccessorElement) {
+      _visitPropertyAccessorElement(declaredElement);
+    }
+
+    super.visitMethodDeclaration(node);
+  }
+
+  @override
+  void visitMixinDeclaration(MixinDeclaration node) {
+    final declaredElement = node.declaredElement as ClassElement;
+    _visitClassElement(declaredElement);
+
+    super.visitMixinDeclaration(node);
+  }
+
+  @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
     if (node.inDeclarationContext()) {
       var element = node.staticElement;
@@ -516,7 +598,7 @@
     if (element.isPrivate) {
       return false;
     }
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
 
     if (enclosingElement is ClassElement) {
       if (enclosingElement.isEnum) {
@@ -544,7 +626,7 @@
     bool elementIsStaticVariable =
         element is VariableElement && element.isStatic;
     if (element.isPublic) {
-      if (_isPrivateClassOrExtension(element.enclosingElement2!) &&
+      if (_isPrivateClassOrExtension(element.enclosingElement3!) &&
           elementIsStaticVariable) {
         // Public static fields of private classes, mixins, and extensions are
         // inaccessible from outside the library in which they are declared.
@@ -581,7 +663,7 @@
         element is FunctionElement && !element.isStatic) {
       // local variable or function
     } else if (element is ParameterElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       // Only report unused parameters of constructors, methods, and functions.
       if (enclosingElement is! ConstructorElement &&
           enclosingElement is! FunctionElement &&
@@ -593,7 +675,7 @@
         return true;
       }
       if (enclosingElement is ConstructorElement &&
-          enclosingElement.enclosingElement2.typeParameters.isNotEmpty) {
+          enclosingElement.enclosingElement3.typeParameters.isNotEmpty) {
         // There is an issue matching arguments of instance creation
         // expressions for generic classes with parameters, so for now,
         // consider every parameter of a constructor of a generic class
@@ -647,7 +729,7 @@
   }
 
   Iterable<ExecutableElement> _overriddenElements(Element element) {
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (enclosingElement is ClassElement) {
       Name name = Name(_libraryUri, element.name!);
       var overridden =
@@ -729,7 +811,7 @@
     // constructor in the class. A single unused, private constructor may serve
     // the purpose of preventing the class from being extended. In serving this
     // purpose, the constructor is "used."
-    if (element.enclosingElement2.constructors.length > 1 &&
+    if (element.enclosingElement3.constructors.length > 1 &&
         !_isUsedMember(element)) {
       _reportErrorForElement(
           HintCode.UNUSED_ELEMENT, element, [element.displayName]);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index ee1e932..4523131 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -194,15 +194,15 @@
     }
   }
 
-  SimpleIdentifier? get currentDeclarationName {
+  Token? get currentDeclarationName {
     if (classDeclaration != null) {
-      return classDeclaration!.name;
+      return classDeclaration!.name2;
     } else if (mixinDeclaration != null) {
-      return mixinDeclaration!.name;
+      return mixinDeclaration!.name2;
     } else if (extensionDeclaration != null) {
-      return extensionDeclaration!.name;
+      return extensionDeclaration!.name2;
     } else {
-      return enumDeclaration!.name;
+      return enumDeclaration!.name2;
     }
   }
 
@@ -276,16 +276,16 @@
         extensionDeclaration == null);
     debugEvent("ExtensionHeader");
 
-    var typeParameters = pop() as TypeParameterList?;
+    var typeParameters = pop() as TypeParameterListImpl?;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, extensionKeyword);
 
-    SimpleIdentifier? name;
+    SimpleIdentifierImpl? name;
     if (nameToken != null) {
       name = ast.simpleIdentifier(nameToken, isDeclaration: true);
     }
 
-    extensionDeclaration = ast.extensionDeclaration(
+    extensionDeclaration = ExtensionDeclarationImpl(
       comment: comment,
       metadata: metadata,
       extensionKeyword: extensionKeyword,
@@ -371,7 +371,7 @@
     }
     if (staticToken != null) {
       assert(staticToken.isModifier);
-      String? className = currentDeclarationName?.name;
+      String? className = currentDeclarationName?.lexeme;
       if (name.lexeme != className || getOrSet != null) {
         modifiers.staticKeyword = staticToken;
       }
@@ -425,11 +425,17 @@
   @override
   void beginTypeVariable(Token token) {
     debugEvent("beginTypeVariable");
-    var name = pop() as SimpleIdentifier;
+    var name = pop() as SimpleIdentifierImpl;
     var metadata = pop() as List<Annotation>?;
 
     var comment = _findComment(metadata, name.beginToken);
-    var typeParameter = ast.typeParameter(comment, metadata, name, null, null);
+    var typeParameter = TypeParameterImpl(
+      comment: comment,
+      metadata: metadata,
+      name: name,
+      extendsKeyword: null,
+      bound: null,
+    );
     push(typeParameter);
   }
 
@@ -824,7 +830,7 @@
     var bodyObject = pop();
     var initializers = (pop() as List<ConstructorInitializer>?) ?? const [];
     var separator = pop() as Token?;
-    var parameters = pop() as FormalParameterList;
+    var parameters = pop() as FormalParameterListImpl;
     var typeParameters = pop() as TypeParameterList?;
     var name = pop();
     pop(); // return type
@@ -832,9 +838,9 @@
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
 
-    ConstructorName? redirectedConstructor;
-    FunctionBody body;
-    if (bodyObject is FunctionBody) {
+    ConstructorNameImpl? redirectedConstructor;
+    FunctionBodyImpl body;
+    if (bodyObject is FunctionBodyImpl) {
       body = bodyObject;
     } else if (bodyObject is _RedirectingFactoryBody) {
       separator = bodyObject.equalToken;
@@ -850,10 +856,10 @@
 
     SimpleIdentifier prefixOrName;
     Token? period;
-    SimpleIdentifier? nameOrNull;
-    if (name is SimpleIdentifier) {
+    SimpleIdentifierImpl? nameOrNull;
+    if (name is SimpleIdentifierImpl) {
       prefixOrName = name;
-    } else if (name is PrefixedIdentifier) {
+    } else if (name is PrefixedIdentifierImpl) {
       prefixOrName = name.prefix;
       period = name.period;
       nameOrNull = name.identifier;
@@ -877,21 +883,21 @@
       handleRecoverableError(
           messageConstConstructorWithBody, bodyToken, bodyToken);
     }
-    ConstructorDeclaration constructor = ast.constructorDeclaration(
-        comment,
-        metadata,
-        modifiers?.externalKeyword,
-        modifiers?.finalConstOrVarKeyword,
-        null,
-        // TODO(paulberry): factoryKeyword
-        ast.simpleIdentifier(prefixOrName.token),
-        period,
-        nameOrNull,
-        parameters,
-        separator,
-        initializers,
-        redirectedConstructor,
-        body);
+    ConstructorDeclaration constructor = ConstructorDeclarationImpl(
+      comment: comment,
+      metadata: metadata,
+      externalKeyword: modifiers?.externalKeyword,
+      constKeyword: modifiers?.finalConstOrVarKeyword,
+      factoryKeyword: null,
+      returnType: ast.simpleIdentifier(prefixOrName.token),
+      period: period,
+      name: nameOrNull,
+      parameters: parameters,
+      separator: separator,
+      initializers: initializers,
+      redirectedConstructor: redirectedConstructor,
+      body: body,
+    );
     currentDeclarationMembers.add(constructor);
     if (mixinDeclaration != null) {
       // TODO (danrubel): Report an error if this is a mixin declaration.
@@ -911,11 +917,11 @@
     assert(optional(';', endToken) || optional('}', endToken));
     debugEvent("ClassFactoryMethod");
 
-    FunctionBody body;
+    FunctionBodyImpl body;
     Token? separator;
-    ConstructorName? redirectedConstructor;
+    ConstructorNameImpl? redirectedConstructor;
     var bodyObject = pop();
-    if (bodyObject is FunctionBody) {
+    if (bodyObject is FunctionBodyImpl) {
       body = bodyObject;
     } else if (bodyObject is _RedirectingFactoryBody) {
       separator = bodyObject.equalToken;
@@ -929,7 +935,7 @@
           uri);
     }
 
-    var parameters = pop() as FormalParameterList;
+    var parameters = pop() as FormalParameterListImpl;
     var typeParameters = pop() as TypeParameterList?;
     var constructorName = pop() as Identifier;
     var modifiers = pop() as _Modifiers?;
@@ -946,7 +952,7 @@
     // the actual constructor name.
     SimpleIdentifier returnType;
     Token? period;
-    SimpleIdentifier? name;
+    SimpleIdentifierImpl? name;
     Identifier typeName = constructorName;
     if (typeName is SimpleIdentifier) {
       returnType = typeName;
@@ -959,20 +965,23 @@
       throw UnimplementedError();
     }
 
-    currentDeclarationMembers.add(ast.constructorDeclaration(
-        comment,
-        metadata,
-        modifiers?.externalKeyword,
-        modifiers?.finalConstOrVarKeyword,
-        factoryKeyword,
-        ast.simpleIdentifier(returnType.token),
-        period,
-        name,
-        parameters,
-        separator,
-        null,
-        redirectedConstructor,
-        body));
+    currentDeclarationMembers.add(
+      ConstructorDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        externalKeyword: modifiers?.externalKeyword,
+        constKeyword: modifiers?.finalConstOrVarKeyword,
+        factoryKeyword: factoryKeyword,
+        returnType: ast.simpleIdentifier(returnType.token),
+        period: period,
+        name: name,
+        parameters: parameters,
+        separator: separator,
+        initializers: null,
+        redirectedConstructor: redirectedConstructor,
+        body: body,
+      ),
+    );
   }
 
   @override
@@ -1016,8 +1025,10 @@
     }
 
     var variables = popTypedList2<VariableDeclaration>(count);
-    var type = pop() as TypeAnnotation?;
-    var variableList = ast.variableDeclarationList2(
+    var type = pop() as TypeAnnotationImpl?;
+    var variableList = VariableDeclarationListImpl(
+      comment: null,
+      metadata: null,
       lateKeyword: lateToken,
       keyword: varFinalOrConst,
       type: type,
@@ -1026,7 +1037,8 @@
     var covariantKeyword = covariantToken;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
-    currentDeclarationMembers.add(ast.fieldDeclaration2(
+    currentDeclarationMembers.add(
+      FieldDeclarationImpl(
         comment: comment,
         metadata: metadata,
         abstractKeyword: abstractToken,
@@ -1035,7 +1047,9 @@
         externalKeyword: externalToken,
         staticKeyword: staticToken,
         fieldList: variableList,
-        semicolon: semicolon));
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -1049,18 +1063,18 @@
     var bodyObject = pop();
     pop(); // initializers
     pop(); // separator
-    var parameters = pop() as FormalParameterList?;
-    var typeParameters = pop() as TypeParameterList?;
+    var parameters = pop() as FormalParameterListImpl?;
+    var typeParameters = pop() as TypeParameterListImpl?;
     var name = pop();
-    var returnType = pop() as TypeAnnotation?;
+    var returnType = pop() as TypeAnnotationImpl?;
     var modifiers = pop() as _Modifiers?;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
 
     assert(parameters != null || optional('get', getOrSet!));
 
-    FunctionBody body;
-    if (bodyObject is FunctionBody) {
+    FunctionBodyImpl body;
+    if (bodyObject is FunctionBodyImpl) {
       body = bodyObject;
     } else if (bodyObject is _RedirectingFactoryBody) {
       body = ast.emptyFunctionBody(endToken);
@@ -1073,8 +1087,8 @@
     }
 
     Token? operatorKeyword;
-    SimpleIdentifier nameId;
-    if (name is SimpleIdentifier) {
+    SimpleIdentifierImpl nameId;
+    if (name is SimpleIdentifierImpl) {
       nameId = name;
     } else if (name is _OperatorName) {
       operatorKeyword = name.operatorKeyword;
@@ -1089,18 +1103,21 @@
     }
 
     checkFieldFormalParameters(parameters);
-    currentDeclarationMembers.add(ast.methodDeclaration(
-        comment,
-        metadata,
-        modifiers?.externalKeyword,
-        modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
-        returnType,
-        getOrSet,
-        operatorKeyword,
-        nameId,
-        typeParameters,
-        parameters,
-        body));
+    currentDeclarationMembers.add(
+      MethodDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        externalKeyword: modifiers?.externalKeyword,
+        modifierKeyword: modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
+        returnType: returnType,
+        propertyKeyword: getOrSet,
+        operatorKeyword: operatorKeyword,
+        name: nameId,
+        typeParameters: typeParameters,
+        parameters: parameters,
+        body: body,
+      ),
+    );
   }
 
   @override
@@ -1284,11 +1301,20 @@
 
     var combinators = pop() as List<Combinator>?;
     var configurations = pop() as List<Configuration>?;
-    var uri = pop() as StringLiteral;
+    var uri = pop() as StringLiteralImpl;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, exportKeyword);
-    directives.add(ast.exportDirective(comment, metadata, exportKeyword, uri,
-        configurations, combinators, semicolon));
+    directives.add(
+      ExportDirectiveImpl(
+        comment: comment,
+        metadata: metadata,
+        exportKeyword: exportKeyword,
+        uri: uri,
+        configurations: configurations,
+        combinators: combinators,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -1350,14 +1376,14 @@
     debugEvent("ExtensionFactoryMethod");
 
     var bodyObject = pop();
-    var parameters = pop() as FormalParameterList;
-    var typeParameters = pop() as TypeParameterList?;
+    var parameters = pop() as FormalParameterListImpl;
+    var typeParameters = pop() as TypeParameterListImpl?;
     var constructorName = pop();
     var modifiers = pop() as _Modifiers?;
     var metadata = pop() as List<Annotation>?;
 
-    FunctionBody body;
-    if (bodyObject is FunctionBody) {
+    FunctionBodyImpl body;
+    if (bodyObject is FunctionBodyImpl) {
       body = bodyObject;
     } else if (bodyObject is _RedirectingFactoryBody) {
       body = ast.emptyFunctionBody(endToken);
@@ -1373,10 +1399,10 @@
     // has already reported an error at this point, but we include them in as
     // a method declaration in order to get navigation, search, etc.
 
-    SimpleIdentifier methodName;
-    if (constructorName is SimpleIdentifier) {
+    SimpleIdentifierImpl methodName;
+    if (constructorName is SimpleIdentifierImpl) {
       methodName = constructorName;
-    } else if (constructorName is PrefixedIdentifier) {
+    } else if (constructorName is PrefixedIdentifierImpl) {
       methodName = constructorName.identifier;
     } else {
       // Unsure what the method name should be in this situation.
@@ -1384,18 +1410,21 @@
       // don't bother adding this declaration to the AST.
       return;
     }
-    currentDeclarationMembers.add(ast.methodDeclaration(
-        comment,
-        metadata,
-        modifiers?.externalKeyword,
-        modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
-        null, // returnType
-        null, // getOrSet
-        null, // operatorKeyword
-        methodName,
-        typeParameters,
-        parameters,
-        body));
+    currentDeclarationMembers.add(
+      MethodDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        externalKeyword: modifiers?.externalKeyword,
+        modifierKeyword: modifiers?.abstractKeyword ?? modifiers?.staticKeyword,
+        returnType: null,
+        propertyKeyword: null,
+        operatorKeyword: null,
+        name: methodName,
+        typeParameters: typeParameters,
+        parameters: parameters,
+        body: body,
+      ),
+    );
   }
 
   @override
@@ -1442,9 +1471,15 @@
     assert(optional('=', assignment));
     debugEvent("FieldInitializer");
 
-    var initializer = pop() as Expression;
-    var name = pop() as SimpleIdentifier;
-    push(_makeVariableDeclaration(name, assignment, initializer));
+    var initializer = pop() as ExpressionImpl;
+    var name = pop() as SimpleIdentifierImpl;
+    push(
+      _makeVariableDeclaration(
+        name: name,
+        equals: assignment,
+        initializer: initializer,
+      ),
+    );
   }
 
   @override
@@ -1822,7 +1857,7 @@
     var combinators = pop() as List<Combinator>?;
     var deferredKeyword = pop(NullValue.Deferred) as Token?;
     var asKeyword = pop(NullValue.As) as Token?;
-    var prefix = pop(NullValue.Prefix) as SimpleIdentifier?;
+    var prefix = pop(NullValue.Prefix) as SimpleIdentifierImpl?;
     var configurations = pop() as List<Configuration>?;
     var uri = pop() as StringLiteralImpl;
     var metadata = pop() as List<Annotation>?;
@@ -1852,17 +1887,17 @@
       );
     } else {
       directives.add(
-        ast.importDirective(
-          comment,
-          metadata,
-          importKeyword,
-          uri,
-          configurations,
-          deferredKeyword,
-          asKeyword,
-          prefix,
-          combinators,
-          semicolon ?? Tokens.semicolon(),
+        ImportDirectiveImpl(
+          comment: comment,
+          metadata: metadata,
+          importKeyword: importKeyword,
+          uri: uri,
+          configurations: configurations,
+          deferredKeyword: deferredKeyword,
+          asKeyword: asKeyword,
+          prefix: prefix,
+          combinators: combinators,
+          semicolon: semicolon ?? Tokens.semicolon(),
         ),
       );
     }
@@ -1880,8 +1915,12 @@
     // reached, node would always be a VariableDeclaration.
     if (node is VariableDeclaration) {
       variable = node;
-    } else if (node is SimpleIdentifier) {
-      variable = _makeVariableDeclaration(node, null, null);
+    } else if (node is SimpleIdentifierImpl) {
+      variable = _makeVariableDeclaration(
+        name: node,
+        equals: null,
+        initializer: null,
+      );
     } else {
       internalProblem(
           templateInternalProblemUnhandled.withArguments(
@@ -1974,8 +2013,15 @@
     var name = ast.libraryIdentifier(libraryName);
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, libraryKeyword);
-    directives.add(ast.libraryDirective(
-        comment, metadata, libraryKeyword, name, semicolon));
+    directives.add(
+      LibraryDirectiveImpl(
+        comment: comment,
+        metadata: metadata,
+        libraryKeyword: libraryKeyword,
+        name: name,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -2036,14 +2082,22 @@
     }
     var parameters = pop() as FormalParameterList;
     checkFieldFormalParameters(parameters);
-    var name = pop() as SimpleIdentifier;
-    var returnType = pop() as TypeAnnotation?;
+    var name = pop() as SimpleIdentifierImpl;
+    var returnType = pop() as TypeAnnotationImpl?;
     var typeParameters = pop() as TypeParameterList?;
     var metadata = pop(NullValue.Metadata) as List<Annotation>?;
-    FunctionExpression functionExpression =
+    final functionExpression =
         ast.functionExpression(typeParameters, parameters, body);
-    var functionDeclaration = ast.functionDeclaration(
-        null, metadata, null, null, returnType, null, name, functionExpression);
+    var functionDeclaration = FunctionDeclarationImpl(
+      comment: null,
+      metadata: metadata,
+      augmentKeyword: null,
+      externalKeyword: null,
+      returnType: returnType,
+      propertyKeyword: null,
+      name: name,
+      functionExpression: functionExpression,
+    );
     push(ast.functionDeclarationStatement(functionDeclaration));
   }
 
@@ -2168,35 +2222,38 @@
     assert(optional(';', semicolon));
     debugEvent("NamedMixinApplication");
 
-    ImplementsClause? implementsClause;
+    ImplementsClauseImpl? implementsClause;
     if (implementsKeyword != null) {
       var interfaces = pop() as List<NamedType>;
       implementsClause = ast.implementsClause(implementsKeyword, interfaces);
     }
-    var withClause = pop(NullValue.WithClause) as WithClause;
-    var superclass = pop() as NamedType;
+    var withClause = pop(NullValue.WithClause) as WithClauseImpl;
+    var superclass = pop() as NamedTypeImpl;
     var augmentKeyword = pop(NullValue.Token) as Token?;
     var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
-    var typeParameters = pop() as TypeParameterList?;
-    var name = pop() as SimpleIdentifier;
+    var typeParameters = pop() as TypeParameterListImpl?;
+    var name = pop() as SimpleIdentifierImpl;
     var abstractKeyword = modifiers?.abstractKeyword;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
-    declarations.add(ast.classTypeAlias(
-        comment,
-        metadata,
-        classKeyword,
-        name,
-        typeParameters,
-        equalsToken,
-        abstractKeyword,
-        macroKeyword,
-        augmentKeyword,
-        superclass,
-        withClause,
-        implementsClause,
-        semicolon));
+    declarations.add(
+      ClassTypeAliasImpl(
+        comment: comment,
+        metadata: metadata,
+        typedefKeyword: classKeyword,
+        name: name,
+        typeParameters: typeParameters,
+        equals: equalsToken,
+        abstractKeyword: abstractKeyword,
+        macroKeyword: macroKeyword,
+        augmentKeyword: augmentKeyword,
+        superclass: superclass,
+        withClause: withClause,
+        implementsClause: implementsClause,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -2224,11 +2281,18 @@
     assert(optional(';', semicolon));
     debugEvent("Part");
 
-    var uri = pop() as StringLiteral;
+    var uri = pop() as StringLiteralImpl;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, partKeyword);
-    directives
-        .add(ast.partDirective(comment, metadata, partKeyword, uri, semicolon));
+    directives.add(
+      PartDirectiveImpl(
+        comment: comment,
+        metadata: metadata,
+        partKeyword: partKeyword,
+        uri: uri,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -2239,17 +2303,26 @@
     assert(optional(';', semicolon));
     debugEvent("PartOf");
     var libraryNameOrUri = pop();
-    LibraryIdentifier? name;
-    StringLiteral? uri;
-    if (libraryNameOrUri is StringLiteral) {
+    LibraryIdentifierImpl? name;
+    StringLiteralImpl? uri;
+    if (libraryNameOrUri is StringLiteralImpl) {
       uri = libraryNameOrUri;
     } else {
       name = ast.libraryIdentifier(libraryNameOrUri as List<SimpleIdentifier>);
     }
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, partKeyword);
-    directives.add(ast.partOfDirective(
-        comment, metadata, partKeyword, ofKeyword, uri, name, semicolon));
+    directives.add(
+      PartOfDirectiveImpl(
+        comment: comment,
+        metadata: metadata,
+        partKeyword: partKeyword,
+        ofKeyword: ofKeyword,
+        uri: uri,
+        libraryName: name,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -2257,7 +2330,7 @@
     assert(optional('=', equalToken));
     debugEvent("RedirectingFactoryBody");
 
-    var constructorName = pop() as ConstructorName;
+    var constructorName = pop() as ConstructorNameImpl;
     var starToken = pop() as Token?;
     var asyncToken = pop() as Token?;
     push(_RedirectingFactoryBody(
@@ -2428,8 +2501,10 @@
     }
 
     var variables = popTypedList2<VariableDeclaration>(count);
-    var type = pop() as TypeAnnotation?;
-    var variableList = ast.variableDeclarationList2(
+    var type = pop() as TypeAnnotationImpl?;
+    var variableList = VariableDeclarationListImpl(
+      comment: null,
+      metadata: null,
       lateKeyword: lateToken,
       keyword: varFinalOrConst,
       type: type,
@@ -2437,9 +2512,15 @@
     );
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
-    declarations.add(ast.topLevelVariableDeclaration(
-        comment, metadata, variableList, semicolon,
-        externalKeyword: externalToken));
+    declarations.add(
+      TopLevelVariableDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        externalKeyword: externalToken,
+        variableList: variableList,
+        semicolon: semicolon,
+      ),
+    );
   }
 
   @override
@@ -2454,22 +2535,26 @@
     var body = pop() as FunctionBody;
     var parameters = pop() as FormalParameterList?;
     var typeParameters = pop() as TypeParameterList?;
-    var name = pop() as SimpleIdentifier;
-    var returnType = pop() as TypeAnnotation?;
+    var name = pop() as SimpleIdentifierImpl;
+    var returnType = pop() as TypeAnnotationImpl?;
     var modifiers = pop() as _Modifiers?;
     var augmentKeyword = modifiers?.augmentKeyword;
     var externalKeyword = modifiers?.externalKeyword;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, beginToken);
-    declarations.add(ast.functionDeclaration(
-        comment,
-        metadata,
-        augmentKeyword,
-        externalKeyword,
-        returnType,
-        getOrSet,
-        name,
-        ast.functionExpression(typeParameters, parameters, body)));
+    declarations.add(
+      FunctionDeclarationImpl(
+        comment: comment,
+        metadata: metadata,
+        augmentKeyword: augmentKeyword,
+        externalKeyword: externalKeyword,
+        returnType: returnType,
+        propertyKeyword: getOrSet,
+        name: name,
+        functionExpression:
+            ast.functionExpression(typeParameters, parameters, body),
+      ),
+    );
   }
 
   @override
@@ -2504,18 +2589,28 @@
     debugEvent("FunctionTypeAlias");
 
     if (equals == null) {
-      var parameters = pop() as FormalParameterList;
-      var typeParameters = pop() as TypeParameterList?;
-      var name = pop() as SimpleIdentifier;
-      var returnType = pop() as TypeAnnotation?;
+      var parameters = pop() as FormalParameterListImpl;
+      var typeParameters = pop() as TypeParameterListImpl?;
+      var name = pop() as SimpleIdentifierImpl;
+      var returnType = pop() as TypeAnnotationImpl?;
       var metadata = pop() as List<Annotation>?;
       var comment = _findComment(metadata, typedefKeyword);
-      declarations.add(ast.functionTypeAlias(comment, metadata, typedefKeyword,
-          returnType, name, typeParameters, parameters, semicolon));
+      declarations.add(
+        FunctionTypeAliasImpl(
+          comment: comment,
+          metadata: metadata,
+          typedefKeyword: typedefKeyword,
+          returnType: returnType,
+          name: name,
+          typeParameters: typeParameters,
+          parameters: parameters,
+          semicolon: semicolon,
+        ),
+      );
     } else {
-      var type = pop() as TypeAnnotation;
-      var templateParameters = pop() as TypeParameterList?;
-      var name = pop() as SimpleIdentifier;
+      var type = pop() as TypeAnnotationImpl;
+      var templateParameters = pop() as TypeParameterListImpl?;
+      var name = pop() as SimpleIdentifierImpl;
       var metadata = pop() as List<Annotation>?;
       var comment = _findComment(metadata, typedefKeyword);
       if (type is! GenericFunctionType && !enableNonFunctionTypeAliases) {
@@ -2524,8 +2619,18 @@
           startToken: equals,
         );
       }
-      declarations.add(ast.genericTypeAlias(comment, metadata, typedefKeyword,
-          name, templateParameters, equals, type, semicolon));
+      declarations.add(
+        GenericTypeAliasImpl(
+          comment: comment,
+          metadata: metadata,
+          typedefKeyword: typedefKeyword,
+          name: name,
+          typeParameters: templateParameters,
+          equals: equals,
+          type: type,
+          semicolon: semicolon,
+        ),
+      );
     }
   }
 
@@ -2580,10 +2685,16 @@
     assert(optionalOrNull('=', assignmentOperator));
     debugEvent("VariableInitializer");
 
-    var initializer = pop() as Expression;
-    var identifier = pop() as SimpleIdentifier;
+    var initializer = pop() as ExpressionImpl;
+    var identifier = pop() as SimpleIdentifierImpl;
     // TODO(ahe): Don't push initializers, instead install them.
-    push(_makeVariableDeclaration(identifier, assignmentOperator, initializer));
+    push(
+      _makeVariableDeclaration(
+        name: identifier,
+        equals: assignmentOperator,
+        initializer: initializer,
+      ),
+    );
   }
 
   @override
@@ -2593,14 +2704,15 @@
 
     var variables = popTypedList2<VariableDeclaration>(count);
     var modifiers = pop(NullValue.Modifiers) as _Modifiers?;
-    var type = pop() as TypeAnnotation?;
+    var type = pop() as TypeAnnotationImpl?;
     var keyword = modifiers?.finalConstOrVarKeyword;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, variables[0].beginToken);
     // var comment = _findComment(metadata,
     //     variables[0].beginToken ?? type?.beginToken ?? modifiers.beginToken);
-    push(ast.variableDeclarationStatement(
-        ast.variableDeclarationList2(
+    push(
+      ast.variableDeclarationStatement(
+        VariableDeclarationListImpl(
           comment: comment,
           metadata: metadata,
           lateKeyword: modifiers?.lateToken,
@@ -2608,7 +2720,9 @@
           type: type,
           variables: variables,
         ),
-        semicolon ?? Tokens.semicolon()));
+        semicolon ?? Tokens.semicolon(),
+      ),
+    );
   }
 
   @override
@@ -2739,9 +2853,11 @@
     if (catchParameterList != null) {
       List<FormalParameter> catchParameters = catchParameterList.parameters;
       if (catchParameters.isNotEmpty) {
+        // ignore: deprecated_member_use_from_same_package
         exception = catchParameters[0].identifier;
       }
       if (catchParameters.length > 1) {
+        // ignore: deprecated_member_use_from_same_package
         stackTrace = catchParameters[1].identifier;
       }
     }
@@ -2798,34 +2914,35 @@
     if (nativeToken != null) {
       nativeClause = ast.nativeClause(nativeToken, nativeName);
     }
-    var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
-    var withClause = pop(NullValue.WithClause) as WithClause?;
-    var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClause?;
+    var implementsClause =
+        pop(NullValue.IdentifierList) as ImplementsClauseImpl?;
+    var withClause = pop(NullValue.WithClause) as WithClauseImpl?;
+    var extendsClause = pop(NullValue.ExtendsClause) as ExtendsClauseImpl?;
     var augmentKeyword = pop(NullValue.Token) as Token?;
     var macroKeyword = pop(NullValue.Token) as Token?;
     var modifiers = pop() as _Modifiers?;
-    var typeParameters = pop() as TypeParameterList?;
-    var name = pop() as SimpleIdentifier;
+    var typeParameters = pop() as TypeParameterListImpl?;
+    var name = pop() as SimpleIdentifierImpl;
     var abstractKeyword = modifiers?.abstractKeyword;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, begin);
     // leftBracket, members, and rightBracket
     // are set in [endClassOrMixinBody].
-    classDeclaration = ast.classDeclaration(
-      comment,
-      metadata,
-      abstractKeyword,
-      macroKeyword,
-      augmentKeyword,
-      classKeyword,
-      name,
-      typeParameters,
-      extendsClause,
-      withClause,
-      implementsClause,
-      Tokens.openCurlyBracket(), // leftBracket
-      <ClassMember>[],
-      Tokens.closeCurlyBracket(), // rightBracket
+    classDeclaration = ClassDeclarationImpl(
+      comment: comment,
+      metadata: metadata,
+      abstractKeyword: abstractKeyword,
+      macroKeyword: macroKeyword,
+      augmentKeyword: augmentKeyword,
+      classKeyword: classKeyword,
+      name: name,
+      typeParameters: typeParameters,
+      extendsClause: extendsClause,
+      withClause: withClause,
+      implementsClause: implementsClause,
+      leftBracket: Tokens.openCurlyBracket(),
+      members: <ClassMember>[],
+      rightBracket: Tokens.closeCurlyBracket(),
     );
 
     classDeclaration!.nativeClause = nativeClause;
@@ -2965,8 +3082,9 @@
     // Replace the constant to include arguments.
     if (argumentList != null) {
       constant = EnumConstantDeclarationImpl(
-        documentationComment: constant.documentationComment,
+        comment: constant.documentationComment,
         metadata: constant.metadata,
+        // ignore: deprecated_member_use_from_same_package
         name: constant.name,
         arguments: EnumConstantArgumentsImpl(
           typeArguments: typeArguments,
@@ -3004,10 +3122,11 @@
     assert(optional('{', leftBrace));
     debugEvent("EnumHeader");
 
-    var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
-    var withClause = pop(NullValue.WithClause) as WithClause?;
-    var typeParameters = pop() as TypeParameterList?;
-    var name = pop() as SimpleIdentifier;
+    var implementsClause =
+        pop(NullValue.IdentifierList) as ImplementsClauseImpl?;
+    var withClause = pop(NullValue.WithClause) as WithClauseImpl?;
+    var typeParameters = pop() as TypeParameterListImpl?;
+    var name = pop() as SimpleIdentifierImpl;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, enumKeyword);
 
@@ -3027,7 +3146,7 @@
     }
 
     declarations.add(
-      enumDeclaration = ast.enumDeclaration2(
+      enumDeclaration = EnumDeclarationImpl(
         comment: comment,
         metadata: metadata,
         enumKeyword: enumKeyword,
@@ -3167,12 +3286,14 @@
     if (variableOrDeclaration is VariableDeclarationStatement) {
       VariableDeclarationList variableList = variableOrDeclaration.variables;
       forLoopParts = ast.forEachPartsWithDeclaration(
-        loopVariable: ast.declaredIdentifier(
-            variableList.documentationComment,
-            variableList.metadata,
-            variableList.keyword,
-            variableList.type,
-            variableList.variables.first.name),
+        loopVariable: DeclaredIdentifierImpl(
+          comment: variableList.documentationComment as CommentImpl?,
+          metadata: variableList.metadata,
+          keyword: variableList.keyword,
+          type: variableList.type as TypeAnnotationImpl?,
+          // ignore: deprecated_member_use_from_same_package
+          identifier: variableList.variables.first.name as SimpleIdentifierImpl,
+        ),
         inKeyword: inKeyword,
         iterable: iterator,
       );
@@ -3259,7 +3380,7 @@
       return;
     }
 
-    SimpleIdentifier identifier =
+    final identifier =
         ast.simpleIdentifier(token, isDeclaration: context.inDeclaration);
     if (context.inLibraryOrPartOfDeclaration) {
       if (!context.isContinuation) {
@@ -3270,7 +3391,14 @@
     } else if (context == IdentifierContext.enumValueDeclaration) {
       var metadata = pop() as List<Annotation>?;
       var comment = _findComment(metadata, token);
-      push(ast.enumConstantDeclaration(comment, metadata, identifier));
+      push(
+        EnumConstantDeclarationImpl(
+          comment: comment,
+          metadata: metadata,
+          name: identifier,
+          arguments: null,
+        ),
+      );
     } else {
       push(identifier);
     }
@@ -3615,26 +3743,27 @@
         extensionDeclaration == null);
     debugEvent("MixinHeader");
 
-    var implementsClause = pop(NullValue.IdentifierList) as ImplementsClause?;
-    var onClause = pop(NullValue.IdentifierList) as OnClause?;
+    var implementsClause =
+        pop(NullValue.IdentifierList) as ImplementsClauseImpl?;
+    var onClause = pop(NullValue.IdentifierList) as OnClauseImpl?;
     var augmentKeyword = pop(NullValue.Token) as Token?;
-    var typeParameters = pop() as TypeParameterList?;
-    var name = pop() as SimpleIdentifier;
+    var typeParameters = pop() as TypeParameterListImpl?;
+    var name = pop() as SimpleIdentifierImpl;
     var metadata = pop() as List<Annotation>?;
     var comment = _findComment(metadata, mixinKeyword);
 
-    mixinDeclaration = ast.mixinDeclaration(
-      comment,
-      metadata,
-      augmentKeyword,
-      mixinKeyword,
-      name,
-      typeParameters,
-      onClause,
-      implementsClause,
-      Tokens.openCurlyBracket(), // leftBracket
-      <ClassMember>[],
-      Tokens.closeCurlyBracket(), // rightBracket
+    mixinDeclaration = MixinDeclarationImpl(
+      comment: comment,
+      metadata: metadata,
+      augmentKeyword: augmentKeyword,
+      mixinKeyword: mixinKeyword,
+      name: name,
+      typeParameters: typeParameters,
+      onClause: onClause,
+      implementsClause: implementsClause,
+      leftBracket: Tokens.openCurlyBracket(),
+      members: <ClassMember>[],
+      rightBracket: Tokens.closeCurlyBracket(),
     );
     declarations.add(mixinDeclaration!);
   }
@@ -3713,8 +3842,14 @@
   void handleNoFieldInitializer(Token token) {
     debugEvent("NoFieldInitializer");
 
-    var name = pop() as SimpleIdentifier;
-    push(_makeVariableDeclaration(name, null, null));
+    var name = pop() as SimpleIdentifierImpl;
+    push(
+      _makeVariableDeclaration(
+        name: name,
+        equals: null,
+        initializer: null,
+      ),
+    );
   }
 
   @override
@@ -3744,7 +3879,7 @@
     debugEvent("NoTypeNameInConstructorReference");
     assert(enumDeclaration != null);
 
-    push(ast.simpleIdentifier(enumDeclaration!.name.token));
+    push(ast.simpleIdentifier(enumDeclaration!.name2));
   }
 
   @override
@@ -4315,9 +4450,16 @@
         typeArguments: typeArguments));
   }
 
-  VariableDeclaration _makeVariableDeclaration(
-      SimpleIdentifier name, Token? equals, Expression? initializer) {
-    return ast.variableDeclaration(name, equals, initializer);
+  VariableDeclaration _makeVariableDeclaration({
+    required SimpleIdentifierImpl name,
+    required Token? equals,
+    required ExpressionImpl? initializer,
+  }) {
+    return VariableDeclarationImpl(
+      name: name,
+      equals: equals,
+      initializer: initializer,
+    );
   }
 
   void _reportFeatureNotEnabled({
@@ -4441,7 +4583,7 @@
 /// followed by a token.
 class _OperatorName {
   final Token operatorKeyword;
-  final SimpleIdentifier name;
+  final SimpleIdentifierImpl name;
 
   _OperatorName(this.operatorKeyword, this.name);
 }
@@ -4470,7 +4612,7 @@
   final Token? asyncKeyword;
   final Token? starKeyword;
   final Token equalToken;
-  final ConstructorName constructorName;
+  final ConstructorNameImpl constructorName;
 
   _RedirectingFactoryBody(this.asyncKeyword, this.starKeyword, this.equalToken,
       this.constructorName);
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 634506e..5768e84 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -365,7 +365,7 @@
     } else {
       if (element.isFactory &&
           // Check if we've reported [NO_GENERATIVE_CONSTRUCTORS_IN_SUPERCLASS].
-          !element.enclosingElement2.constructors
+          !element.enclosingElement3.constructors
               .every((constructor) => constructor.isFactory)) {
         _errorReporter.reportErrorForNode(
             CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, node, [element]);
diff --git a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
index 3cc1495..e3f078a 100644
--- a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
@@ -38,7 +38,7 @@
       return;
     }
 
-    _checkForAssignableExpressionAtType(
+    checkForAssignableExpressionAtType(
         expression, actualStaticType, expectedStaticType, errorCode,
         whyNotPromoted: whyNotPromoted);
   }
@@ -61,6 +61,36 @@
     );
   }
 
+  void checkForAssignableExpressionAtType(
+      Expression expression,
+      DartType actualStaticType,
+      DartType expectedStaticType,
+      ErrorCode errorCode,
+      {Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
+    if (!expectedStaticType.isVoid && checkForUseOfVoidResult(expression)) {
+      return;
+    }
+
+    if (!typeSystem.isAssignableTo(actualStaticType, expectedStaticType)) {
+      AstNode getErrorNode(AstNode node) {
+        if (node is CascadeExpression) {
+          return getErrorNode(node.target);
+        }
+        if (node is ParenthesizedExpression) {
+          return getErrorNode(node.expression);
+        }
+        return node;
+      }
+
+      errorReporter.reportErrorForNode(
+        errorCode,
+        getErrorNode(expression),
+        [actualStaticType, expectedStaticType],
+        computeWhyNotPromotedMessages(expression, whyNotPromoted?.call()),
+      );
+    }
+  }
+
   /// Verify that the given constructor field [initializer] has compatible field
   /// and initializer expression types. The [fieldElement] is the static element
   /// from the name in the [ConstructorFieldInitializer].
@@ -124,45 +154,6 @@
 //        return true;
   }
 
-  /// Verify that the given left hand side ([lhs]) and right hand side ([rhs])
-  /// represent a valid assignment.
-  ///
-  /// See [CompileTimeErrorCode.INVALID_ASSIGNMENT].
-  void checkForInvalidAssignment(Expression? lhs, Expression? rhs,
-      {Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
-    if (lhs == null || rhs == null) {
-      return;
-    }
-
-    if (lhs is IndexExpression &&
-            identical(lhs.realTarget.staticType, NeverTypeImpl.instance) ||
-        lhs is PrefixedIdentifier &&
-            identical(lhs.prefix.staticType, NeverTypeImpl.instance) ||
-        lhs is PropertyAccess &&
-            identical(lhs.realTarget.staticType, NeverTypeImpl.instance)) {
-      return;
-    }
-
-    DartType leftType;
-    var parent = lhs.parent;
-    if (parent is AssignmentExpression && parent.leftHandSide == lhs) {
-      leftType = parent.writeType!;
-    } else {
-      var leftVariableElement = getVariableElement(lhs);
-      leftType = (leftVariableElement == null)
-          ? lhs.typeOrThrow
-          : leftVariableElement.type;
-    }
-
-    if (!leftType.isVoid && checkForUseOfVoidResult(rhs)) {
-      return;
-    }
-
-    _checkForAssignableExpressionAtType(
-        rhs, rhs.typeOrThrow, leftType, CompileTimeErrorCode.INVALID_ASSIGNMENT,
-        whyNotPromoted: whyNotPromoted);
-  }
-
   /// Check for situations where the result of a method or function is used,
   /// when it returns 'void'. Or, in rare cases, when other types of expressions
   /// are void, such as identifiers.
@@ -284,32 +275,4 @@
           whyNotPromoted: whyNotPromoted);
     }
   }
-
-  bool _checkForAssignableExpressionAtType(
-      Expression expression,
-      DartType actualStaticType,
-      DartType expectedStaticType,
-      ErrorCode errorCode,
-      {Map<DartType, NonPromotionReason> Function()? whyNotPromoted}) {
-    if (!typeSystem.isAssignableTo(actualStaticType, expectedStaticType)) {
-      AstNode getErrorNode(AstNode node) {
-        if (node is CascadeExpression) {
-          return getErrorNode(node.target);
-        }
-        if (node is ParenthesizedExpression) {
-          return getErrorNode(node.expression);
-        }
-        return node;
-      }
-
-      errorReporter.reportErrorForNode(
-        errorCode,
-        getErrorNode(expression),
-        [actualStaticType, expectedStaticType],
-        computeWhyNotPromotedMessages(expression, whyNotPromoted?.call()),
-      );
-      return false;
-    }
-    return true;
-  }
 }
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 9bce035..8703396 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -117,7 +117,7 @@
   }
 
   static bool _inFactoryConstructor(Element? element) {
-    var enclosing = element?.enclosingElement2;
+    var enclosing = element?.enclosingElement3;
     if (enclosing == null) {
       return false;
     }
@@ -128,7 +128,7 @@
   }
 
   static bool _inStaticMethod(Element? element) {
-    var enclosing = element?.enclosingElement2;
+    var enclosing = element?.enclosingElement3;
     if (enclosing == null) {
       return false;
     }
@@ -429,7 +429,7 @@
       _duplicateDefinitionVerifier.checkClass(node);
       if (!element.isDartCoreFunctionImpl) {
         _checkForBuiltInIdentifierAsName(
-            node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+            node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       }
       _checkForConflictingClassTypeVariableErrorCodes();
       var superclass = node.extendsClause?.superclass;
@@ -448,7 +448,7 @@
       _checkForFinalNotInitializedInClass(members);
       _checkForBadFunctionUse(node);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
-      _checkForMainFunction(node.name);
+      _checkForMainFunction1(node.name2, node.declaredElement!);
       _reportMacroApplicationErrors(
         annotations: node.metadata,
         macroErrors: element.macroApplicationErrors,
@@ -470,13 +470,13 @@
   @override
   void visitClassTypeAlias(ClassTypeAlias node) {
     _checkForBuiltInIdentifierAsName(
-        node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+        node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
     var outerClassElement = _enclosingClass;
     try {
       _enclosingClass = node.declaredElement as ClassElementImpl;
       _checkClassInheritance(
           node, node.superclass, node.withClause, node.implementsClause);
-      _checkForMainFunction(node.name);
+      _checkForMainFunction1(node.name2, node.declaredElement!);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
     } finally {
       _enclosingClass = outerClassElement;
@@ -543,7 +543,7 @@
       _checkForInvalidField(node, fieldName, staticElement);
       if (staticElement is FieldElement) {
         _checkForAbstractOrExternalFieldConstructorInitializer(
-            node.fieldName, staticElement);
+            node.fieldName.token, staticElement);
       }
       super.visitConstructorFieldInitializer(node);
     } finally {
@@ -572,7 +572,16 @@
 
   @override
   void visitDefaultFormalParameter(DefaultFormalParameter node) {
-    checkForInvalidAssignment(node.identifier, node.defaultValue);
+    final defaultValue = node.defaultValue;
+    if (defaultValue != null) {
+      checkForAssignableExpressionAtType(
+        defaultValue,
+        defaultValue.typeOrThrow,
+        node.declaredElement!.type,
+        CompileTimeErrorCode.INVALID_ASSIGNMENT,
+      );
+    }
+
     super.visitDefaultFormalParameter(node);
   }
 
@@ -592,7 +601,7 @@
       _duplicateDefinitionVerifier.checkEnum(node);
 
       _checkForBuiltInIdentifierAsName(
-          node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+          node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       _checkForConflictingEnumTypeVariableErrorCodes(element);
       var implementsClause = node.implementsClause;
       var withClause = node.withClause;
@@ -604,7 +613,7 @@
       _constructorFieldsVerifier.enterEnum(node, element);
       _checkForFinalNotInitializedInClass(node.members);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
-      _checkForMainFunction(node.name);
+      _checkForMainFunction1(node.name2, node.declaredElement!);
       _checkForEnumInstantiatedToBoundsIsNotWellBounded(node, element);
 
       GetterSetterTypesVerifier(
@@ -655,7 +664,7 @@
       errorReporter: errorReporter,
     ).checkExtension(element);
 
-    final name = node.name;
+    final name = node.name2;
     if (name != null) {
       _checkForBuiltInIdentifierAsName(
           name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME);
@@ -701,7 +710,7 @@
       var fieldElement = element.field;
       if (fieldElement != null) {
         _checkForAbstractOrExternalFieldConstructorInitializer(
-            node.identifier, fieldElement);
+            node.name, fieldElement);
       }
     }
     super.visitFieldFormalParameter(node);
@@ -710,7 +719,7 @@
   @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     DeclaredIdentifier loopVariable = node.loopVariable;
-    if (_checkForEachParts(node, loopVariable.identifier)) {
+    if (_checkForEachParts(node, loopVariable.declaredElement)) {
       if (loopVariable.isConst) {
         errorReporter.reportErrorForToken(
             CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE,
@@ -723,7 +732,7 @@
   @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     SimpleIdentifier identifier = node.identifier;
-    if (_checkForEachParts(node, identifier)) {
+    if (_checkForEachParts(node, identifier.staticElement)) {
       _checkForAssignmentToFinal(identifier);
     }
     super.visitForEachPartsWithIdentifier(node);
@@ -746,23 +755,23 @@
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
     ExecutableElement functionElement = node.declaredElement!;
-    if (functionElement.enclosingElement2 is! CompilationUnitElement) {
+    if (functionElement.enclosingElement3 is! CompilationUnitElement) {
       _hiddenElements!.declare(functionElement);
     }
 
     _withEnclosingExecutable(functionElement, () {
-      SimpleIdentifier identifier = node.name;
       TypeAnnotation? returnType = node.returnType;
       if (node.isSetter) {
         FunctionExpression functionExpression = node.functionExpression;
         _checkForWrongNumberOfParametersForSetter(
-            identifier, functionExpression.parameters);
+            node.name2, functionExpression.parameters);
         _checkForNonVoidReturnTypeForSetter(returnType);
       }
       _checkForTypeAnnotationDeferredClass(returnType);
       _returnTypeVerifier.verifyReturnType(returnType);
-      _checkForImplicitDynamicReturn(node.name, node.declaredElement!);
-      _checkForMainFunction(node.name);
+      _checkForImplicitDynamicReturn(node.name2, node.declaredElement!);
+      _checkForMainFunction1(node.name2, node.declaredElement!);
+      _checkForMainFunction2(node);
       super.visitFunctionDeclaration(node);
     });
   }
@@ -807,10 +816,10 @@
   @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
     _checkForBuiltInIdentifierAsName(
-        node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
-    _checkForMainFunction(node.name);
+        node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+    _checkForMainFunction1(node.name2, node.declaredElement!);
     _checkForTypeAliasCannotReferenceItself(
-        node.name, node.declaredElement as TypeAliasElementImpl);
+        node.name2, node.declaredElement as TypeAliasElementImpl);
     super.visitFunctionTypeAlias(node);
   }
 
@@ -828,8 +837,10 @@
         DartType parameterType = node.declaredElement!.type;
         if (parameterType is FunctionType &&
             parameterType.returnType.isDynamic) {
-          errorReporter.reportErrorForNode(LanguageCode.IMPLICIT_DYNAMIC_RETURN,
-              node.identifier, [node.identifier.name]);
+          errorReporter.reportErrorForToken(
+              LanguageCode.IMPLICIT_DYNAMIC_RETURN,
+              node.name,
+              [node.name.lexeme]);
         }
       }
 
@@ -842,10 +853,10 @@
   @override
   void visitGenericTypeAlias(GenericTypeAlias node) {
     _checkForBuiltInIdentifierAsName(
-        node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
-    _checkForMainFunction(node.name);
+        node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME);
+    _checkForMainFunction1(node.name2, node.declaredElement!);
     _checkForTypeAliasCannotReferenceItself(
-        node.name, node.declaredElement as TypeAliasElementImpl);
+        node.name2, node.declaredElement as TypeAliasElementImpl);
     super.visitGenericTypeAlias(node);
   }
 
@@ -859,7 +870,7 @@
   void visitImportDirective(ImportDirective node) {
     var importElement = node.element2;
     if (node.prefix != null) {
-      _checkForBuiltInIdentifierAsName(node.prefix!,
+      _checkForBuiltInIdentifierAsName(node.prefix!.token,
           CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_PREFIX_NAME);
     }
     if (importElement != null) {
@@ -939,7 +950,7 @@
     _withEnclosingExecutable(node.declaredElement!, () {
       var returnType = node.returnType;
       if (node.isSetter) {
-        _checkForWrongNumberOfParametersForSetter(node.name, node.parameters);
+        _checkForWrongNumberOfParametersForSetter(node.name2, node.parameters);
         _checkForNonVoidReturnTypeForSetter(returnType);
       } else if (node.isOperator) {
         var hasWrongNumberOfParameters =
@@ -954,7 +965,7 @@
       _checkForExtensionDeclaresMemberOfObject(node);
       _checkForTypeAnnotationDeferredClass(returnType);
       _returnTypeVerifier.verifyReturnType(returnType);
-      _checkForImplicitDynamicReturn(node, node.declaredElement!);
+      _checkForImplicitDynamicReturn(node.name2, node.declaredElement!);
       _checkForWrongTypeParameterVarianceInMethod(node);
       super.visitMethodDeclaration(node);
     });
@@ -989,7 +1000,7 @@
       List<ClassMember> members = node.members;
       _duplicateDefinitionVerifier.checkMixin(node);
       _checkForBuiltInIdentifierAsName(
-          node.name, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
+          node.name2, CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME);
       _checkForConflictingClassTypeVariableErrorCodes();
 
       var onClause = node.onClause;
@@ -1002,7 +1013,7 @@
 
       _checkForConflictingClassMembers();
       _checkForFinalNotInitializedInClass(members);
-      _checkForMainFunction(node.name);
+      _checkForMainFunction1(node.name2, node.declaredElement!);
       _checkForWrongTypeParameterVarianceInSuperinterfaces();
       //      _checkForBadFunctionUse(node);
       super.visitMixinDeclaration(node);
@@ -1138,7 +1149,8 @@
     // - DefaultFormalParameter contains a simple one, so it gets here,
     // - FieldFormalParameter error should be reported on the field,
     // - FunctionTypedFormalParameter is a function type, not dynamic.
-    _checkForImplicitDynamicIdentifier(node, node.identifier);
+    _checkForImplicitDynamicIdentifier(node, node.name,
+        variable: node.declaredElement!);
 
     super.visitSimpleFormalParameter(node);
   }
@@ -1196,23 +1208,23 @@
     var superParameter = element.superConstructorParameter;
 
     if (superParameter == null) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         node.isNamed
             ? CompileTimeErrorCode
                 .SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED
             : CompileTimeErrorCode
                 .SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_POSITIONAL,
-        node.identifier,
+        node.name,
       );
       return;
     }
 
     if (!_currentLibrary.typeSystem
         .isSubtypeOf(element.type, superParameter.type)) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode
             .SUPER_FORMAL_PARAMETER_TYPE_IS_NOT_SUBTYPE_OF_ASSOCIATED,
-        node.identifier,
+        node.name,
         [element.type, superParameter.type],
       );
     }
@@ -1261,8 +1273,8 @@
     _checkForFinalNotInitialized(node.variables);
     _checkForNotInitializedNonNullableVariable(node.variables, true);
 
-    for (var declaration in node.variables.variables) {
-      _checkForMainFunction(declaration.name);
+    for (var variable in node.variables.variables) {
+      _checkForMainFunction1(variable.name2, variable.declaredElement!);
     }
 
     super.visitTopLevelVariableDeclaration(node);
@@ -1279,7 +1291,7 @@
 
   @override
   void visitTypeParameter(TypeParameter node) {
-    _checkForBuiltInIdentifierAsName(node.name,
+    _checkForBuiltInIdentifierAsName(node.name2,
         CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME);
     _checkForTypeAnnotationDeferredClass(node.bound);
     _checkForImplicitDynamicType(node.bound);
@@ -1297,15 +1309,14 @@
 
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
-    SimpleIdentifier nameNode = node.name;
+    final nameToken = node.name2;
     var initializerNode = node.initializer;
     // do checks
-    _checkForImplicitDynamicIdentifier(node, nameNode);
+    _checkForImplicitDynamicIdentifier(node, nameToken,
+        variable: node.declaredElement!);
     _checkForAbstractOrExternalVariableInitializer(node);
-    // visit name
-    nameNode.accept(this);
     // visit initializer
-    String name = nameNode.name;
+    String name = nameToken.lexeme;
     _namesForReferenceToDeclaredVariableInInitializer.add(name);
     try {
       if (initializerNode != null) {
@@ -1393,14 +1404,16 @@
   }
 
   void _checkForAbstractOrExternalFieldConstructorInitializer(
-      AstNode node, FieldElement fieldElement) {
+      Token identifier, FieldElement fieldElement) {
     if (fieldElement.isAbstract) {
-      errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER, node);
+      errorReporter.reportErrorForToken(
+          CompileTimeErrorCode.ABSTRACT_FIELD_CONSTRUCTOR_INITIALIZER,
+          identifier);
     }
     if (fieldElement.isExternal) {
-      errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER, node);
+      errorReporter.reportErrorForToken(
+          CompileTimeErrorCode.EXTERNAL_FIELD_CONSTRUCTOR_INITIALIZER,
+          identifier);
     }
   }
 
@@ -1410,17 +1423,17 @@
     if (node.initializer != null) {
       if (declaredElement is FieldElement) {
         if (declaredElement.isAbstract) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER, node.name);
+          errorReporter.reportErrorForToken(
+              CompileTimeErrorCode.ABSTRACT_FIELD_INITIALIZER, node.name2);
         }
         if (declaredElement.isExternal) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER, node.name);
+          errorReporter.reportErrorForToken(
+              CompileTimeErrorCode.EXTERNAL_FIELD_INITIALIZER, node.name2);
         }
       } else if (declaredElement is TopLevelVariableElement) {
         if (declaredElement.isExternal) {
-          errorReporter.reportErrorForNode(
-              CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER, node.name);
+          errorReporter.reportErrorForToken(
+              CompileTimeErrorCode.EXTERNAL_VARIABLE_INITIALIZER, node.name2);
         }
       }
     }
@@ -1624,7 +1637,7 @@
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
           highlightedNode,
-          [variable.name, variable.enclosingElement2.displayName],
+          [variable.name, variable.enclosingElement3.displayName],
         );
       } else {
         errorReporter.reportErrorForNode(
@@ -1695,19 +1708,16 @@
     }
   }
 
-  /// Verify that the given [identifier] is not a keyword, and generates the
+  /// Verify that the given [token] is not a keyword, and generates the
   /// given [errorCode] on the identifier if it is a keyword.
   ///
   /// See [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_EXTENSION_NAME],
   /// [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME],
   /// [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME], and
   /// [CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME].
-  void _checkForBuiltInIdentifierAsName(
-      SimpleIdentifier identifier, ErrorCode errorCode) {
-    Token token = identifier.token;
+  void _checkForBuiltInIdentifierAsName(Token token, ErrorCode errorCode) {
     if (token.type.isKeyword && token.keyword?.isPseudo != true) {
-      errorReporter
-          .reportErrorForNode(errorCode, identifier, [identifier.name]);
+      errorReporter.reportErrorForToken(errorCode, token, [token.lexeme]);
     }
   }
 
@@ -1797,14 +1807,14 @@
             CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, method, [
           _enclosingClass!.displayName,
           name,
-          inherited.enclosingElement2.displayName,
+          inherited.enclosingElement3.displayName,
         ]);
       } else if (inherited is PropertyAccessorElement) {
         errorReporter.reportErrorForElement(
             CompileTimeErrorCode.CONFLICTING_METHOD_AND_FIELD, method, [
           _enclosingClass!.displayName,
           name,
-          inherited.enclosingElement2.displayName
+          inherited.enclosingElement3.displayName
         ]);
       }
     }
@@ -1824,14 +1834,14 @@
             CompileTimeErrorCode.CONFLICTING_STATIC_AND_INSTANCE, accessor, [
           _enclosingClass!.displayName,
           name,
-          inherited.enclosingElement2.displayName,
+          inherited.enclosingElement3.displayName,
         ]);
       } else if (inherited is MethodElement) {
         errorReporter.reportErrorForElement(
             CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD, accessor, [
           _enclosingClass!.displayName,
           name,
-          inherited.enclosingElement2.displayName
+          inherited.enclosingElement3.displayName
         ]);
       }
     }
@@ -1923,9 +1933,9 @@
 
     for (var error in errors) {
       if (error is IncompatibleInterfacesClassHierarchyError) {
-        errorReporter.reportErrorForNode(
+        errorReporter.reportErrorForToken(
           CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES,
-          node.name,
+          node.name2,
           [
             _enclosingClass!.name,
             error.first.getDisplayString(withNullability: true),
@@ -2089,11 +2099,11 @@
       errorReporter.reportErrorForNode(
           CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELD,
           constructor.returnType,
-          ["'${field.enclosingElement2.name}.${field.name}'"]);
+          ["'${field.enclosingElement3.name}.${field.name}'"]);
       return true;
     } else if (instanceFields.length > 1) {
       var fieldNames = instanceFields
-          .map((field) => "'${field.enclosingElement2.name}.${field.name}'")
+          .map((field) => "'${field.enclosingElement3.name}.${field.name}'")
           .join(', ');
       errorReporter.reportErrorForNode(
           CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_MIXIN_WITH_FIELDS,
@@ -2117,7 +2127,7 @@
         errorReporter.reportErrorForNode(
             CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER,
             initializer,
-            [element.enclosingElement2.displayName]);
+            [element.enclosingElement3.displayName]);
         return true;
       }
     }
@@ -2155,8 +2165,8 @@
       return;
     }
     // check if there is non-final field
-    ClassElement classElement = constructorElement.enclosingElement2;
-    if (!classElement.hasNonFinalField) {
+    final classElement = constructorElement.enclosingElement3;
+    if (classElement is ClassElement && !classElement.hasNonFinalField) {
       return;
     }
     errorReporter.reportErrorForName(
@@ -2346,7 +2356,7 @@
 
   /// Return `true` if the caller should continue checking the rest of the
   /// information in the for-each part.
-  bool _checkForEachParts(ForEachParts node, SimpleIdentifier variable) {
+  bool _checkForEachParts(ForEachParts node, Element? variableElement) {
     if (checkForUseOfVoidResult(node.iterable)) {
       return false;
     }
@@ -2382,7 +2392,6 @@
 
     // The type of the loop variable.
     DartType variableType;
-    var variableElement = variable.staticElement;
     if (variableElement is VariableElement) {
       variableType = variableElement.type;
     } else {
@@ -2485,9 +2494,9 @@
         allowSuperBounded: true,
       );
       if (isWellBounded is NotWellBoundedTypeResult) {
-        errorReporter.reportErrorForNode(
+        errorReporter.reportErrorForToken(
           CompileTimeErrorCode.ENUM_INSTANTIATED_TO_BOUNDS_IS_NOT_WELL_BOUNDED,
-          node.name,
+          node.name2,
         );
       }
     }
@@ -2630,15 +2639,15 @@
   void _checkForExtensionDeclaresMemberOfObject(MethodDeclaration node) {
     if (_enclosingExtension == null) return;
 
-    var name = node.name.name;
+    var name = node.name2.lexeme;
     if (name == '==' ||
         name == 'hashCode' ||
         name == 'toString' ||
         name == 'runtimeType' ||
         name == FunctionElement.NO_SUCH_METHOD_METHOD_NAME) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode.EXTENSION_DECLARES_MEMBER_OF_OBJECT,
-        node.name,
+        node.name2,
       );
     }
   }
@@ -2705,10 +2714,10 @@
     for (VariableDeclaration variable in variables) {
       if (variable.initializer == null) {
         if (isConst) {
-          errorReporter.reportErrorForNode(
+          errorReporter.reportErrorForToken(
               CompileTimeErrorCode.CONST_NOT_INITIALIZED,
-              variable.name,
-              [variable.name.name]);
+              variable.name2,
+              [variable.name2.lexeme]);
         } else {
           var variableElement = variable.declaredElement;
           if (variableElement is FieldElement &&
@@ -2718,10 +2727,10 @@
               variableElement.isExternal) {
             // External top level variables can't be initialized, so no error.
           } else if (!_isNonNullableByDefault || !variable.isLate) {
-            errorReporter.reportErrorForNode(
+            errorReporter.reportErrorForToken(
                 CompileTimeErrorCode.FINAL_NOT_INITIALIZED,
-                variable.name,
-                [variable.name.name]);
+                variable.name2,
+                [variable.name2.lexeme]);
           }
         }
       }
@@ -2819,14 +2828,18 @@
     return foundError;
   }
 
-  void _checkForImplicitDynamicIdentifier(AstNode node, Identifier? id) {
+  void _checkForImplicitDynamicIdentifier(
+    AstNode node,
+    Token? id, {
+    required VariableElement variable,
+  }) {
+    if (id == null) {
+      return;
+    }
     if (_options.implicitDynamic) {
       return;
     }
-    var variable = getVariableElement(id);
-    if (variable != null &&
-        variable.hasImplicitType &&
-        variable.type.isDynamic) {
+    if (variable.hasImplicitType && variable.type.isDynamic) {
       ErrorCode errorCode;
       if (variable is FieldElement) {
         errorCode = LanguageCode.IMPLICIT_DYNAMIC_FIELD;
@@ -2837,12 +2850,12 @@
       }
       // Parameters associated with a variable always have a name, so we can
       // safely rely on [id] being non-`null`.
-      errorReporter.reportErrorForNode(errorCode, node, [id!.toSource()]);
+      errorReporter.reportErrorForNode(errorCode, node, [id.lexeme]);
     }
   }
 
   void _checkForImplicitDynamicReturn(
-      AstNode functionName, ExecutableElement element) {
+      Token functionName, ExecutableElement element) {
     if (_options.implicitDynamic) {
       return;
     }
@@ -2850,7 +2863,7 @@
       return;
     }
     if (element.hasImplicitReturnType && element.returnType.isDynamic) {
-      errorReporter.reportErrorForNode(LanguageCode.IMPLICIT_DYNAMIC_RETURN,
+      errorReporter.reportErrorForToken(LanguageCode.IMPLICIT_DYNAMIC_RETURN,
           functionName, [element.displayName]);
     }
   }
@@ -2921,7 +2934,7 @@
         // OK, instance member
         return;
       }
-      Element enclosingElement = element.enclosingElement2;
+      Element enclosingElement = element.enclosingElement3;
       if (enclosingElement is ExtensionElement) {
         if (target is ExtensionOverride) {
           // OK, target is an extension override
@@ -3003,7 +3016,7 @@
     var constructorElement = node.staticElement;
     if (constructorElement != null &&
         constructorElement.isGenerative &&
-        constructorElement.enclosingElement2.isEnum) {
+        constructorElement.enclosingElement3 is EnumElement) {
       if (_currentLibrary.featureSet.isEnabled(Feature.enhanced_enums)) {
         errorReporter.reportErrorForNode(
           CompileTimeErrorCode.INVALID_REFERENCE_TO_GENERATIVE_ENUM_CONSTRUCTOR,
@@ -3046,7 +3059,7 @@
       return;
     }
     // not a class member
-    Element enclosingElement = element.enclosingElement2;
+    Element enclosingElement = element.enclosingElement3;
     if (enclosingElement is! ClassElement &&
         enclosingElement is! ExtensionElement) {
       return;
@@ -3174,48 +3187,62 @@
     }
   }
 
-  void _checkForMainFunction(SimpleIdentifier nameNode) {
+  void _checkForMainFunction1(Token nameToken, Element declaredElement) {
     if (!_currentLibrary.isNonNullableByDefault) {
       return;
     }
 
-    var element = nameNode.staticElement!;
-
     // We should only check exported declarations, i.e. top-level.
-    if (element.enclosingElement2 is! CompilationUnitElement) {
+    if (declaredElement.enclosingElement3 is! CompilationUnitElement) {
       return;
     }
 
-    if (element.displayName != 'main') {
+    if (declaredElement.displayName != 'main') {
       return;
     }
 
-    if (element is! FunctionElement) {
-      errorReporter.reportErrorForNode(
+    if (declaredElement is! FunctionElement) {
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode.MAIN_IS_NOT_FUNCTION,
-        nameNode,
+        nameToken,
       );
+    }
+  }
+
+  void _checkForMainFunction2(FunctionDeclaration functionDeclaration) {
+    if (!_currentLibrary.isNonNullableByDefault) {
       return;
     }
 
-    var functionDeclaration = nameNode.parent as FunctionDeclaration;
-    var functionExpression = functionDeclaration.functionExpression;
-    var parameters = functionExpression.parameters!.parameters;
+    if (functionDeclaration.name2.lexeme != 'main') {
+      return;
+    }
+
+    if (functionDeclaration.parent is! CompilationUnit) {
+      return;
+    }
+
+    final parameterList = functionDeclaration.functionExpression.parameters;
+    if (parameterList == null) {
+      return;
+    }
+
+    var parameters = parameterList.parameters;
     var positional = parameters.where((e) => e.isPositional).toList();
     var requiredPositional =
         parameters.where((e) => e.isRequiredPositional).toList();
 
     if (requiredPositional.length > 2) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS,
-        nameNode,
+        functionDeclaration.name2,
       );
     }
 
     if (parameters.any((e) => e.isRequiredNamed)) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS,
-        nameNode,
+        functionDeclaration.name2,
       );
     }
 
@@ -3496,14 +3523,14 @@
         );
         if (inheritedMember != null) {
           // Inherited members are always contained inside named elements, so we
-          // can safely assume `inheritedMember.enclosingElement2.name` is
+          // can safely assume `inheritedMember.enclosingElement3.name` is
           // non-`null`.
           errorReporter.reportErrorForNode(
               CompileTimeErrorCode.PRIVATE_COLLISION_IN_MIXIN_APPLICATION,
               namedType, [
             name,
             namedType.name.name,
-            inheritedMember.enclosingElement2.name!
+            inheritedMember.enclosingElement3.name!
           ]);
           return true;
         }
@@ -3613,9 +3640,9 @@
         : superUnnamedConstructor;
     if (superUnnamedConstructor != null) {
       if (superUnnamedConstructor.isFactory) {
-        errorReporter.reportErrorForNode(
+        errorReporter.reportErrorForToken(
             CompileTimeErrorCode.NON_GENERATIVE_IMPLICIT_CONSTRUCTOR,
-            declaration.name, [
+            declaration.name2, [
           superElement.name,
           _enclosingClass!.name,
           superUnnamedConstructor
@@ -3630,9 +3657,9 @@
     if (!_typeProvider.isNonSubtypableClass(superType.element)) {
       // Don't report this diagnostic for non-subtypable classes because the
       // real problem was already reported.
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
           CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
-          declaration.name,
+          declaration.name2,
           [superType, _enclosingClass!.displayName]);
     }
   }
@@ -3718,9 +3745,9 @@
       return;
     }
 
-    errorReporter.reportErrorForNode(
+    errorReporter.reportErrorForToken(
       CompileTimeErrorCode.NON_FINAL_FIELD_IN_ENUM,
-      variableList.variables.first.name,
+      variableList.variables.first.name2,
     );
   }
 
@@ -3730,8 +3757,7 @@
   /// See [CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR].
   void _checkForNonVoidReturnTypeForOperator(MethodDeclaration declaration) {
     // check that []= operator
-    SimpleIdentifier name = declaration.name;
-    if (name.name != "[]=") {
+    if (declaration.name2.lexeme != "[]=") {
       return;
     }
     // check return type
@@ -3784,7 +3810,7 @@
       errorReporter.reportErrorForNode(
         CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD,
         field,
-        [field.name.name],
+        [field.name2.lexeme],
       );
     }
   }
@@ -3835,10 +3861,10 @@
 
     for (var variable in node.variables) {
       if (variable.initializer == null) {
-        errorReporter.reportErrorForNode(
+        errorReporter.reportErrorForToken(
           CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE,
-          variable.name,
-          [variable.name.name],
+          variable.name2,
+          [variable.name2.lexeme],
         );
       }
     }
@@ -3952,12 +3978,12 @@
       return;
     }
     // name should start with '_'
-    var name = parameter.identifier;
-    if (name == null || name.isSynthetic || !name.name.startsWith('_')) {
+    var name = parameter.name;
+    if (name == null || name.isSynthetic || !name.lexeme.startsWith('_')) {
       return;
     }
 
-    errorReporter.reportErrorForNode(
+    errorReporter.reportErrorForToken(
         CompileTimeErrorCode.PRIVATE_OPTIONAL_PARAMETER, name);
   }
 
@@ -4020,10 +4046,10 @@
     for (FormalParameter parameter in declaration.parameters.parameters) {
       if (parameter is DefaultFormalParameter &&
           parameter.defaultValue != null) {
-        errorReporter.reportErrorForNode(
+        errorReporter.reportErrorForToken(
             CompileTimeErrorCode
                 .DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR,
-            parameter.identifier!);
+            parameter.name!);
       }
     }
     var redirectedElement = redirectedConstructor.staticElement;
@@ -4032,15 +4058,15 @@
       redirectedElement,
       redirectedConstructor,
     );
-    var redirectedClass = redirectedElement?.enclosingElement2;
+    var redirectedClass = redirectedElement?.enclosingElement3;
     if (redirectedClass is ClassElement &&
         redirectedClass.isAbstract &&
         redirectedElement != null &&
         !redirectedElement.isFactory) {
       String enclosingNamedType = _enclosingClass!.displayName;
       String constructorStrName = enclosingNamedType;
-      if (declaration.name != null) {
-        constructorStrName += ".${declaration.name!.name}";
+      if (declaration.name2 != null) {
+        constructorStrName += ".${declaration.name2!.lexeme}";
       }
       errorReporter.reportErrorForNode(
           CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR,
@@ -4258,13 +4284,13 @@
   ///
   /// See [CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF].
   void _checkForTypeAliasCannotReferenceItself(
-    SimpleIdentifier nameNode,
+    Token nameToken,
     TypeAliasElementImpl element,
   ) {
     if (element.hasSelfReference) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
         CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
-        nameNode,
+        nameToken,
       );
     }
   }
@@ -4307,9 +4333,9 @@
             var element = parameter.declaredElement!;
             // This error can only occur if there is a bound, so we can saefly
             // assume `element.bound` is non-`null`.
-            errorReporter.reportErrorForNode(
+            errorReporter.reportErrorForToken(
               CompileTimeErrorCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND,
-              parameter.name,
+              parameter.name2,
               [element.displayName, element.bound!],
             );
             break;
@@ -4323,7 +4349,7 @@
     if (_enclosingExecutable.inStaticMethod || _isInStaticVariableDeclaration) {
       var element = identifier.staticElement;
       if (element is TypeParameterElement &&
-          element.enclosingElement2 is ClassElement) {
+          element.enclosingElement3 is ClassElement) {
         // The class's type parameters are not in scope for static methods.
         // However all other type parameters are legal (e.g. the static method's
         // type parameters, or a local function's type parameters).
@@ -4414,7 +4440,7 @@
 
     void reportError(ErrorCode errorCode, List<Object> arguments) {
       Identifier returnType = constructor.returnType;
-      var name = constructor.name;
+      var name = constructor.name2;
       int offset = returnType.offset;
       int length = (name != null ? name.end : returnType.end) - offset;
       errorReporter.reportErrorForOffset(errorCode, offset, length, arguments);
@@ -4565,7 +4591,7 @@
     if (element == null || element is TypeParameterElement) {
       return;
     }
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (identical(enclosingElement, _enclosingClass)) {
       return;
     }
@@ -4607,7 +4633,7 @@
         errorReporter.reportErrorForNode(
             CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
             parameter,
-            [parameter.identifier.name]);
+            [parameter.name.lexeme]);
       } else {
         var parameterElement = parameter.declaredElement!;
         if (parameterElement is FieldFormalParameterElementImpl) {
@@ -4617,12 +4643,12 @@
             errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
                 parameter,
-                [parameter.identifier.name]);
+                [parameter.name.lexeme]);
           } else if (fieldElement.isStatic) {
             errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD,
                 parameter,
-                [parameter.identifier.name]);
+                [parameter.name.lexeme]);
           } else if (!typeSystem.isSubtypeOf(declaredType, fieldType)) {
             errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
@@ -4634,12 +4660,12 @@
             errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD,
                 parameter,
-                [parameter.identifier.name]);
+                [parameter.name.lexeme]);
           } else if (fieldElement.isStatic) {
             errorReporter.reportErrorForNode(
                 CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD,
                 parameter,
-                [parameter.identifier.name]);
+                [parameter.name.lexeme]);
           }
         }
       }
@@ -4666,8 +4692,8 @@
     }
     int numParameters = parameterList.parameters.length;
     // prepare operator name
-    SimpleIdentifier nameNode = declaration.name;
-    String name = nameNode.name;
+    final nameToken = declaration.name2;
+    final name = nameToken.lexeme;
     // check for exact number of parameters
     int expected = -1;
     if ("[]=" == name) {
@@ -4694,15 +4720,15 @@
       expected = 0;
     }
     if (expected != -1 && numParameters != expected) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
           CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR,
-          nameNode,
+          nameToken,
           [name, expected, numParameters]);
       return true;
     } else if ("-" == name && numParameters > 1) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
           CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS,
-          nameNode,
+          nameToken,
           [numParameters]);
       return true;
     }
@@ -4718,14 +4744,14 @@
   ///
   /// See [CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER].
   void _checkForWrongNumberOfParametersForSetter(
-      SimpleIdentifier setterName, FormalParameterList? parameterList) {
+      Token setterName, FormalParameterList? parameterList) {
     if (parameterList == null) {
       return;
     }
 
     NodeList<FormalParameter> parameters = parameterList.parameters;
     if (parameters.length != 1 || !parameters[0].isRequiredPositional) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForToken(
           CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER,
           setterName);
     }
@@ -4739,7 +4765,7 @@
         if (!(typeParameter as TypeParameterElementImpl).isLegacyCovariant) {
           var fields = node.fields;
           var fieldElement = fields.variables.first.declaredElement!;
-          var fieldName = fields.variables.first.name;
+          var fieldName = fields.variables.first.name2;
           Variance fieldVariance = Variance(typeParameter, fieldElement.type);
 
           _checkForWrongVariancePosition(
@@ -4872,14 +4898,15 @@
   ///
   /// Errors should only be reported in classes and mixins since those are the
   /// only components that allow explicit variance modifiers.
-  void _checkForWrongVariancePosition(
-      Variance variance, TypeParameterElement typeParameter, AstNode node) {
+  void _checkForWrongVariancePosition(Variance variance,
+      TypeParameterElement typeParameter, SyntacticEntity errorTarget) {
     TypeParameterElementImpl typeParameterImpl =
         typeParameter as TypeParameterElementImpl;
     if (!variance.greaterThanOrEqual(typeParameterImpl.variance)) {
-      errorReporter.reportErrorForNode(
+      errorReporter.reportErrorForOffset(
         CompileTimeErrorCode.WRONG_TYPE_PARAMETER_VARIANCE_POSITION,
-        node,
+        errorTarget.offset,
+        errorTarget.length,
         [
           typeParameterImpl.variance.toKeywordString(),
           typeParameterImpl.name,
@@ -5040,10 +5067,11 @@
       if (parameter is DefaultFormalParameter) {
         if (parameter.isRequiredNamed) {
           if (parameter.defaultValue != null) {
-            var parameterName = _parameterName(parameter);
-            errorReporter.reportErrorForNode(
+            final errorTarget = _parameterName(parameter) ?? parameter;
+            errorReporter.reportErrorForOffset(
               CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER,
-              parameterName ?? parameter,
+              errorTarget.offset,
+              errorTarget.length,
             );
           }
         } else if (defaultValuesAreExpected) {
@@ -5051,18 +5079,21 @@
           if (!parameterElement.hasDefaultValue) {
             var type = parameterElement.type;
             if (typeSystem.isPotentiallyNonNullable(type)) {
-              var parameterName = _parameterName(parameter);
+              final parameterName = _parameterName(parameter);
+              final errorTarget = parameterName ?? parameter;
               if (parameterElement.hasRequired) {
-                errorReporter.reportErrorForNode(
+                errorReporter.reportErrorForOffset(
                   CompileTimeErrorCode
                       .MISSING_DEFAULT_VALUE_FOR_PARAMETER_WITH_ANNOTATION,
-                  parameterName ?? parameter,
+                  errorTarget.offset,
+                  errorTarget.length,
                 );
               } else {
-                errorReporter.reportErrorForNode(
+                errorReporter.reportErrorForOffset(
                   CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER,
-                  parameterName ?? parameter,
-                  [parameterName?.name ?? '?'],
+                  errorTarget.offset,
+                  errorTarget.length,
+                  [parameterName?.lexeme ?? '?'],
                 );
               }
             }
@@ -5181,11 +5212,11 @@
 
   /// Return the name of the [parameter], or `null` if the parameter does not
   /// have a name.
-  SimpleIdentifier? _parameterName(FormalParameter parameter) {
+  Token? _parameterName(FormalParameter parameter) {
     if (parameter is NormalFormalParameter) {
-      return parameter.identifier;
+      return parameter.name;
     } else if (parameter is DefaultFormalParameter) {
-      return parameter.parameter.identifier;
+      return parameter.parameter.name;
     }
     return null;
   }
@@ -5260,8 +5291,8 @@
         parameter = parameter.parameter;
       }
       if (parameter is FieldFormalParameter) {
-        FieldFormalParameterElement element =
-            parameter.identifier.staticElement as FieldFormalParameterElement;
+        final element =
+            parameter.declaredElement as FieldFormalParameterElement;
         fields.remove(element.field);
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 57d16b5..8750f1f 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -86,8 +87,8 @@
           inCompound = true;
           compound = node;
           if (node.declaredElement!.isEmptyStruct) {
-            _errorReporter.reportErrorForNode(
-                FfiCode.EMPTY_STRUCT, node.name, [node.name.name, className]);
+            _errorReporter.reportErrorForToken(FfiCode.EMPTY_STRUCT, node.name2,
+                [node.name2.lexeme, className]);
           }
           if (className == _structClassName) {
             _validatePackedAnnotation(node.metadata);
@@ -95,21 +96,21 @@
         } else if (className == _abiSpecificIntegerClassName) {
           _validateAbiSpecificIntegerAnnotation(node);
           _validateAbiSpecificIntegerMappingAnnotation(
-              node.name, node.metadata);
+              node.name2, node.metadata);
         } else if (className != _allocatorClassName &&
             className != _opaqueClassName &&
             className != _abiSpecificIntegerClassName) {
           _errorReporter.reportErrorForNode(
               FfiCode.SUBTYPE_OF_FFI_CLASS_IN_EXTENDS,
               superclass.name,
-              [node.name.name, superclass.name.name]);
+              [node.name2.lexeme, superclass.name.name]);
         }
       } else if (superclass.isCompoundSubtype ||
           superclass.isAbiSpecificIntegerSubtype) {
         _errorReporter.reportErrorForNode(
             FfiCode.SUBTYPE_OF_STRUCT_CLASS_IN_EXTENDS,
             superclass,
-            [node.name.name, superclass.name.name]);
+            [node.name2.lexeme, superclass.name.name]);
       }
     }
 
@@ -123,11 +124,11 @@
       }
       if (typename.ffiClass != null) {
         _errorReporter.reportErrorForNode(subtypeOfFfiCode, typename,
-            [node.name.name, typename.name.toSource()]);
+            [node.name2.lexeme, typename.name.toSource()]);
       } else if (typename.isCompoundSubtype ||
           typename.isAbiSpecificIntegerSubtype) {
         _errorReporter.reportErrorForNode(subtypeOfStructCode, typename,
-            [node.name.name, typename.name.toSource()]);
+            [node.name2.lexeme, typename.name.toSource()]);
       }
     }
 
@@ -148,8 +149,8 @@
 
     if (inCompound) {
       if (node.declaredElement!.typeParameters.isNotEmpty) {
-        _errorReporter.reportErrorForNode(
-            FfiCode.GENERIC_STRUCT_SUBCLASS, node.name, [node.name.name]);
+        _errorReporter.reportErrorForToken(
+            FfiCode.GENERIC_STRUCT_SUBCLASS, node.name2, [node.name2.lexeme]);
       }
       final implementsClause = node.implementsClause;
       if (implementsClause != null) {
@@ -159,10 +160,10 @@
         final finalizableElement = ffiLibrary.getType(_finalizableClassName)!;
         final finalizableType = finalizableElement.thisType;
         if (typeSystem.isSubtypeOf(compoundType, finalizableType)) {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForToken(
               FfiCode.COMPOUND_IMPLEMENTS_FINALIZABLE,
-              node.name,
-              [node.name.name]);
+              node.name2,
+              [node.name2.lexeme]);
         }
       }
     }
@@ -203,7 +204,7 @@
   void visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
     var element = node.staticElement;
     if (element is MethodElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement.isAllocatorExtension &&
           element.name == _allocateExtensionMethodName) {
         _validateAllocate(node);
@@ -216,7 +217,7 @@
   void visitIndexExpression(IndexExpression node) {
     var element = node.staticElement;
     if (element is MethodElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement.isNativeStructPointerExtension ||
           enclosingElement.isNativeStructArrayExtension) {
         if (element.name == '[]') {
@@ -229,7 +230,7 @@
   @override
   void visitInstanceCreationExpression(InstanceCreationExpression node) {
     var constructor = node.constructorName.staticElement;
-    var class_ = constructor?.enclosingElement2;
+    var class_ = constructor?.enclosingElement3;
     if (class_.isStructSubclass || class_.isUnionSubclass) {
       _errorReporter.reportErrorForNode(
         FfiCode.CREATION_OF_STRUCT_OR_UNION,
@@ -254,7 +255,7 @@
   void visitMethodInvocation(MethodInvocation node) {
     var element = node.methodName.staticElement;
     if (element is MethodElement) {
-      Element enclosingElement = element.enclosingElement2;
+      Element enclosingElement = element.enclosingElement3;
       if (enclosingElement.isPointer) {
         if (element.name == 'fromFunction') {
           _validateFromFunction(node, element);
@@ -271,7 +272,7 @@
         }
       }
     } else if (element is FunctionElement) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is CompilationUnitElement) {
         if (element.library.name == 'dart.ffi') {
           if (element.name == 'sizeOf') {
@@ -287,7 +288,7 @@
   void visitPrefixedIdentifier(PrefixedIdentifier node) {
     var element = node.staticElement;
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement.isNativeStructPointerExtension) {
         if (element.name == 'ref') {
           _validateRefPrefixedIdentifier(node);
@@ -301,7 +302,7 @@
   void visitPropertyAccess(PropertyAccess node) {
     var element = node.propertyName.staticElement;
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement.isNativeStructPointerExtension) {
         if (element.name == 'ref') {
           _validateRefPropertyAccess(node);
@@ -360,7 +361,7 @@
         // Receiver can only be Pointer if the class extends
         // NativeFieldWrapperClass1.
         if (ffiSignature.normalParameterTypes[0].isPointer) {
-          final cls = declarationElement.enclosingElement2 as ClassElement;
+          final cls = declarationElement.enclosingElement3 as ClassElement;
           if (!_extendsNativeFieldWrapperClass1(cls.thisType)) {
             _errorReporter.reportErrorForNode(
                 FfiCode
@@ -611,7 +612,7 @@
   _PrimitiveDartType _typeForAnnotation(Annotation annotation) {
     var element = annotation.element;
     if (element is ConstructorElement) {
-      String name = element.enclosingElement2.name;
+      String name = element.enclosingElement3.name;
       if (_primitiveIntegerNativeTypes.contains(name)) {
         return _PrimitiveDartType.int;
       } else if (_primitiveDoubleNativeTypes.contains(name)) {
@@ -631,21 +632,21 @@
         node.members.length != 1 ||
         node.members.single is! ConstructorDeclaration ||
         (node.members.single as ConstructorDeclaration).constKeyword == null) {
-      _errorReporter.reportErrorForNode(
-          FfiCode.ABI_SPECIFIC_INTEGER_INVALID, node.name);
+      _errorReporter.reportErrorForToken(
+          FfiCode.ABI_SPECIFIC_INTEGER_INVALID, node.name2);
     }
   }
 
   /// Validate that the [annotations] include at most one mapping annotation.
   void _validateAbiSpecificIntegerMappingAnnotation(
-      AstNode errorNode, NodeList<Annotation> annotations) {
+      Token errorToken, NodeList<Annotation> annotations) {
     final ffiPackedAnnotations = annotations
         .where((annotation) => annotation.isAbiSpecificIntegerMapping)
         .toList();
 
     if (ffiPackedAnnotations.isEmpty) {
-      _errorReporter.reportErrorForNode(
-          FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING, errorNode);
+      _errorReporter.reportErrorForToken(
+          FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_MISSING, errorToken);
       return;
     }
 
@@ -724,7 +725,7 @@
     List<Annotation> extraAnnotations = [];
     for (Annotation annotation in annotations) {
       if (annotation.element.ffiClass != null ||
-          annotation.element?.enclosingElement2.isAbiSpecificIntegerSubclass ==
+          annotation.element?.enclosingElement3.isAbiSpecificIntegerSubclass ==
               true) {
         if (requiredFound) {
           extraAnnotations.add(annotation);
@@ -963,17 +964,17 @@
 
     if (typeSystem.isNonNullableByDefault) {
       if (node.externalKeyword == null) {
-        _errorReporter.reportErrorForNode(
+        _errorReporter.reportErrorForToken(
           FfiCode.FIELD_MUST_BE_EXTERNAL_IN_STRUCT,
-          fields.variables[0].name,
+          fields.variables[0].name2,
         );
       }
     }
 
     var fieldType = fields.type;
     if (fieldType == null) {
-      _errorReporter.reportErrorForNode(
-          FfiCode.MISSING_FIELD_TYPE_IN_STRUCT, fields.variables[0].name);
+      _errorReporter.reportErrorForToken(
+          FfiCode.MISSING_FIELD_TYPE_IN_STRUCT, fields.variables[0].name2);
     } else {
       DartType declaredType = fieldType.typeOrThrow;
       if (declaredType.isDartCoreInt) {
@@ -1016,9 +1017,9 @@
     if (!typeSystem.isNonNullableByDefault) {
       for (VariableDeclaration field in fields.variables) {
         if (field.initializer != null) {
-          _errorReporter.reportErrorForNode(
+          _errorReporter.reportErrorForToken(
             FfiCode.FIELD_IN_STRUCT_WITH_INITIALIZER,
-            field.name,
+            field.name2,
           );
         }
       }
@@ -1299,7 +1300,7 @@
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name ==
+        element.enclosingElement3.name ==
             FfiVerifier._abiSpecificIntegerMappingClassName;
   }
 
@@ -1307,21 +1308,21 @@
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name == 'Array';
+        element.enclosingElement3.name == 'Array';
   }
 
   bool get isFfiNative {
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name == 'FfiNative';
+        element.enclosingElement3.name == 'FfiNative';
   }
 
   bool get isPacked {
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name == 'Packed';
+        element.enclosingElement3.name == 'Packed';
   }
 }
 
@@ -1365,7 +1366,7 @@
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name == 'Array';
+        element.enclosingElement3.name == 'Array';
     // Note: this is 'Array' instead of '_ArraySize' because it finds the
     // forwarding factory instead of the forwarded constructor.
   }
@@ -1374,7 +1375,7 @@
     final element = this.element;
     return element is ConstructorElement &&
         element.ffiClass != null &&
-        element.enclosingElement2.name == 'Packed';
+        element.enclosingElement3.name == 'Packed';
   }
 
   int? get packedMemberAlignment {
@@ -1389,7 +1390,7 @@
   ClassElement? get ffiClass {
     var element = this;
     if (element is ConstructorElement) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     if (element is ClassElement && element.isFfiClass) {
       return element;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 9123552..ce5307a 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -431,7 +431,7 @@
 
   void checkForBodyMayCompleteNormally({
     required FunctionBody body,
-    required AstNode errorNode,
+    required SyntacticEntity errorNode,
   }) {
     if (!_isNonNullableByDefault) return;
     if (!flowAnalysis.flow!.isReachable) {
@@ -499,8 +499,8 @@
           errorNode.block.leftBracket,
           [returnType],
         );
-      } else {
-        errorReporter.reportErrorForNode(
+      } else if (errorNode is Token) {
+        errorReporter.reportErrorForToken(
           errorCode,
           errorNode,
           [returnType],
@@ -1249,7 +1249,6 @@
       node.documentationComment?.accept(this);
       node.metadata.accept(this);
       node.returnType.accept(this);
-      node.name?.accept(this);
       node.parameters.accept(this);
       node.initializers.accept(this);
       node.redirectedConstructor?.accept(this);
@@ -1409,9 +1408,12 @@
       if (constructorElement != null) {
         node.constructorElement = constructorElement;
         if (!constructorElement.isConst && constructorElement.isFactory) {
-          errorReporter.reportErrorForNode(
+          final errorTarget =
+              node.arguments?.constructorSelector?.name ?? node.name2;
+          errorReporter.reportErrorForOffset(
             CompileTimeErrorCode.ENUM_CONSTANT_WITH_NON_CONST_CONSTRUCTOR,
-            node.arguments?.constructorSelector?.name ?? node.name,
+            errorTarget.offset,
+            errorTarget.length,
           );
         }
       } else {
@@ -1425,9 +1427,9 @@
               [nameNode.name],
             );
           } else {
-            errorReporter.reportErrorForNode(
+            errorReporter.reportErrorForToken(
               CompileTimeErrorCode.UNDEFINED_ENUM_CONSTRUCTOR_UNNAMED,
-              node.name,
+              node.name2,
             );
           }
         }
@@ -1457,9 +1459,9 @@
               .where((e) => e.isRequiredPositional)
               .length;
           if (requiredParameterCount != 0) {
-            errorReporter.reportErrorForNode(
+            errorReporter.reportErrorForToken(
               CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS,
-              node.name,
+              node.name2,
               [requiredParameterCount, 0],
             );
           }
@@ -1639,7 +1641,6 @@
       node.documentationComment?.accept(this);
       node.metadata.accept(this);
       node.returnType?.accept(this);
-      node.name.accept(this);
       analyzeExpression(node.functionExpression, functionType);
       elementResolver.visitFunctionDeclaration(node);
     } finally {
@@ -1649,7 +1650,7 @@
     if (!node.isSetter) {
       checkForBodyMayCompleteNormally(
         body: node.functionExpression.body,
-        errorNode: node.name,
+        errorNode: node.name2,
       );
     }
     flowAnalysis.executableDeclaration_exit(
@@ -1945,7 +1946,6 @@
       node.documentationComment?.accept(this);
       node.metadata.accept(this);
       node.returnType?.accept(this);
-      node.name.accept(this);
       node.typeParameters?.accept(this);
       node.parameters?.accept(this);
       node.body.resolve(this, returnType.isDynamic ? null : returnType);
@@ -1958,7 +1958,7 @@
     if (!node.isSetter) {
       checkForBodyMayCompleteNormally(
         body: node.body,
-        errorNode: node.name,
+        errorNode: node.name2,
       );
     }
     flowAnalysis.executableDeclaration_exit(node.body, false);
@@ -2573,8 +2573,8 @@
     }
     if (error.kind == TopLevelInferenceErrorKind.dependencyCycle) {
       var argumentsText = error.arguments.join(', ');
-      errorReporter.reportErrorForNode(CompileTimeErrorCode.TOP_LEVEL_CYCLE,
-          node.name, [node.name.name, argumentsText]);
+      errorReporter.reportErrorForToken(CompileTimeErrorCode.TOP_LEVEL_CYCLE,
+          node.name2, [node.name2.lexeme, argumentsText]);
     }
   }
 
@@ -3036,7 +3036,6 @@
   }
 
   void visitClassDeclarationInScope(ClassDeclaration node) {
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.extendsClause?.accept(this);
     node.withClause?.accept(this);
@@ -3070,7 +3069,6 @@
     // alias's type parameter scope.  It was already visited in
     // [visitClassTypeAlias].
     node.documentationComment?.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.superclass.accept(this);
     node.withClause.accept(this);
@@ -3092,7 +3090,6 @@
 
       node.metadata.accept(this);
       node.returnType.accept(this);
-      node.name?.accept(this);
       node.parameters.accept(this);
 
       try {
@@ -3171,7 +3168,6 @@
   }
 
   void visitEnumDeclarationInScope(EnumDeclaration node) {
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.withClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -3211,7 +3207,6 @@
   }
 
   void visitExtensionDeclarationInScope(ExtensionDeclaration node) {
-    node.name?.accept(this);
     node.typeParameters?.accept(this);
     node.extendedType.accept(this);
   }
@@ -3334,7 +3329,6 @@
     // Note: we don't visit metadata because it's not inside the function's type
     // parameter scope.  It was already visited in [visitFunctionDeclaration].
     node.returnType?.accept(this);
-    node.name.accept(this);
     node.functionExpression.accept(this);
   }
 
@@ -3385,7 +3379,6 @@
     // alias's type parameter scope.  It was already visited in
     // [visitFunctionTypeAlias].
     node.returnType?.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.parameters.accept(this);
     // Visiting the parameters added them to the scope as a side effect.  So it
@@ -3416,7 +3409,6 @@
     // [visitFunctionTypedFormalParameter].
     node.documentationComment?.accept(this);
     node.returnType?.accept(this);
-    node.identifier.accept(this);
     node.typeParameters?.accept(this);
     node.parameters.accept(this);
   }
@@ -3469,7 +3461,6 @@
     // Note: we don't visit metadata because it's not inside the generic type
     // alias's type parameter scope.  It was already visited in
     // [visitGenericTypeAlias].
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.type.accept(this);
   }
@@ -3513,7 +3504,6 @@
     // Note: we don't visit metadata because it's not inside the method's type
     // parameter scope.  It was already visited in [visitMethodDeclaration].
     node.returnType?.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.parameters?.accept(this);
     // Visiting the parameters added them to the scope as a side effect.  So it
@@ -3555,7 +3545,6 @@
   }
 
   void visitMixinDeclarationInScope(MixinDeclaration node) {
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.onClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -3625,7 +3614,7 @@
       if (node.inSetterContext()) {
         _localVariableInfo.potentiallyMutatedInScope.add(element);
         if (_enclosingClosure != null &&
-            element.enclosingElement2 != _enclosingClosure) {
+            element.enclosingElement3 != _enclosingClosure) {
           _localVariableInfo.potentiallyMutatedInClosure.add(element);
         }
       }
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index a5ee15d..28b3ace 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -169,23 +169,25 @@
           {List<ClassMember> members = const [],
           bool isMacro = false,
           bool isAugmentation = false}) =>
-      astFactory.classDeclaration(
-          null,
-          null,
-          abstractKeyword == null
+      ClassDeclarationImpl(
+          comment: null,
+          metadata: null,
+          abstractKeyword: abstractKeyword == null
               ? null
               : TokenFactory.tokenFromKeyword(abstractKeyword),
-          isMacro ? TokenFactory.tokenFromString('macro') : null,
-          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
-          TokenFactory.tokenFromKeyword(Keyword.CLASS),
-          identifier3(name),
-          typeParameters,
-          extendsClause,
-          withClause,
-          implementsClause,
-          TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
-          members,
-          TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+          macroKeyword: isMacro ? TokenFactory.tokenFromString('macro') : null,
+          augmentKeyword:
+              isAugmentation ? TokenFactory.tokenFromString('augment') : null,
+          classKeyword: TokenFactory.tokenFromKeyword(Keyword.CLASS),
+          name: identifier3(name),
+          typeParameters: typeParameters as TypeParameterListImpl?,
+          extendsClause: extendsClause as ExtendsClauseImpl?,
+          withClause: withClause as WithClauseImpl?,
+          implementsClause: implementsClause as ImplementsClauseImpl?,
+          leftBracket: TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
+          members: members,
+          rightBracket:
+              TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
 
   static ClassTypeAliasImpl classTypeAlias(
           String name,
@@ -196,22 +198,24 @@
           ImplementsClause? implementsClause,
           {bool isMacro = false,
           bool isAugmentation = false}) =>
-      astFactory.classTypeAlias(
-          null,
-          null,
-          TokenFactory.tokenFromKeyword(Keyword.CLASS),
-          identifier3(name),
-          typeParameters,
-          TokenFactory.tokenFromType(TokenType.EQ),
-          abstractKeyword == null
-              ? null
-              : TokenFactory.tokenFromKeyword(abstractKeyword),
-          isMacro ? TokenFactory.tokenFromString('macro') : null,
-          isAugmentation ? TokenFactory.tokenFromString('augment') : null,
-          superclass,
-          withClause,
-          implementsClause,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      ClassTypeAliasImpl(
+        comment: null,
+        metadata: null,
+        typedefKeyword: TokenFactory.tokenFromKeyword(Keyword.CLASS),
+        name: identifier3(name),
+        typeParameters: typeParameters as TypeParameterListImpl?,
+        equals: TokenFactory.tokenFromType(TokenType.EQ),
+        abstractKeyword: abstractKeyword == null
+            ? null
+            : TokenFactory.tokenFromKeyword(abstractKeyword),
+        macroKeyword: isMacro ? TokenFactory.tokenFromString('macro') : null,
+        augmentKeyword:
+            isAugmentation ? TokenFactory.tokenFromString('augment') : null,
+        superclass: superclass as NamedTypeImpl,
+        withClause: withClause as WithClauseImpl,
+        implementsClause: implementsClause as ImplementsClauseImpl?,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static CompilationUnitImpl compilationUnit() =>
       compilationUnit8(null, [], []);
@@ -281,22 +285,24 @@
           String? name,
           FormalParameterList parameters,
           List<ConstructorInitializer> initializers) =>
-      astFactory.constructorDeclaration(
-          null,
-          null,
-          TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
-          null,
-          null,
-          returnType,
-          name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
-          name == null ? null : identifier3(name),
-          parameters,
-          initializers.isEmpty
-              ? null
-              : TokenFactory.tokenFromType(TokenType.PERIOD),
-          initializers,
-          null,
-          emptyFunctionBody());
+      ConstructorDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
+        constKeyword: null,
+        factoryKeyword: null,
+        returnType: returnType as IdentifierImpl,
+        period:
+            name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+        name: name == null ? null : identifier3(name),
+        parameters: parameters as FormalParameterListImpl,
+        separator: initializers.isEmpty
+            ? null
+            : TokenFactory.tokenFromType(TokenType.PERIOD),
+        initializers: initializers,
+        redirectedConstructor: null,
+        body: emptyFunctionBody(),
+      );
 
   static ConstructorDeclarationImpl constructorDeclaration2(
           Keyword? constKeyword,
@@ -306,26 +312,28 @@
           FormalParameterList parameters,
           List<ConstructorInitializer> initializers,
           FunctionBody body) =>
-      astFactory.constructorDeclaration(
-          null,
-          null,
-          null,
-          constKeyword == null
-              ? null
-              : TokenFactory.tokenFromKeyword(constKeyword),
-          factoryKeyword == null
-              ? null
-              : TokenFactory.tokenFromKeyword(factoryKeyword),
-          returnType,
-          name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
-          name == null ? null : identifier3(name),
-          parameters,
-          initializers.isEmpty
-              ? null
-              : TokenFactory.tokenFromType(TokenType.PERIOD),
-          initializers,
-          null,
-          body);
+      ConstructorDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: null,
+        constKeyword: constKeyword == null
+            ? null
+            : TokenFactory.tokenFromKeyword(constKeyword),
+        factoryKeyword: factoryKeyword == null
+            ? null
+            : TokenFactory.tokenFromKeyword(factoryKeyword),
+        returnType: returnType as IdentifierImpl,
+        period:
+            name == null ? null : TokenFactory.tokenFromType(TokenType.PERIOD),
+        name: name == null ? null : identifier3(name),
+        parameters: parameters as FormalParameterListImpl,
+        separator: initializers.isEmpty
+            ? null
+            : TokenFactory.tokenFromType(TokenType.PERIOD),
+        initializers: initializers,
+        redirectedConstructor: null,
+        body: body as FunctionBodyImpl,
+      );
 
   static ConstructorFieldInitializerImpl constructorFieldInitializer(
           bool prefixedWithThis, String fieldName, Expression expression) =>
@@ -356,12 +364,14 @@
 
   static DeclaredIdentifierImpl declaredIdentifier2(
           Keyword? keyword, TypeAnnotation? type, String identifier) =>
-      astFactory.declaredIdentifier(
-          null,
-          null,
-          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
-          type,
-          identifier3(identifier));
+      DeclaredIdentifierImpl(
+        comment: null,
+        metadata: null,
+        keyword:
+            keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+        type: type as TypeAnnotationImpl?,
+        identifier: identifier3(identifier),
+      );
 
   static DeclaredIdentifierImpl declaredIdentifier3(String identifier) =>
       declaredIdentifier2(Keyword.VAR, null, identifier);
@@ -397,14 +407,15 @@
   static ExportDirectiveImpl exportDirective(
           List<Annotation> metadata, String uri,
           [List<Combinator> combinators = const []]) =>
-      astFactory.exportDirective(
-          null,
-          metadata,
-          TokenFactory.tokenFromKeyword(Keyword.EXPORT),
-          string2(uri),
-          null,
-          combinators,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      ExportDirectiveImpl(
+        comment: null,
+        metadata: metadata,
+        exportKeyword: TokenFactory.tokenFromKeyword(Keyword.EXPORT),
+        uri: string2(uri),
+        configurations: null,
+        combinators: combinators,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static ExportDirectiveImpl exportDirective2(String uri,
           [List<Combinator> combinators = const []]) =>
@@ -435,23 +446,23 @@
           ShowClause? showClause,
           HideClause? hideClause,
           List<ClassMember> members = const []}) =>
-      astFactory.extensionDeclaration(
-          comment: null,
-          metadata: null,
-          extensionKeyword: TokenFactory.tokenFromKeyword(Keyword.EXTENSION),
-          typeKeyword: isExtensionTypeDeclaration
-              ? TokenFactory.tokenFromString('type')
-              : null,
-          name: identifier3(name),
-          typeParameters: typeParameters,
-          onKeyword: TokenFactory.tokenFromKeyword(Keyword.ON),
-          extendedType: extendedType,
-          showClause: showClause,
-          hideClause: hideClause,
-          leftBracket: TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
-          members: members,
-          rightBracket:
-              TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET));
+      ExtensionDeclarationImpl(
+        comment: null,
+        metadata: null,
+        extensionKeyword: TokenFactory.tokenFromKeyword(Keyword.EXTENSION),
+        typeKeyword: isExtensionTypeDeclaration
+            ? TokenFactory.tokenFromString('type')
+            : null,
+        name: identifier3(name),
+        typeParameters: typeParameters as TypeParameterListImpl?,
+        onKeyword: TokenFactory.tokenFromKeyword(Keyword.ON),
+        extendedType: extendedType as TypeAnnotationImpl,
+        showClause: showClause as ShowClauseImpl?,
+        hideClause: hideClause as HideClauseImpl?,
+        leftBracket: TokenFactory.tokenFromType(TokenType.OPEN_CURLY_BRACKET),
+        members: members,
+        rightBracket: TokenFactory.tokenFromType(TokenType.CLOSE_CURLY_BRACKET),
+      );
 
   static ExtensionOverrideImpl extensionOverride(
           {required Identifier extensionName,
@@ -465,17 +476,20 @@
   static FieldDeclarationImpl fieldDeclaration(bool isStatic, Keyword? keyword,
           TypeAnnotation? type, List<VariableDeclaration> variables,
           {bool isAbstract = false, bool isExternal = false}) =>
-      astFactory.fieldDeclaration2(
-          abstractKeyword: isAbstract
-              ? TokenFactory.tokenFromKeyword(Keyword.ABSTRACT)
-              : null,
-          externalKeyword: isExternal
-              ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL)
-              : null,
-          staticKeyword:
-              isStatic ? TokenFactory.tokenFromKeyword(Keyword.STATIC) : null,
-          fieldList: variableDeclarationList(keyword, type, variables),
-          semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      FieldDeclarationImpl(
+        comment: null,
+        metadata: null,
+        augmentKeyword: null,
+        covariantKeyword: null,
+        abstractKeyword:
+            isAbstract ? TokenFactory.tokenFromKeyword(Keyword.ABSTRACT) : null,
+        externalKeyword:
+            isExternal ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL) : null,
+        staticKeyword:
+            isStatic ? TokenFactory.tokenFromKeyword(Keyword.STATIC) : null,
+        fieldList: variableDeclarationList(keyword, type, variables),
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static FieldDeclarationImpl fieldDeclaration2(bool isStatic, Keyword? keyword,
           List<VariableDeclaration> variables) =>
@@ -567,15 +581,17 @@
           Keyword? keyword,
           String name,
           FunctionExpression functionExpression) =>
-      astFactory.functionDeclaration(
-          null,
-          null,
-          null,
-          null,
-          type,
-          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
-          identifier3(name),
-          functionExpression);
+      FunctionDeclarationImpl(
+        comment: null,
+        metadata: null,
+        augmentKeyword: null,
+        externalKeyword: null,
+        returnType: type as TypeAnnotationImpl?,
+        propertyKeyword:
+            keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+        name: identifier3(name),
+        functionExpression: functionExpression as FunctionExpressionImpl,
+      );
 
   static FunctionDeclarationStatementImpl functionDeclarationStatement(
           TypeAnnotation? type,
@@ -628,15 +644,16 @@
 
   static GenericTypeAliasImpl genericTypeAlias(String name,
           TypeParameterList typeParameters, GenericFunctionType functionType) =>
-      astFactory.genericTypeAlias(
-          null,
-          null,
-          TokenFactory.tokenFromKeyword(Keyword.TYPEDEF),
-          identifier3(name),
-          typeParameters,
-          TokenFactory.tokenFromType(TokenType.EQ),
-          functionType,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      GenericTypeAliasImpl(
+        comment: null,
+        metadata: null,
+        typedefKeyword: TokenFactory.tokenFromKeyword(Keyword.TYPEDEF),
+        name: identifier3(name),
+        typeParameters: typeParameters as TypeParameterListImpl,
+        equals: TokenFactory.tokenFromType(TokenType.EQ),
+        type: functionType as GenericFunctionTypeImpl,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static HideClauseImpl hideClause(List<ShowHideClauseElement> elements) =>
       astFactory.hideClause(
@@ -716,17 +733,21 @@
   static ImportDirectiveImpl importDirective(List<Annotation> metadata,
           String uri, bool isDeferred, String? prefix,
           [List<Combinator> combinators = const []]) =>
-      astFactory.importDirective(
-          null,
-          metadata,
-          TokenFactory.tokenFromKeyword(Keyword.IMPORT),
-          string2(uri),
-          null,
-          !isDeferred ? null : TokenFactory.tokenFromKeyword(Keyword.DEFERRED),
-          prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS),
-          prefix == null ? null : identifier3(prefix),
-          combinators,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      ImportDirectiveImpl(
+        comment: null,
+        metadata: metadata,
+        importKeyword: TokenFactory.tokenFromKeyword(Keyword.IMPORT),
+        uri: string2(uri),
+        configurations: null,
+        deferredKeyword: !isDeferred
+            ? null
+            : TokenFactory.tokenFromKeyword(Keyword.DEFERRED),
+        asKeyword:
+            prefix == null ? null : TokenFactory.tokenFromKeyword(Keyword.AS),
+        prefix: prefix == null ? null : identifier3(prefix),
+        combinators: combinators,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static ImportDirectiveImpl importDirective2(
           String uri, bool isDeferred, String prefix,
@@ -837,12 +858,13 @@
 
   static LibraryDirectiveImpl libraryDirective(
           List<Annotation> metadata, LibraryIdentifier libraryName) =>
-      astFactory.libraryDirective(
-          null,
-          metadata,
-          TokenFactory.tokenFromKeyword(Keyword.LIBRARY),
-          libraryName,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      LibraryDirectiveImpl(
+        comment: null,
+        metadata: metadata,
+        libraryKeyword: TokenFactory.tokenFromKeyword(Keyword.LIBRARY),
+        name: libraryName as LibraryIdentifierImpl,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static LibraryDirectiveImpl libraryDirective2(String libraryName) =>
       libraryDirective(<Annotation>[], libraryIdentifier2([libraryName]));
@@ -892,18 +914,22 @@
           Keyword? operator,
           SimpleIdentifier name,
           FormalParameterList? parameters) =>
-      astFactory.methodDeclaration(
-          null,
-          null,
-          TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
-          modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
-          returnType,
-          property == null ? null : TokenFactory.tokenFromKeyword(property),
-          operator == null ? null : TokenFactory.tokenFromKeyword(operator),
-          name,
-          null,
-          parameters,
-          emptyFunctionBody());
+      MethodDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: TokenFactory.tokenFromKeyword(Keyword.EXTERNAL),
+        modifierKeyword:
+            modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+        returnType: returnType as TypeAnnotationImpl?,
+        propertyKeyword:
+            property == null ? null : TokenFactory.tokenFromKeyword(property),
+        operatorKeyword:
+            operator == null ? null : TokenFactory.tokenFromKeyword(operator),
+        name: name as SimpleIdentifierImpl,
+        typeParameters: null,
+        parameters: parameters as FormalParameterListImpl?,
+        body: emptyFunctionBody(),
+      );
 
   static MethodDeclarationImpl methodDeclaration2(
           Keyword? modifier,
@@ -913,18 +939,22 @@
           SimpleIdentifier name,
           FormalParameterList? parameters,
           FunctionBody body) =>
-      astFactory.methodDeclaration(
-          null,
-          null,
-          null,
-          modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
-          returnType,
-          property == null ? null : TokenFactory.tokenFromKeyword(property),
-          operator == null ? null : TokenFactory.tokenFromKeyword(operator),
-          name,
-          null,
-          parameters,
-          body);
+      MethodDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: null,
+        modifierKeyword:
+            modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+        returnType: returnType as TypeAnnotationImpl?,
+        propertyKeyword:
+            property == null ? null : TokenFactory.tokenFromKeyword(property),
+        operatorKeyword:
+            operator == null ? null : TokenFactory.tokenFromKeyword(operator),
+        name: name as SimpleIdentifierImpl,
+        typeParameters: null,
+        parameters: parameters as FormalParameterListImpl?,
+        body: body as FunctionBodyImpl,
+      );
 
   static MethodDeclarationImpl methodDeclaration3(
           Keyword? modifier,
@@ -935,18 +965,22 @@
           TypeParameterList? typeParameters,
           FormalParameterList? parameters,
           FunctionBody body) =>
-      astFactory.methodDeclaration(
-          null,
-          null,
-          null,
-          modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
-          returnType,
-          property == null ? null : TokenFactory.tokenFromKeyword(property),
-          operator == null ? null : TokenFactory.tokenFromKeyword(operator),
-          name,
-          typeParameters,
-          parameters,
-          body);
+      MethodDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: null,
+        modifierKeyword:
+            modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+        returnType: returnType as TypeAnnotationImpl?,
+        propertyKeyword:
+            property == null ? null : TokenFactory.tokenFromKeyword(property),
+        operatorKeyword:
+            operator == null ? null : TokenFactory.tokenFromKeyword(operator),
+        name: name as SimpleIdentifierImpl,
+        typeParameters: typeParameters as TypeParameterListImpl?,
+        parameters: parameters as FormalParameterListImpl?,
+        body: body as FunctionBodyImpl,
+      );
 
   static MethodDeclarationImpl methodDeclaration4(
           {bool external = false,
@@ -957,18 +991,23 @@
           required String name,
           FormalParameterList? parameters,
           required FunctionBody body}) =>
-      astFactory.methodDeclaration(
-          null,
-          null,
-          external ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL) : null,
-          modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
-          returnType,
-          property == null ? null : TokenFactory.tokenFromKeyword(property),
-          operator ? TokenFactory.tokenFromKeyword(Keyword.OPERATOR) : null,
-          identifier3(name),
-          null,
-          parameters,
-          body);
+      MethodDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword:
+            external ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL) : null,
+        modifierKeyword:
+            modifier == null ? null : TokenFactory.tokenFromKeyword(modifier),
+        returnType: returnType as TypeAnnotationImpl?,
+        propertyKeyword:
+            property == null ? null : TokenFactory.tokenFromKeyword(property),
+        operatorKeyword:
+            operator ? TokenFactory.tokenFromKeyword(Keyword.OPERATOR) : null,
+        name: identifier3(name),
+        typeParameters: null,
+        parameters: parameters as FormalParameterListImpl?,
+        body: body as FunctionBodyImpl,
+      );
 
   static MethodInvocationImpl methodInvocation(
           Expression? target, String methodName,
@@ -1072,12 +1111,13 @@
 
   static PartDirectiveImpl partDirective(
           List<Annotation> metadata, String url) =>
-      astFactory.partDirective(
-          null,
-          metadata,
-          TokenFactory.tokenFromKeyword(Keyword.PART),
-          string2(url),
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      PartDirectiveImpl(
+        comment: null,
+        metadata: metadata,
+        partKeyword: TokenFactory.tokenFromKeyword(Keyword.PART),
+        uri: string2(url),
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static PartDirectiveImpl partDirective2(String url) =>
       partDirective(<Annotation>[], url);
@@ -1087,14 +1127,15 @@
 
   static PartOfDirectiveImpl partOfDirective2(
           List<Annotation> metadata, LibraryIdentifier libraryName) =>
-      astFactory.partOfDirective(
-          null,
-          metadata,
-          TokenFactory.tokenFromKeyword(Keyword.PART),
-          TokenFactory.tokenFromString("of"),
-          null,
-          libraryName,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      PartOfDirectiveImpl(
+        comment: null,
+        metadata: metadata,
+        partKeyword: TokenFactory.tokenFromKeyword(Keyword.PART),
+        ofKeyword: TokenFactory.tokenFromString("of"),
+        uri: null,
+        libraryName: libraryName as LibraryIdentifierImpl,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static DefaultFormalParameterImpl positionalFormalParameter(
           NormalFormalParameter parameter, Expression? expression) =>
@@ -1327,23 +1368,25 @@
           Keyword? keyword,
           TypeAnnotation? type,
           List<VariableDeclaration> variables) =>
-      astFactory.topLevelVariableDeclaration(
-          null,
-          null,
-          variableDeclarationList(keyword, type, variables),
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      TopLevelVariableDeclarationImpl(
+        comment: null,
+        metadata: null,
+        externalKeyword: null,
+        variableList: variableDeclarationList(keyword, type, variables),
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static TopLevelVariableDeclarationImpl topLevelVariableDeclaration2(
           Keyword? keyword, List<VariableDeclaration> variables,
           {bool isExternal = false}) =>
-      astFactory.topLevelVariableDeclaration(
-          null,
-          null,
-          variableDeclarationList(keyword, null, variables),
-          TokenFactory.tokenFromType(TokenType.SEMICOLON),
-          externalKeyword: isExternal
-              ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL)
-              : null);
+      TopLevelVariableDeclarationImpl(
+        comment: null,
+        metadata: null,
+        variableList: variableDeclarationList(keyword, null, variables),
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+        externalKeyword:
+            isExternal ? TokenFactory.tokenFromKeyword(Keyword.EXTERNAL) : null,
+      );
 
   static TryStatementImpl tryStatement(Block body, Block finallyClause) =>
       tryStatement3(body, <CatchClause>[], finallyClause);
@@ -1365,15 +1408,16 @@
 
   static FunctionTypeAliasImpl typeAlias(TypeAnnotation returnType, String name,
           TypeParameterList? typeParameters, FormalParameterList parameters) =>
-      astFactory.functionTypeAlias(
-          null,
-          null,
-          TokenFactory.tokenFromKeyword(Keyword.TYPEDEF),
-          returnType,
-          identifier3(name),
-          typeParameters,
-          parameters,
-          TokenFactory.tokenFromType(TokenType.SEMICOLON));
+      FunctionTypeAliasImpl(
+        comment: null,
+        metadata: null,
+        typedefKeyword: TokenFactory.tokenFromKeyword(Keyword.TYPEDEF),
+        returnType: returnType as TypeAnnotationImpl,
+        name: identifier3(name),
+        typeParameters: typeParameters as TypeParameterListImpl?,
+        parameters: parameters as FormalParameterListImpl,
+        semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+      );
 
   static TypeArgumentList? typeArgumentList(List<TypeAnnotation>? types) {
     if (types == null || types.isEmpty) {
@@ -1387,23 +1431,34 @@
         types, TokenFactory.tokenFromType(TokenType.GT));
   }
 
-  static TypeParameterImpl typeParameter(String name) =>
-      astFactory.typeParameter(null, null, identifier3(name), null, null);
+  static TypeParameterImpl typeParameter(String name) => TypeParameterImpl(
+        comment: null,
+        metadata: null,
+        name: identifier3(name),
+        extendsKeyword: null,
+        bound: null,
+      );
 
   static TypeParameterImpl typeParameter2(String name, TypeAnnotation bound) =>
-      astFactory.typeParameter(null, null, identifier3(name),
-          TokenFactory.tokenFromKeyword(Keyword.EXTENDS), bound);
+      TypeParameterImpl(
+        comment: null,
+        metadata: null,
+        name: identifier3(name),
+        extendsKeyword: TokenFactory.tokenFromKeyword(Keyword.EXTENDS),
+        bound: bound as TypeAnnotationImpl,
+      );
 
   static TypeParameterImpl typeParameter3(String name, String varianceLexeme) =>
       // TODO (kallentu) : Clean up AstFactoryImpl casting once variance is
       // added to the interface.
-      astFactory.typeParameter2(
-          comment: null,
-          metadata: null,
-          name: identifier3(name),
-          extendsKeyword: null,
-          bound: null,
-          varianceKeyword: TokenFactory.tokenFromString(varianceLexeme));
+      TypeParameterImpl(
+        comment: null,
+        metadata: null,
+        name: identifier3(name),
+        extendsKeyword: null,
+        bound: null,
+        varianceKeyword: TokenFactory.tokenFromString(varianceLexeme),
+      );
 
   static TypeParameterList? typeParameterList([List<String>? typeNames]) {
     if (typeNames == null || typeNames.isEmpty) {
@@ -1425,21 +1480,31 @@
   }
 
   static VariableDeclarationImpl variableDeclaration(String name) =>
-      astFactory.variableDeclaration(identifier3(name), null, null);
+      VariableDeclarationImpl(
+        name: identifier3(name),
+        equals: null,
+        initializer: null,
+      );
 
   static VariableDeclarationImpl variableDeclaration2(
           String name, Expression initializer) =>
-      astFactory.variableDeclaration(identifier3(name),
-          TokenFactory.tokenFromType(TokenType.EQ), initializer);
+      VariableDeclarationImpl(
+        name: identifier3(name),
+        equals: TokenFactory.tokenFromType(TokenType.EQ),
+        initializer: initializer as ExpressionImpl,
+      );
 
   static VariableDeclarationListImpl variableDeclarationList(Keyword? keyword,
           TypeAnnotation? type, List<VariableDeclaration> variables) =>
-      astFactory.variableDeclarationList(
-          null,
-          null,
-          keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
-          type,
-          variables);
+      VariableDeclarationListImpl(
+        comment: null,
+        metadata: null,
+        lateKeyword: null,
+        keyword:
+            keyword == null ? null : TokenFactory.tokenFromKeyword(keyword),
+        type: type as TypeAnnotationImpl?,
+        variables: variables,
+      );
 
   static VariableDeclarationListImpl variableDeclarationList2(
           Keyword? keyword, List<VariableDeclaration> variables) =>
diff --git a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
index f6df998..9165f0d 100644
--- a/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
+++ b/pkg/analyzer/lib/src/hint/sdk_constraint_verifier.dart
@@ -225,9 +225,9 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    if (checkTripleShift && node.isOperator && node.name.name == '>>>') {
-      _errorReporter.reportErrorForNode(
-          HintCode.SDK_VERSION_GT_GT_GT_OPERATOR, node.name);
+    if (checkTripleShift && node.isOperator && node.name2.lexeme == '>>>') {
+      _errorReporter.reportErrorForToken(
+          HintCode.SDK_VERSION_GT_GT_GT_OPERATOR, node.name2);
     }
     super.visitMethodDeclaration(node);
   }
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 1541169..1471a8b 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -338,8 +338,10 @@
   bool canBeConstConstructor(covariant ConstructorDeclarationImpl node) {
     var element = node.declaredElement!;
 
-    ClassElement classElement = element.enclosingElement2;
-    if (classElement.hasNonFinalField) return false;
+    final classElement = element.enclosingElement3;
+    if (classElement is ClassElement && classElement.hasNonFinalField) {
+      return false;
+    }
 
     var oldKeyword = node.constKeyword;
     try {
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index 8a744b5..4bac2f7 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -17,7 +17,6 @@
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/session.dart';
-import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
@@ -1400,7 +1399,7 @@
       bool isFinal = false,
       bool isStatic = false,
       required DeclarationKind kind,
-      required Identifier name,
+      required Token name,
       String? parameters,
       List<String>? parameterNames,
       List<String>? parameterTypes,
@@ -1410,7 +1409,7 @@
       String? returnType,
       String? typeParameters,
     }) {
-      if (Identifier.isPrivateName(name.name)) {
+      if (Identifier.isPrivateName(name.lexeme)) {
         return null;
       }
 
@@ -1433,7 +1432,7 @@
         lineInfo: lineInfo,
         locationOffset: locationOffset,
         locationPath: path,
-        name: name.name,
+        name: name.lexeme,
         locationStartColumn: lineLocation.columnNumber,
         locationStartLine: lineLocation.lineNumber,
         parameters: parameters,
@@ -1473,13 +1472,11 @@
             var defaultArguments = _computeDefaultArguments(parameters);
             var isConst = classMember.constKeyword != null;
 
-            var constructorName = classMember.name;
-            constructorName ??= SimpleIdentifierImpl(
-              StringToken(
-                TokenType.IDENTIFIER,
-                '',
-                classMember.returnType.offset,
-              ),
+            var constructorName = classMember.name2;
+            constructorName ??= StringToken(
+              TokenType.IDENTIFIER,
+              '',
+              classMember.returnType.offset,
             );
 
             // TODO(brianwilkerson) Should we be passing in `isConst`?
@@ -1516,7 +1513,7 @@
                 isFinal: isFinal,
                 isStatic: isStatic,
                 kind: DeclarationKind.FIELD,
-                name: field.name,
+                name: field.name2,
                 parent: parent,
                 relevanceTags: [
                   'ElementKind.FIELD',
@@ -1534,7 +1531,7 @@
                 isDeprecated: isDeprecated,
                 isStatic: isStatic,
                 kind: DeclarationKind.GETTER,
-                name: classMember.name,
+                name: classMember.name2,
                 parent: parent,
                 relevanceTags: ['ElementKind.FIELD'],
                 returnType: _getTypeAnnotationString(classMember.returnType),
@@ -1544,7 +1541,7 @@
                 isDeprecated: isDeprecated,
                 isStatic: isStatic,
                 kind: DeclarationKind.SETTER,
-                name: classMember.name,
+                name: classMember.name2,
                 parameters: parameters.toSource(),
                 parameterNames: _getFormalParameterNames(parameters),
                 parameterTypes: _getFormalParameterTypes(parameters),
@@ -1561,7 +1558,7 @@
                 isDeprecated: isDeprecated,
                 isStatic: isStatic,
                 kind: DeclarationKind.METHOD,
-                name: classMember.name,
+                name: classMember.name2,
                 parameters: parameters.toSource(),
                 parameterNames: _getFormalParameterNames(parameters),
                 parameterTypes: _getFormalParameterTypes(parameters),
@@ -1582,7 +1579,7 @@
           isAbstract: node.abstractKeyword != null,
           isDeprecated: isDeprecated,
           kind: DeclarationKind.CLASS,
-          name: node.name,
+          name: node.name2,
           relevanceTags: ['ElementKind.CLASS'],
         );
         if (classDeclaration == null) continue;
@@ -1617,7 +1614,7 @@
             parent: classDeclaration,
             relevanceTagsInFile: ['ElementKind.CONSTRUCTOR'],
             requiredParameterCount: 0,
-            returnType: node.name.name,
+            returnType: node.name2.lexeme,
             typeParameters: null,
           ));
         }
@@ -1625,14 +1622,14 @@
         addDeclaration(
           isDeprecated: isDeprecated,
           kind: DeclarationKind.CLASS_TYPE_ALIAS,
-          name: node.name,
+          name: node.name2,
           relevanceTags: ['ElementKind.CLASS'],
         );
       } else if (node is EnumDeclaration) {
         var enumDeclaration = addDeclaration(
           isDeprecated: isDeprecated,
           kind: DeclarationKind.ENUM,
-          name: node.name,
+          name: node.name2,
           relevanceTags: ['ElementKind.ENUM'],
         );
         if (enumDeclaration == null) continue;
@@ -1643,7 +1640,7 @@
           addDeclaration(
             isDeprecated: isDeprecated,
             kind: DeclarationKind.ENUM_CONSTANT,
-            name: constant.name,
+            name: constant.name2,
             parent: enumDeclaration,
             relevanceTags: [
               'ElementKind.ENUM_CONSTANT',
@@ -1652,7 +1649,7 @@
           );
         }
       } else if (node is ExtensionDeclaration) {
-        var name = node.name;
+        var name = node.name2;
         if (name != null) {
           addDeclaration(
             isDeprecated: isDeprecated,
@@ -1670,7 +1667,7 @@
           addDeclaration(
             isDeprecated: isDeprecated,
             kind: DeclarationKind.GETTER,
-            name: node.name,
+            name: node.name2,
             relevanceTags: ['ElementKind.FUNCTION'],
             returnType: _getTypeAnnotationString(node.returnType),
           );
@@ -1678,7 +1675,7 @@
           addDeclaration(
             isDeprecated: isDeprecated,
             kind: DeclarationKind.SETTER,
-            name: node.name,
+            name: node.name2,
             parameters: parameters.toSource(),
             parameterNames: _getFormalParameterNames(parameters),
             parameterTypes: _getFormalParameterTypes(parameters),
@@ -1693,7 +1690,7 @@
             defaultArgumentListTextRanges: defaultArguments?.ranges,
             isDeprecated: isDeprecated,
             kind: DeclarationKind.FUNCTION,
-            name: node.name,
+            name: node.name2,
             parameters: parameters.toSource(),
             parameterNames: _getFormalParameterNames(parameters),
             parameterTypes: _getFormalParameterTypes(parameters),
@@ -1712,7 +1709,7 @@
           addDeclaration(
             isDeprecated: isDeprecated,
             kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
-            name: node.name,
+            name: node.name2,
             parameters: parameters.toSource(),
             parameterNames: _getFormalParameterNames(parameters),
             parameterTypes: _getFormalParameterTypes(parameters),
@@ -1726,7 +1723,7 @@
           addDeclaration(
             isDeprecated: isDeprecated,
             kind: DeclarationKind.TYPE_ALIAS,
-            name: node.name,
+            name: node.name2,
             relevanceTags: ['ElementKind.TYPE_ALIAS'],
           );
         }
@@ -1735,7 +1732,7 @@
         addDeclaration(
           isDeprecated: isDeprecated,
           kind: DeclarationKind.FUNCTION_TYPE_ALIAS,
-          name: node.name,
+          name: node.name2,
           parameters: parameters.toSource(),
           parameterNames: _getFormalParameterNames(parameters),
           parameterTypes: _getFormalParameterTypes(parameters),
@@ -1748,7 +1745,7 @@
         var mixinDeclaration = addDeclaration(
           isDeprecated: isDeprecated,
           kind: DeclarationKind.MIXIN,
-          name: node.name,
+          name: node.name2,
           relevanceTags: ['ElementKind.MIXIN'],
         );
         if (mixinDeclaration == null) continue;
@@ -1763,7 +1760,7 @@
             isDeprecated: isDeprecated,
             isFinal: isFinal,
             kind: DeclarationKind.VARIABLE,
-            name: variable.name,
+            name: variable.name2,
             relevanceTags: [
               'ElementKind.TOP_LEVEL_VARIABLE',
               if (isConst) 'ElementKind.TOP_LEVEL_VARIABLE+const',
@@ -1896,12 +1893,12 @@
         }
 
         if (parameter.isNamed) {
-          buffer.write(parameter.identifier!.name);
+          buffer.write(parameter.name!.lexeme);
           buffer.write(': ');
         }
 
         var valueOffset = buffer.length;
-        buffer.write(parameter.identifier!.name);
+        buffer.write(parameter.name!.lexeme);
         var valueLength = buffer.length - valueOffset;
         ranges.add(valueOffset);
         ranges.add(valueLength);
@@ -1917,7 +1914,7 @@
 
     var names = <String>[];
     for (var parameter in parameters.parameters) {
-      var name = parameter.identifier?.name ?? '';
+      var name = parameter.name?.lexeme ?? '';
       names.add(name);
     }
     return names;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 91ada35..9aa5440 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -370,13 +370,13 @@
 
   DeclaredIdentifier _readDeclaredIdentifier() {
     var flags = _readByte();
-    var type = _readOptionalNode() as TypeAnnotation?;
+    var type = _readOptionalNode() as TypeAnnotationImpl?;
     var identifier = _readDeclarationName();
     var metadata = _readNodeList<Annotation>();
-    return astFactory.declaredIdentifier(
-      null,
-      metadata,
-      Tokens.choose(
+    return DeclaredIdentifierImpl(
+      comment: null,
+      metadata: metadata,
+      keyword: Tokens.choose(
         AstBinaryFlags.isConst(flags),
         Tokens.const_(),
         AstBinaryFlags.isFinal(flags),
@@ -384,8 +384,8 @@
         AstBinaryFlags.isVar(flags),
         Tokens.var_(),
       ),
-      type,
-      identifier,
+      type: type,
+      identifier: identifier,
     );
   }
 
@@ -421,7 +421,7 @@
     if (parameter is SimpleFormalParameterImpl) {
       parameter.declaredElement = element;
     }
-    node.identifier?.staticElement = element;
+    node.declaredElement = element;
     element.type = nonDefaultElement.type;
 
     return node;
@@ -853,24 +853,24 @@
   }
 
   MixinDeclaration _readMixinDeclaration() {
-    var typeParameters = _readOptionalNode() as TypeParameterList?;
-    var onClause = _readOptionalNode() as OnClause?;
-    var implementsClause = _readOptionalNode() as ImplementsClause?;
-    var name = readNode() as SimpleIdentifier;
+    var typeParameters = _readOptionalNode() as TypeParameterListImpl?;
+    var onClause = _readOptionalNode() as OnClauseImpl?;
+    var implementsClause = _readOptionalNode() as ImplementsClauseImpl?;
+    var name = readNode() as SimpleIdentifierImpl;
     var metadata = _readNodeList<Annotation>();
 
-    var node = astFactory.mixinDeclaration(
-      null,
-      metadata,
-      null,
-      Tokens.mixin_(),
-      name,
-      typeParameters,
-      onClause,
-      implementsClause,
-      Tokens.openCurlyBracket(),
-      const <ClassMember>[],
-      Tokens.closeCurlyBracket(),
+    var node = MixinDeclarationImpl(
+      comment: null,
+      metadata: metadata,
+      augmentKeyword: null,
+      mixinKeyword: Tokens.mixin_(),
+      name: name,
+      typeParameters: typeParameters,
+      onClause: onClause,
+      implementsClause: implementsClause,
+      leftBracket: Tokens.openCurlyBracket(),
+      members: const <ClassMember>[],
+      rightBracket: Tokens.closeCurlyBracket(),
     );
 
     return node;
@@ -1197,15 +1197,15 @@
 
   TypeParameter _readTypeParameter() {
     var name = _readDeclarationName();
-    var bound = _readOptionalNode() as TypeAnnotation?;
+    var bound = _readOptionalNode() as TypeAnnotationImpl?;
     var metadata = _readNodeList<Annotation>();
 
-    var node = astFactory.typeParameter(
-      null,
-      metadata,
-      name,
-      bound != null ? Tokens.extends_() : null,
-      bound,
+    var node = TypeParameterImpl(
+      comment: null,
+      metadata: metadata,
+      name: name,
+      extendsKeyword: bound != null ? Tokens.extends_() : null,
+      bound: bound,
     );
 
     return node;
@@ -1226,13 +1226,13 @@
 
   VariableDeclaration _readVariableDeclaration() {
     var flags = _readByte();
-    var name = readNode() as SimpleIdentifier;
-    var initializer = _readOptionalNode() as Expression?;
+    var name = readNode() as SimpleIdentifierImpl;
+    var initializer = _readOptionalNode() as ExpressionImpl?;
 
-    var node = astFactory.variableDeclaration(
-      name,
-      Tokens.eq(),
-      initializer,
+    var node = VariableDeclarationImpl(
+      name: name,
+      equals: Tokens.eq(),
+      initializer: initializer,
     );
 
     node.hasInitializer = AstBinaryFlags.hasInitializer(flags);
@@ -1242,11 +1242,11 @@
 
   VariableDeclarationList _readVariableDeclarationList() {
     var flags = _readByte();
-    var type = _readOptionalNode() as TypeAnnotation?;
+    var type = _readOptionalNode() as TypeAnnotationImpl?;
     var variables = _readNodeList<VariableDeclaration>();
     var metadata = _readNodeList<Annotation>();
 
-    return astFactory.variableDeclarationList2(
+    return VariableDeclarationListImpl(
       comment: null,
       keyword: Tokens.choose(
         AstBinaryFlags.isConst(flags),
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 0c7dbe3..e4577c8 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -190,7 +190,7 @@
       ),
     );
     _writeOptionalNode(node.type);
-    _writeDeclarationName(node.identifier);
+    _writeDeclarationName(node.name);
     _storeDeclaration(node);
   }
 
@@ -764,7 +764,7 @@
   @override
   void visitTypeParameter(TypeParameter node) {
     _writeByte(Tag.TypeParameter);
-    _writeDeclarationName(node.name);
+    _writeDeclarationName(node.name2);
     _writeOptionalNode(node.bound);
     _storeDeclaration(node);
   }
@@ -836,7 +836,7 @@
   }) {
     _writeByte(
       AstBinaryFlags.encode(
-        hasName: node.identifier != null,
+        hasName: node.name != null,
         hasQuestion: hasQuestion,
         isConst: keyword?.type == Keyword.CONST,
         isCovariant: node.covariantKeyword != null,
@@ -847,8 +847,8 @@
     );
 
     _writeNodeList(node.metadata);
-    if (node.identifier != null) {
-      _writeDeclarationName(node.identifier!);
+    if (node.name != null) {
+      _writeDeclarationName(node.name!);
     }
     _storeFormalParameter(node);
   }
@@ -875,8 +875,8 @@
     _sink.addByte(byte);
   }
 
-  void _writeDeclarationName(SimpleIdentifier node) {
-    _writeStringReference(node.name);
+  void _writeDeclarationName(Token token) {
+    _writeStringReference(token.lexeme);
   }
 
   _writeDouble(double value) {
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index 73d60a8..c1c63e0 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -152,7 +152,7 @@
     _token(node.abstractKeyword);
     _token(node.macroKeyword);
     _token(node.classKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     node.extendsClause?.accept(this);
     node.withClause?.accept(this);
@@ -169,7 +169,7 @@
     _token(node.abstractKeyword);
     _token(node.macroKeyword);
     _token(node.typedefKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     _token(node.equals);
     node.superclass.accept(this);
@@ -217,7 +217,7 @@
     _token(node.factoryKeyword);
     node.returnType.accept(this);
     _token(node.period);
-    node.name?.accept(this);
+    _token(node.name2);
     node.parameters.accept(this);
     _token(node.separator);
     _nodeList(node.initializers, node.body.beginToken);
@@ -264,7 +264,7 @@
     _declaration(node);
     _token(node.keyword);
     node.type?.accept(this);
-    node.identifier.accept(this);
+    _token(node.name);
   }
 
   @override
@@ -316,7 +316,7 @@
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
     _declaration(node);
-    node.name.accept(this);
+    _token(node.name2);
     node.arguments?.accept(this);
   }
 
@@ -324,7 +324,7 @@
   void visitEnumDeclaration(EnumDeclaration node) {
     _compilationUnitMember(node);
     _token(node.enumKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     node.withClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -370,7 +370,7 @@
     _compilationUnitMember(node);
     _token(node.extensionKeyword);
     _token(node.typeKeyword);
-    node.name?.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     _token(node.onKeyword);
     node.extendedType.accept(this);
@@ -406,7 +406,7 @@
     node.type?.accept(this);
     _token(node.thisKeyword);
     _token(node.period);
-    node.identifier.accept(this);
+    _token(node.name);
     node.typeParameters?.accept(this);
     node.parameters?.accept(this);
   }
@@ -495,7 +495,7 @@
     _token(node.externalKeyword);
     node.returnType?.accept(this);
     _token(node.propertyKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.functionExpression.accept(this);
   }
 
@@ -529,7 +529,7 @@
     _compilationUnitMember(node);
     _token(node.typedefKeyword);
     node.returnType?.accept(this);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     node.parameters.accept(this);
     _token(node.semicolon);
@@ -539,7 +539,7 @@
   void visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
     _normalFormalParameter(node);
     node.returnType?.accept(this);
-    node.identifier.accept(this);
+    _token(node.name);
     node.typeParameters?.accept(this);
     node.parameters.accept(this);
     _token(node.question);
@@ -558,7 +558,7 @@
   void visitGenericTypeAlias(GenericTypeAlias node) {
     _compilationUnitMember(node);
     _token(node.typedefKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     _token(node.equals);
     node.type.accept(this);
@@ -702,7 +702,7 @@
     node.returnType?.accept(this);
     _token(node.propertyKeyword);
     _token(node.operatorKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     node.parameters?.accept(this);
     node.body.accept(this);
@@ -721,7 +721,7 @@
   void visitMixinDeclaration(MixinDeclaration node) {
     _compilationUnitMember(node);
     _token(node.mixinKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     node.typeParameters?.accept(this);
     node.onClause?.accept(this);
     node.implementsClause?.accept(this);
@@ -863,7 +863,7 @@
     _normalFormalParameter(node);
     _token(node.keyword);
     node.type?.accept(this);
-    node.identifier?.accept(this);
+    _token(node.name);
   }
 
   @override
@@ -907,7 +907,7 @@
     node.type?.accept(this);
     _token(node.superKeyword);
     _token(node.period);
-    node.identifier.accept(this);
+    _token(node.name);
     node.typeParameters?.accept(this);
     node.parameters?.accept(this);
   }
@@ -994,7 +994,7 @@
     // TODO (kallentu) : Clean up TypeParameterImpl casting once variance is
     // added to the interface.
     _token((node as TypeParameterImpl).varianceKeyword);
-    node.name.accept(this);
+    _token(node.name2);
     _token(node.extendsKeyword);
     node.bound?.accept(this);
   }
@@ -1009,7 +1009,7 @@
   @override
   void visitVariableDeclaration(VariableDeclaration node) {
     _annotatedNode(node);
-    node.name.accept(this);
+    _token(node.name2);
     _token(node.equals);
     node.initializer?.accept(this);
   }
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 626dd40..402d18c 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -200,7 +200,7 @@
     ResolutionReader reader,
     ElementImpl element,
   ) {
-    var enclosing = element.enclosingElement2;
+    var enclosing = element.enclosingElement3;
     if (enclosing is ClassElement) {
       reader._addTypeParameters(enclosing.typeParameters);
     } else if (enclosing is CompilationUnitElement) {
@@ -268,7 +268,7 @@
   @override
   void _read(element, reader) {
     element.metadata = reader._readAnnotationList(
-      unitElement: element.enclosingElement2,
+      unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
     element.supertype = reader._readOptionalInterfaceType();
@@ -292,7 +292,7 @@
   @override
   void _read(element, reader) {
     element.metadata = reader._readAnnotationList(
-      unitElement: element.enclosingElement2,
+      unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
     element.extendedType = reader.readRequiredType();
@@ -1288,34 +1288,36 @@
       var name = accessor.displayName;
       var isGetter = accessor.isGetter;
 
-      var reference = containerRef.getChild(name);
-
-      PropertyInducingElementImpl property;
-      if (enclosingElement is CompilationUnitElementImpl) {
-        var existing = reference.element;
-        if (existing is TopLevelVariableElementImpl) {
-          property = existing;
-        } else {
-          var field = TopLevelVariableElementImpl(name, -1);
-          property = field;
-        }
-      } else {
-        var existing = reference.element;
-        if (existing is FieldElementImpl) {
-          property = existing;
-        } else {
-          var field = FieldElementImpl(name, -1);
-          field.isStatic = accessor.isStatic;
-          property = field;
-        }
+      bool canUseExisting(PropertyInducingElement property) {
+        return property.isSynthetic ||
+            accessor.isSetter && property.setter == null;
       }
 
-      if (reference.element == null) {
-        reference.element = property;
-        properties.add(property);
-
-        property.enclosingElement = enclosingElement;
-        property.isSynthetic = true;
+      final PropertyInducingElementImpl property;
+      final reference = containerRef.getChild(name);
+      final existing = reference.element;
+      if (enclosingElement is CompilationUnitElementImpl) {
+        if (existing is TopLevelVariableElementImpl &&
+            canUseExisting(existing)) {
+          property = existing;
+        } else {
+          property = TopLevelVariableElementImpl(name, -1)
+            ..enclosingElement = enclosingElement
+            ..isSynthetic = true;
+          reference.element ??= property;
+          properties.add(property);
+        }
+      } else {
+        if (existing is FieldElementImpl && canUseExisting(existing)) {
+          property = existing;
+        } else {
+          property = FieldElementImpl(name, -1)
+            ..enclosingElement = enclosingElement
+            ..isStatic = accessor.isStatic
+            ..isSynthetic = true;
+          reference.element ??= property;
+          properties.add(property);
+        }
       }
 
       accessor.variable = property;
@@ -1550,7 +1552,7 @@
   @override
   void _read(element, reader) {
     element.metadata = reader._readAnnotationList(
-      unitElement: element.enclosingElement2,
+      unitElement: element.enclosingElement3,
     );
     _readTypeParameters(reader, element.typeParameters);
     element.superclassConstraints = reader._readInterfaceTypeList();
@@ -1634,7 +1636,7 @@
       // TODO(scheglov) why to check for empty? If we have this flags.
       if (arguments.isNotEmpty) {
         var typeParameters =
-            (element.enclosingElement2 as TypeParameterizedElement)
+            (element.enclosingElement3 as TypeParameterizedElement)
                 .typeParameters;
         var substitution = Substitution.fromPairs(typeParameters, arguments);
         element =
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index d3d4cc2..833951d 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -847,7 +847,7 @@
       return const [];
     }
 
-    var enclosing = declaration.enclosingElement2;
+    var enclosing = declaration.enclosingElement3;
     if (enclosing is TypeParameterizedElement) {
       if (enclosing is! ClassElement && enclosing is! ExtensionElement) {
         return const <DartType>[];
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index ec3ff9a..4ddea78 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -119,7 +119,7 @@
         if (typeParametersByName == null) {
           typeParametersByName = {};
           for (var parameterNode in typeParameters) {
-            var name = parameterNode.name.name;
+            var name = parameterNode.name2.lexeme;
             typeParametersByName[name] = parameterNode;
           }
         }
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 08751df..446b4d1 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -88,17 +88,17 @@
 
   @override
   void visitClassDeclaration(covariant ClassDeclarationImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = ClassElementImpl(name, nameNode.offset);
+    var element = ClassElementImpl(name, nameToken.offset);
     element.isAbstract = node.abstractKeyword != null;
     element.isMacro = node.macroKeyword != null;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addClass(name, element);
@@ -121,10 +121,10 @@
 
   @override
   void visitClassTypeAlias(covariant ClassTypeAliasImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = ClassElementImpl(name, nameNode.offset);
+    var element = ClassElementImpl(name, nameToken.offset);
     element.isAbstract = node.abstractKeyword != null;
     element.isMacro = node.macroKeyword != null;
     element.isMixinApplication = true;
@@ -132,7 +132,7 @@
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addClass(name, element);
@@ -156,8 +156,8 @@
   void visitConstructorDeclaration(
     covariant ConstructorDeclarationImpl node,
   ) {
-    var nameNode = node.name ?? node.returnType;
-    var name = node.name?.name ?? '';
+    var nameNode = node.name2 ?? node.returnType;
+    var name = node.name2?.lexeme ?? '';
     if (name == 'new') {
       // A constructor declared as `C.new` is unnamed, and is modeled as such.
       name = '';
@@ -196,8 +196,8 @@
 
   @override
   void visitEnumDeclaration(covariant EnumDeclarationImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameNode = node.name2;
+    var name = nameNode.lexeme;
     var nameOffset = nameNode.offset;
 
     var element = EnumElementImpl(name, nameOffset);
@@ -205,7 +205,7 @@
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addEnum(name, element);
@@ -222,8 +222,8 @@
     var valuesElements = <Expression>[];
     for (var i = 0; i < constants.length; ++i) {
       var constant = constants[i];
-      var name = constant.name.name;
-      var field = ConstFieldElementImpl(name, constant.name.offset)
+      var name = constant.name2.lexeme;
+      var field = ConstFieldElementImpl(name, constant.name2.offset)
         ..hasImplicitType = true
         ..hasInitializer = true
         ..isConst = true
@@ -265,14 +265,19 @@
         ),
       );
 
-      var variableDeclaration = astFactory.variableDeclaration(
-        astFactory.simpleIdentifier(
+      var variableDeclaration = VariableDeclarationImpl(
+        name: astFactory.simpleIdentifier(
           StringToken(TokenType.STRING, name, -1),
         ),
-        Tokens.eq(),
-        initializer,
+        equals: Tokens.eq(),
+        initializer: initializer,
       );
-      astFactory.variableDeclarationList2(
+      VariableDeclarationListImpl(
+        comment: null,
+        metadata: null,
+        lateKeyword: null,
+        keyword: null,
+        type: null,
         variables: [variableDeclaration],
       );
       _linker.elementNodes[field] = variableDeclaration;
@@ -303,12 +308,12 @@
       );
       valuesField.constantInitializer = initializer;
 
-      var variableDeclaration = astFactory.variableDeclaration(
-        astFactory.simpleIdentifier(
+      var variableDeclaration = VariableDeclarationImpl(
+        name: astFactory.simpleIdentifier(
           StringToken(TokenType.STRING, 'values', -1),
         ),
-        Tokens.eq(),
-        initializer,
+        equals: Tokens.eq(),
+        initializer: initializer,
       );
       valuesTypeNode = astFactory.namedType(
         name: astFactory.simpleIdentifier(
@@ -326,7 +331,10 @@
           Tokens.gt(),
         ),
       );
-      astFactory.variableDeclarationList2(
+      VariableDeclarationListImpl(
+        comment: null,
+        metadata: null,
+        lateKeyword: null,
         keyword: Tokens.const_(),
         variables: [variableDeclaration],
         type: valuesTypeNode,
@@ -389,9 +397,9 @@
 
   @override
   void visitExtensionDeclaration(covariant ExtensionDeclarationImpl node) {
-    var nodeName = node.name;
-    var name = nodeName?.name;
-    var nameOffset = nodeName?.offset ?? -1;
+    var nameToken = node.name2;
+    var name = nameToken?.lexeme;
+    var nameOffset = nameToken?.offset ?? -1;
 
     var element = ExtensionElementImpl(name, nameOffset);
     element.metadata = _buildAnnotations(node.metadata);
@@ -437,9 +445,10 @@
   ) {
     var metadata = _buildAnnotations(node.metadata);
     for (var variable in node.fields.variables) {
-      var nameNode = variable.name as SimpleIdentifierImpl;
-      var name = nameNode.name;
-      var nameOffset = nameNode.offset;
+      variable as VariableDeclarationImpl;
+      var nameToken = variable.name2;
+      var name = nameToken.lexeme;
+      var nameOffset = nameToken.offset;
 
       FieldElementImpl element;
       if (_shouldBeConstField(node)) {
@@ -469,7 +478,7 @@
       _enclosingContext.addNonSyntheticField(element);
 
       _linker.elementNodes[element] = variable;
-      nameNode.staticElement = element;
+      variable.declaredElement = element;
     }
     _buildType(node.fields.type);
   }
@@ -478,9 +487,9 @@
   void visitFieldFormalParameter(
     covariant FieldFormalParameterImpl node,
   ) {
-    var nameNode = node.identifier;
-    var name = nameNode.name;
-    var nameOffset = nameNode.offset;
+    var nameToken = node.name;
+    var name = nameToken.lexeme;
+    var nameOffset = nameToken.offset;
 
     ParameterElementImpl element;
     var parent = node.parent;
@@ -505,7 +514,7 @@
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
 
     // TODO(scheglov) check that we don't set reference for parameters
     var fakeReference = Reference.root();
@@ -534,9 +543,9 @@
 
   @override
   void visitFunctionDeclaration(covariant FunctionDeclarationImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
-    var nameOffset = nameNode.offset;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
+    var nameOffset = nameToken.offset;
 
     var functionExpression = node.functionExpression;
     var body = functionExpression.body;
@@ -576,7 +585,7 @@
     _setCodeRange(executableElement, node);
     _setDocumentation(executableElement, node);
 
-    nameNode.staticElement = executableElement;
+    node.declaredElement = executableElement;
     _linker.elementNodes[executableElement] = node;
 
     _buildExecutableElementChildren(
@@ -597,16 +606,16 @@
 
   @override
   void visitFunctionTypeAlias(covariant FunctionTypeAliasImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = TypeAliasElementImpl(name, nameNode.offset);
+    var element = TypeAliasElementImpl(name, nameToken.offset);
     element.isFunctionTypeAliasBased = true;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addTypeAlias(name, element);
@@ -620,7 +629,7 @@
     });
 
     var aliasedElement = GenericFunctionTypeElementImpl.forOffset(
-      node.name.offset,
+      nameToken.offset,
     );
     aliasedElement.parameters = holder.parameters;
 
@@ -632,9 +641,9 @@
   void visitFunctionTypedFormalParameter(
     covariant FunctionTypedFormalParameterImpl node,
   ) {
-    var nameNode = node.identifier;
-    var name = nameNode.name;
-    var nameOffset = nameNode.offset;
+    var nameToken = node.name;
+    var name = nameToken.lexeme;
+    var nameOffset = nameToken.offset;
 
     ParameterElementImpl element;
     var parent = node.parent;
@@ -658,7 +667,7 @@
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
     _enclosingContext.addParameter(name, element);
 
@@ -706,15 +715,15 @@
 
   @override
   void visitGenericTypeAlias(covariant GenericTypeAliasImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = TypeAliasElementImpl(name, nameNode.offset);
+    var element = TypeAliasElementImpl(name, nameToken.offset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addTypeAlias(name, element);
@@ -768,9 +777,9 @@
 
   @override
   void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
-    var nameOffset = nameNode.offset;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
+    var nameOffset = nameToken.offset;
 
     Reference reference;
     ExecutableElementImpl executableElement;
@@ -827,7 +836,7 @@
     _setCodeRange(executableElement, node);
     _setDocumentation(executableElement, node);
 
-    nameNode.staticElement = executableElement;
+    node.declaredElement = executableElement;
     _linker.elementNodes[executableElement] = node;
 
     _buildExecutableElementChildren(
@@ -842,15 +851,15 @@
 
   @override
   void visitMixinDeclaration(covariant MixinDeclarationImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = MixinElementImpl(name, nameNode.offset);
+    var element = MixinElementImpl(name, nameToken.offset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
     _setDocumentation(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
 
     var reference = _enclosingContext.addMixin(name, element);
@@ -903,9 +912,9 @@
   void visitSimpleFormalParameter(
     covariant SimpleFormalParameterImpl node,
   ) {
-    var nameNode = node.identifier;
-    var name = nameNode?.name ?? '';
-    var nameOffset = nameNode?.offset ?? -1;
+    var nameToken = node.name;
+    var name = nameToken?.lexeme ?? '';
+    var nameOffset = nameToken?.offset ?? -1;
 
     ParameterElementImpl element;
     var parent = node.parent;
@@ -934,7 +943,6 @@
     _setCodeRange(element, node);
 
     node.declaredElement = element;
-    nameNode?.staticElement = element;
 
     _buildType(node.type);
   }
@@ -943,9 +951,9 @@
   void visitSuperFormalParameter(
     covariant SuperFormalParameterImpl node,
   ) {
-    var nameNode = node.identifier;
-    var name = nameNode.name;
-    var nameOffset = nameNode.offset;
+    var nameToken = node.name;
+    var name = nameToken.lexeme;
+    var nameOffset = nameToken.offset;
 
     SuperFormalParameterElementImpl element;
     var parent = node.parent;
@@ -970,7 +978,7 @@
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
 
     // TODO(scheglov) check that we don't set reference for parameters
     var fakeReference = Reference.root();
@@ -1000,9 +1008,10 @@
 
     var metadata = _buildAnnotations(node.metadata);
     for (var variable in node.variables.variables) {
-      var nameNode = variable.name as SimpleIdentifierImpl;
-      var name = nameNode.name;
-      var nameOffset = nameNode.offset;
+      variable as VariableDeclarationImpl;
+      var nameToken = variable.name2;
+      var name = nameToken.lexeme;
+      var nameOffset = nameToken.offset;
 
       TopLevelVariableElementImpl element;
       if (node.variables.isConst) {
@@ -1029,7 +1038,7 @@
 
       _linker.elementNodes[element] = variable;
       _enclosingContext.addTopLevelVariable(name, element);
-      nameNode.staticElement = element;
+      variable.declaredElement = element;
 
       var getter = element.getter;
       if (getter is PropertyAccessorElementImpl) {
@@ -1054,14 +1063,14 @@
 
   @override
   void visitTypeParameter(covariant TypeParameterImpl node) {
-    var nameNode = node.name;
-    var name = nameNode.name;
+    var nameToken = node.name2;
+    var name = nameToken.lexeme;
 
-    var element = TypeParameterElementImpl(name, nameNode.offset);
+    var element = TypeParameterElementImpl(name, nameToken.offset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
 
-    nameNode.staticElement = element;
+    node.declaredElement = element;
     _linker.elementNodes[element] = node;
     _enclosingContext.addTypeParameter(name, element);
 
@@ -1134,27 +1143,32 @@
     var enclosingRef = _enclosingContext.reference;
     var enclosingElement = _enclosingContext.element;
 
-    PropertyInducingElementImpl? property;
+    bool canUseExisting(PropertyInducingElement property) {
+      return property.isSynthetic ||
+          accessorElement.isSetter && property.setter == null;
+    }
+
+    final PropertyInducingElementImpl property;
     if (enclosingElement is CompilationUnitElement) {
-      var containerRef = enclosingRef.getChild('@variable');
-      var propertyRef = containerRef.getChild(name);
-      property = propertyRef.element as PropertyInducingElementImpl?;
-      if (property == null) {
-        var variable = TopLevelVariableElementImpl(name, -1);
-        variable.isSynthetic = true;
+      final reference = enclosingRef.getChild('@variable').getChild(name);
+      final existing = reference.element;
+      if (existing is TopLevelVariableElementImpl && canUseExisting(existing)) {
+        property = existing;
+      } else {
+        final variable = property = TopLevelVariableElementImpl(name, -1)
+          ..isSynthetic = true;
         _enclosingContext.addTopLevelVariable(name, variable);
-        property = variable;
       }
     } else {
-      var containerRef = enclosingRef.getChild('@field');
-      var propertyRef = containerRef.getChild(name);
-      property = propertyRef.element as PropertyInducingElementImpl?;
-      if (property == null) {
-        var field = FieldElementImpl(name, -1);
-        field.isSynthetic = true;
-        field.isStatic = accessorElement.isStatic;
+      final reference = enclosingRef.getChild('@field').getChild(name);
+      final existing = reference.element;
+      if (existing is FieldElementImpl && canUseExisting(existing)) {
+        property = existing;
+      } else {
+        final field = property = FieldElementImpl(name, -1)
+          ..isStatic = accessorElement.isStatic
+          ..isSynthetic = true;
         _enclosingContext.addField(name, field);
-        property = field;
       }
     }
 
diff --git a/pkg/analyzer/lib/src/summary2/function_type_builder.dart b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
index 4ab0f6a..8ecabb3 100644
--- a/pkg/analyzer/lib/src/summary2/function_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
@@ -150,7 +150,7 @@
   ) {
     return node.parameters.asImpl.map((parameter) {
       return ParameterElementImpl.synthetic(
-        parameter.identifier?.name ?? '',
+        parameter.name?.lexeme ?? '',
         _getParameterType(isNNBD, parameter),
         parameter.kind,
       );
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 5b53526..482012f 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -78,7 +78,7 @@
         var unitReader = SummaryDataReader(unitInfoBytes);
         var unitInfo = _InfoUnit(unitReader);
 
-        final enclosing = unitElement.enclosingElement2;
+        final enclosing = unitElement.enclosingElement3;
         if (enclosing is LibraryElementImpl) {
           if (identical(enclosing.definingCompilationUnit, unitElement)) {
             _applyToLibrary(enclosing, unitInfo);
@@ -1116,7 +1116,7 @@
     sink.writeList2<ClassDeclaration>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1132,7 +1132,7 @@
     sink.writeList2<ClassTypeAlias>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeOffsets(
@@ -1144,7 +1144,7 @@
     sink.writeList2<EnumDeclaration>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1161,7 +1161,7 @@
     sink.writeList2<ExtensionDeclaration>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(1 + (node.name?.offset ?? -1));
+      sink.writeUInt30(1 + (node.name2?.offset ?? -1));
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1182,7 +1182,7 @@
       (node) {
         sink.writeUInt30(node.offset);
         sink.writeUInt30(node.length);
-        sink.writeUInt30(node.name.offset);
+        sink.writeUInt30(node.name2.offset);
         _writeDocumentationComment(node);
         _writeTypeParameters(node.functionExpression.typeParameters);
         _writeFormalParameters(node.functionExpression.parameters);
@@ -1201,7 +1201,7 @@
             .toList(), (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.functionExpression.typeParameters);
       _writeFormalParameters(node.functionExpression.parameters);
@@ -1215,7 +1215,7 @@
     sink.writeList2<FunctionTypeAlias>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeFormalParameters(node.parameters);
@@ -1230,7 +1230,7 @@
       var aliasedType = node.type;
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       if (aliasedType is GenericFunctionType) {
@@ -1250,7 +1250,7 @@
     sink.writeList2<MixinDeclaration>(unit.declarations, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeTypeParameters(node.typeParameters);
       _writeConstructors(node.members);
@@ -1293,7 +1293,7 @@
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
       sink.writeOptionalUInt30(node.period?.offset);
-      var nameNode = node.name ?? node.returnType;
+      var nameNode = node.name2 ?? node.returnType;
       sink.writeUInt30(nameNode.offset);
       sink.writeUInt30(nameNode.end);
       _writeDocumentationComment(node);
@@ -1331,7 +1331,7 @@
       var codeOffset = node.offset;
       sink.writeUInt30(codeOffset);
       sink.writeUInt30(node.end - codeOffset);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
       _writeDocumentationComment(node);
       _writeOffsets(
         metadata: node.metadata,
@@ -1348,7 +1348,7 @@
     var codeOffset = _codeOffsetForVariable(node);
     sink.writeUInt30(codeOffset);
     sink.writeUInt30(node.end - codeOffset);
-    sink.writeUInt30(node.name.offset);
+    sink.writeUInt30(node.name2.offset);
     _writeDocumentationComment(node);
 
     // TODO(scheglov) Replace with some kind of double-iterating list.
@@ -1375,7 +1375,7 @@
     sink.writeList<FormalParameter>(parameters, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(1 + (node.identifier?.offset ?? -1));
+      sink.writeUInt30(1 + (node.name?.offset ?? -1));
 
       var notDefault = node.notDefault;
       if (notDefault is FieldFormalParameter) {
@@ -1403,7 +1403,7 @@
       (node) {
         sink.writeUInt30(node.offset);
         sink.writeUInt30(node.length);
-        sink.writeUInt30(node.name.offset);
+        sink.writeUInt30(node.name2.offset);
         _writeDocumentationComment(node);
         _writeTypeParameters(node.typeParameters);
         _writeFormalParameters(node.parameters);
@@ -1449,7 +1449,7 @@
       (node) {
         sink.writeUInt30(node.offset);
         sink.writeUInt30(node.length);
-        sink.writeUInt30(node.name.offset);
+        sink.writeUInt30(node.name2.offset);
         _writeDocumentationComment(node);
         _writeTypeParameters(node.typeParameters);
         _writeFormalParameters(node.parameters);
@@ -1537,7 +1537,7 @@
     var codeOffset = _codeOffsetForVariable(node);
     sink.writeUInt30(codeOffset);
     sink.writeUInt30(node.end - codeOffset);
-    sink.writeUInt30(node.name.offset);
+    sink.writeUInt30(node.name2.offset);
     _writeDocumentationComment(node);
 
     // TODO(scheglov) Replace with some kind of double-iterating list.
@@ -1554,7 +1554,7 @@
     sink.writeList<TypeParameter>(parameters, (node) {
       sink.writeUInt30(node.offset);
       sink.writeUInt30(node.length);
-      sink.writeUInt30(node.name.offset);
+      sink.writeUInt30(node.name2.offset);
     });
   }
 }
@@ -1794,7 +1794,7 @@
     super.visitSimpleFormalParameter(node);
 
     var element = node.declaredElement;
-    var identifier = node.identifier;
+    var identifier = node.name;
     if (element is ParameterElementImpl && identifier != null) {
       element.nameOffset = identifier.offset;
     }
diff --git a/pkg/analyzer/lib/src/summary2/macro_declarations.dart b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
index 8a7f6e6..079a09a 100644
--- a/pkg/analyzer/lib/src/summary2/macro_declarations.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
@@ -7,6 +7,7 @@
 import 'package:_fe_analyzer_shared/src/macros/executor/remote_instance.dart'
     as macro;
 import 'package:analyzer/dart/ast/ast.dart' as ast;
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -37,13 +38,18 @@
   /// mixins, etc.
   void transferToElements() {
     // TODO(scheglov) Make sure that these are only declarations?
-    for (final entry in fromNode._identifierMap.entries) {
+    for (final entry in fromNode._referencedIdentifierMap.entries) {
       final element = entry.key.staticElement;
       if (element != null) {
         final declaration = entry.value;
         fromElement._identifierMap[element] = declaration;
       }
     }
+    for (final entry in fromNode._declaredIdentifierMap.entries) {
+      final element = entry.key;
+      final declaration = entry.value;
+      fromElement._identifierMap[element] = declaration;
+    }
 
     for (final entry in fromNode._classMap.entries) {
       final element = entry.key.declaredElement as ClassElement;
@@ -110,7 +116,7 @@
 
   FieldDeclarationImpl _fieldElement(FieldElement element) {
     assert(!_fieldMap.containsKey(element));
-    final enclosingClass = element.enclosingElement2 as ClassElement;
+    final enclosingClass = element.enclosingElement3 as ClassElement;
     return FieldDeclarationImpl(
       id: macro.RemoteInstance.uniqueId,
       identifier: identifier(element),
@@ -157,9 +163,11 @@
 }
 
 class DeclarationBuilderFromNode {
-  final Map<ast.SimpleIdentifier, IdentifierImpl> _identifierMap =
+  final Map<ast.SimpleIdentifier, IdentifierImpl> _referencedIdentifierMap =
       Map.identity();
 
+  final Map<Element, IdentifierImpl> _declaredIdentifierMap = Map.identity();
+
   final Map<ast.ClassDeclaration, IntrospectableClassDeclarationImpl>
       _classMap = Map.identity();
 
@@ -169,6 +177,14 @@
     return _classMap[node] ??= _introspectableClassDeclaration(node);
   }
 
+  macro.IdentifierImpl _declaredIdentifier(Token name, Element element) {
+    return _declaredIdentifierMap[element] ??= _DeclaredIdentifierImpl(
+      id: macro.RemoteInstance.uniqueId,
+      name: name.lexeme,
+      element: element,
+    );
+  }
+
   macro.FunctionTypeParameterImpl _formalParameter(
     ast.FormalParameter node,
   ) {
@@ -187,32 +203,18 @@
       id: macro.RemoteInstance.uniqueId,
       isNamed: node.isNamed,
       isRequired: node.isRequired,
-      name: node.identifier?.name,
+      name: node.name?.lexeme,
       type: typeAnnotation,
     );
   }
 
-  macro.IdentifierImpl _identifier(ast.Identifier node) {
-    final ast.SimpleIdentifier simpleIdentifier;
-    if (node is ast.SimpleIdentifier) {
-      simpleIdentifier = node;
-    } else {
-      simpleIdentifier = (node as ast.PrefixedIdentifier).identifier;
-    }
-    return _identifierMap[simpleIdentifier] ??= IdentifierImplFromNode(
-      id: macro.RemoteInstance.uniqueId,
-      name: simpleIdentifier.name,
-      node: simpleIdentifier,
-    );
-  }
-
   IntrospectableClassDeclarationImpl _introspectableClassDeclaration(
     ast.ClassDeclaration node,
   ) {
     assert(!_classMap.containsKey(node));
     return IntrospectableClassDeclarationImpl._(
       id: macro.RemoteInstance.uniqueId,
-      identifier: _identifier(node.name),
+      identifier: _declaredIdentifier(node.name2, node.declaredElement!),
       typeParameters: _typeParameters(node.typeParameters),
       interfaces: _typeAnnotations(node.implementsClause?.interfaces),
       isAbstract: node.abstractKeyword != null,
@@ -224,6 +226,21 @@
     );
   }
 
+  macro.IdentifierImpl _referencedIdentifier(ast.Identifier node) {
+    final ast.SimpleIdentifier simpleIdentifier;
+    if (node is ast.SimpleIdentifier) {
+      simpleIdentifier = node;
+    } else {
+      simpleIdentifier = (node as ast.PrefixedIdentifier).identifier;
+    }
+    return _referencedIdentifierMap[simpleIdentifier] ??=
+        _ReferencedIdentifierImpl(
+      id: macro.RemoteInstance.uniqueId,
+      name: simpleIdentifier.name,
+      node: simpleIdentifier,
+    );
+  }
+
   T _typeAnnotation<T extends macro.TypeAnnotationImpl>(
       ast.TypeAnnotation? node) {
     if (node == null) {
@@ -248,7 +265,7 @@
     } else if (node is ast.NamedType) {
       return macro.NamedTypeAnnotationImpl(
         id: macro.RemoteInstance.uniqueId,
-        identifier: _identifier(node.name),
+        identifier: _referencedIdentifier(node.name),
         isNullable: node.question != null,
         typeArguments: _typeAnnotations(node.typeArguments?.arguments),
       ) as T;
@@ -273,7 +290,7 @@
   ) {
     return macro.TypeParameterDeclarationImpl(
       id: macro.RemoteInstance.uniqueId,
-      identifier: _identifier(node.name),
+      identifier: _declaredIdentifier(node.name2, node.declaredElement!),
       bound: node.bound.mapOrNull(_typeAnnotation),
     );
   }
@@ -322,19 +339,6 @@
   });
 }
 
-class IdentifierImplFromNode extends IdentifierImpl {
-  final ast.SimpleIdentifier node;
-
-  IdentifierImplFromNode({
-    required super.id,
-    required super.name,
-    required this.node,
-  });
-
-  @override
-  Element? get element => node.staticElement;
-}
-
 class IntrospectableClassDeclarationImpl
     extends macro.IntrospectableClassDeclarationImpl {
   late final ClassElement element;
@@ -351,6 +355,30 @@
   });
 }
 
+class _DeclaredIdentifierImpl extends IdentifierImpl {
+  @override
+  final Element element;
+
+  _DeclaredIdentifierImpl({
+    required super.id,
+    required super.name,
+    required this.element,
+  });
+}
+
+class _ReferencedIdentifierImpl extends IdentifierImpl {
+  final ast.SimpleIdentifier node;
+
+  _ReferencedIdentifierImpl({
+    required super.id,
+    required super.name,
+    required this.node,
+  });
+
+  @override
+  Element? get element => node.staticElement;
+}
+
 extension<T> on T? {
   R? mapOrNull<R>(R Function(T) mapper) {
     final self = this;
diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
index 9b4f698..184476e 100644
--- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart
@@ -247,7 +247,7 @@
   List<ParameterElementImpl> _formalParameters(FormalParameterList node) {
     return node.parameters.asImpl.map((parameter) {
       return ParameterElementImpl.synthetic(
-        parameter.identifier?.name ?? '',
+        parameter.name?.lexeme ?? '',
         _buildFormalParameterType(parameter),
         parameter.kind,
       );
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index dd7cae3..1b096ae 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -47,7 +47,7 @@
         unit.extensions.forEach(_resolveExtensionFields);
         unit.mixins.forEach(_resolveClassFields);
 
-        _scope = unit.enclosingElement2.scope;
+        _scope = unit.enclosingElement3.scope;
         unit.topLevelVariables.forEach(_resolveVariable);
       }
     }
@@ -174,8 +174,8 @@
       }
     }
 
-    var classElement = _constructor.enclosingElement2;
-    if (classElement.isMixinApplication) {
+    var classElement = _constructor.enclosingElement3;
+    if (classElement is ClassElement && classElement.isMixinApplication) {
       var superType = classElement.supertype;
       if (superType != null) {
         var index = classElement.constructors.indexOf(_constructor);
@@ -285,7 +285,7 @@
 
     _set.add(element);
 
-    if (element.enclosingElement2.typeParameters.isNotEmpty) {
+    if (element.enclosingElement3.typeParameters.isNotEmpty) {
       node.argumentList.accept(this);
     }
   }
@@ -356,7 +356,7 @@
         unit.extensions.forEach(_addExtensionElementFields);
         unit.mixins.forEach(_addClassElementFields);
 
-        _scope = unit.enclosingElement2.scope;
+        _scope = unit.enclosingElement3.scope;
         for (var element in unit.topLevelVariables) {
           _addVariableNode(element);
         }
@@ -455,7 +455,7 @@
 
   @override
   String get displayName {
-    return _node.name.name;
+    return _node.name2.lexeme;
   }
 
   @override
@@ -526,7 +526,7 @@
   }
 
   void _resolveInitializer({required bool forDependencies}) {
-    var enclosingElement = _element.enclosingElement2;
+    var enclosingElement = _element.enclosingElement3;
     var enclosingClassElement =
         enclosingElement is ClassElement ? enclosingElement : null;
     var astResolver = AstResolver(_walker._linker, _unitElement, _scope,
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 64d6087..28bb1b2 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -194,7 +194,7 @@
       if (returnType == null) {
         if (node.isSetter) {
           returnType = _voidType;
-        } else if (node.isOperator && node.name.name == '[]=') {
+        } else if (node.isOperator && node.name2.lexeme == '[]=') {
           returnType = _voidType;
         } else {
           returnType = _dynamicType;
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index 8c0dcc9..df8f7f7 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/syntactic_entity.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -16,7 +17,7 @@
 import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/error/codes.dart' show CompileTimeErrorCode;
 
-Element? _getKnownElement(Expression expression) {
+Element? _getKnownElement(SyntacticEntity expression) {
   if (expression is ParenthesizedExpression) {
     return _getKnownElement(expression.expression);
   } else if (expression is NamedExpression) {
@@ -199,13 +200,21 @@
 
   @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
-    _visitForEachParts(node, node.loopVariable.identifier);
+    _visitForEachParts(
+      node,
+      node.loopVariable.name,
+      node.loopVariable.declaredElement,
+    );
     node.visitChildren(this);
   }
 
   @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
-    _visitForEachParts(node, node.identifier);
+    _visitForEachParts(
+      node,
+      node.identifier.token,
+      node.identifier.staticElement,
+    );
     node.visitChildren(this);
   }
 
@@ -477,14 +486,16 @@
   ///
   /// If [expr] does not require an implicit cast because it is not related to
   /// [to] or is already a subtype of it, does nothing.
-  void _checkImplicitCast(Expression expr,
+  void _checkImplicitCast(SyntacticEntity expr,
       {required DartType to,
       required DartType from,
       bool opAssign = false,
       bool forSpread = false,
       bool forSpreadKey = false,
       bool forSpreadValue = false}) {
-    expr = expr.unParenthesized;
+    if (expr is Expression) {
+      expr = expr.unParenthesized;
+    }
     if (_needsImplicitCast(expr, to: to, from: from) == true) {
       _recordImplicitCast(expr, to,
           from: from,
@@ -635,7 +646,7 @@
   /// downcast implicitly).
   ///
   /// If [from] is omitted, uses the static type of [expr]
-  bool? _needsImplicitCast(Expression expr,
+  bool? _needsImplicitCast(SyntacticEntity expr,
       {required DartType from, required DartType to}) {
     // Void is considered Top, but may only be *explicitly* cast.
     if (from.isVoid) return null;
@@ -674,7 +685,7 @@
   ///
   /// This will emit the appropriate error/warning/hint message as well as mark
   /// the AST node.
-  void _recordImplicitCast(Expression expr, DartType to,
+  void _recordImplicitCast(SyntacticEntity expr, DartType to,
       {required DartType from,
       bool opAssign = false,
       bool forSpread = false,
@@ -748,7 +759,7 @@
   }
 
   void _recordMessage(
-      AstNode node, ErrorCode errorCode, List<Object> arguments) {
+      SyntacticEntity node, ErrorCode errorCode, List<Object> arguments) {
     var argumentStrings = [
       for (var argument in arguments)
         if (argument is DartType)
@@ -761,16 +772,18 @@
         ? node.firstTokenAfterCommentAndMetadata.offset
         : node.offset;
     int length = node.end - begin;
-    var source = (node.root as CompilationUnit).declaredElement!.source;
-    _errorReporter.reportError(
-        AnalysisError(source, begin, length, errorCode, argumentStrings));
+    _errorReporter.reportErrorForOffset(
+        errorCode, begin, length, argumentStrings);
   }
 
-  void _visitForEachParts(ForEachParts node, SimpleIdentifier loopVariable) {
-    if (loopVariable.staticElement is! VariableElement) {
+  void _visitForEachParts(
+    ForEachParts node,
+    Token loopVariable,
+    Element? loopVariableElement,
+  ) {
+    if (loopVariableElement is! VariableElement) {
       return;
     }
-    var loopVariableElement = loopVariable.staticElement as VariableElement;
 
     // Safely handle malformed statements.
     Token? awaitKeyword;
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 038c167..d0b5ca2 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -424,7 +424,7 @@
           var conflict = conflicts.single;
           if (conflict is CandidatesConflict) {
             conflictExplanation = conflict.candidates.map((candidate) {
-              var className = candidate.enclosingElement2.name;
+              var className = candidate.enclosingElement3.name;
               var typeStr = candidate.type.getDisplayString(
                 withNullability: typeSystem.isNonNullableByDefault,
               );
@@ -540,7 +540,7 @@
       overridden = overridden.declaration;
 
       // Skip Object itself.
-      var enclosingElement = overridden.enclosingElement2;
+      var enclosingElement = overridden.enclosingElement3;
       if (enclosingElement is ClassElement &&
           enclosingElement.isDartCoreObject) {
         continue;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 5ffa874..6638cab 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -509,7 +509,7 @@
     for (var declaration in unit.declarations) {
       if (declaration is TopLevelVariableDeclaration) {
         for (var variable in declaration.variables.variables) {
-          if (variable.name.name == name) {
+          if (variable.name2.lexeme == name) {
             return variable;
           }
         }
diff --git a/pkg/analyzer/lib/src/util/ast_data_extractor.dart b/pkg/analyzer/lib/src/util/ast_data_extractor.dart
index 6574c92..199f082 100644
--- a/pkg/analyzer/lib/src/util/ast_data_extractor.dart
+++ b/pkg/analyzer/lib/src/util/ast_data_extractor.dart
@@ -8,7 +8,7 @@
 import 'package:analyzer/dart/element/element.dart';
 
 MemberId computeMemberId(Element element) {
-  var enclosingElement = element.enclosingElement2;
+  var enclosingElement = element.enclosingElement3;
   if (enclosingElement is CompilationUnitElement) {
     var memberName = element.name!;
     if (element is PropertyAccessorElement && element.isSetter) {
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index f70c0a3..a569500 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -235,7 +235,7 @@
   void test_endToken_noParameters() {
     FieldFormalParameter parameter =
         AstTestFactory.fieldFormalParameter2('field');
-    expect(parameter.endToken, parameter.identifier.endToken);
+    expect(parameter.endToken, parameter.name);
   }
 
   void test_endToken_parameters() {
@@ -1493,6 +1493,7 @@
     expect(identifier.inGetterContext(), isFalse);
   }
 
+  @deprecated
   void test_inGetterContext_fieldFormalParameter() {
     FieldFormalParameter parameter =
         AstTestFactory.fieldFormalParameter2('test');
@@ -1509,12 +1510,6 @@
     expect(identifier.inGetterContext(), isFalse);
   }
 
-  void test_inGetterContext_variableDeclaration() {
-    VariableDeclaration variable = AstTestFactory.variableDeclaration('test');
-    SimpleIdentifier identifier = variable.name;
-    expect(identifier.inGetterContext(), isFalse);
-  }
-
   void test_inReferenceContext() {
     SimpleIdentifier identifier = AstTestFactory.identifier3("id");
     AstTestFactory.namedExpression(
@@ -2110,7 +2105,7 @@
   void test_endToken_noParameters() {
     SuperFormalParameter parameter =
         AstTestFactory.superFormalParameter2('field');
-    expect(parameter.endToken, parameter.identifier.endToken);
+    expect(parameter.endToken, parameter.name);
   }
 
   void test_endToken_parameters() {
diff --git a/pkg/analyzer/test/error/error_test.dart b/pkg/analyzer/test/error/error_test.dart
index bc0e269..d766e0e 100644
--- a/pkg/analyzer/test/error/error_test.dart
+++ b/pkg/analyzer/test/error/error_test.dart
@@ -38,13 +38,13 @@
         var extendsClause = declaration.extendsClause;
         if (extendsClause != null &&
             extendsClause.superclass.name.name == 'ErrorCode') {
-          String className = declaration.name.name;
+          String className = declaration.name2.lexeme;
           for (ClassMember member in declaration.members) {
             if (member is FieldDeclaration && member.isStatic) {
               var fields = member.fields;
               if ((fields.type == null ? bad() : true) &&
                   fields.type!.toSource() == className) {
-                String fieldName = fields.variables[0].name.name;
+                String fieldName = fields.variables[0].name2.lexeme;
                 declaredCodes.add('$className.$fieldName');
               }
             }
@@ -61,7 +61,7 @@
     TopLevelVariableDeclaration declaration = listingUnit.declarations
         .whereType<TopLevelVariableDeclaration>()
         .firstWhere((member) =>
-            member.variables.variables[0].name.name == 'errorCodeValues');
+            member.variables.variables[0].name2.lexeme == 'errorCodeValues');
     var listLiteral =
         declaration.variables.variables[0].initializer as ListLiteral;
     for (var element in listLiteral.elements.cast<PrefixedIdentifier>()) {
diff --git a/pkg/analyzer/test/generated/class_member_parser_test.dart b/pkg/analyzer/test/generated/class_member_parser_test.dart
index 7b39f70..7d55bed 100644
--- a/pkg/analyzer/test/generated/class_member_parser_test.dart
+++ b/pkg/analyzer/test/generated/class_member_parser_test.dart
@@ -39,7 +39,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
     expect(constructor.returnType, isNotNull);
@@ -96,7 +96,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name.name, 'late');
+    expect(method.name2.lexeme, 'late');
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -295,7 +295,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
     expect(constructor.returnType, isNotNull);
@@ -389,7 +389,7 @@
     expect(constructor.externalKeyword, isNull);
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.period, isNull);
     expect(constructor.returnType, isNotNull);
@@ -417,7 +417,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_generic() {
@@ -452,7 +452,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_gftType_gftReturnType() {
@@ -499,8 +499,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
-    _assertIsDeclarationName(variable.name);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_namedGet() {
@@ -525,7 +524,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_namedOperator() {
@@ -550,7 +549,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_namedOperator_withAssignment() {
@@ -575,7 +574,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
     expect(variable.initializer, isNotNull);
   }
 
@@ -601,7 +600,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_field_nameKeyword() {
@@ -651,7 +650,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseClassMember_finalAndCovariantLateWithInitializer() {
@@ -677,7 +676,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNotNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.body, isNotNull);
     expect(method.parameters, isNull);
@@ -695,8 +694,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNotNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
-    _assertIsDeclarationName(method.name);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.body, isNotNull);
     expect(method.parameters, isNull);
@@ -712,8 +710,7 @@
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNotNull);
     expect(method.modifierKeyword, isNull);
-    expect(method.name, isNotNull);
-    _assertIsDeclarationName(method.name);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -737,7 +734,7 @@
     expect(method.documentationComment, isNull);
     expect(method.externalKeyword, isNotNull);
     expect(method.modifierKeyword, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -757,7 +754,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     expect(method.parameters, isNotNull);
@@ -776,7 +773,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
 
@@ -802,7 +799,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     expect(method.parameters, isNotNull);
@@ -821,11 +818,11 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect((method.returnType as NamedType).name.name, 'T');
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     TypeParameter tp = method.typeParameters!.typeParameters[0];
-    expect(tp.name.name, 'T');
+    expect(tp.name2.lexeme, 'T');
     expect(tp.extendsKeyword, isNotNull);
     expect((tp.bound as NamedType).name.name, 'num');
     expect(method.parameters, isNotNull);
@@ -855,7 +852,7 @@
       expect((typeArguments[1] as NamedType).name.name, 'T');
     }
 
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     expect(method.parameters, isNotNull);
@@ -875,7 +872,7 @@
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
     expect((method.returnType as NamedType).name.name, 'T');
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     expect(method.parameters, isNotNull);
@@ -894,7 +891,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNotNull);
     expect(method.parameters, isNotNull);
@@ -913,7 +910,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -934,7 +931,7 @@
     expect(method.modifierKeyword, isNotNull);
     expect(method.propertyKeyword, isNotNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNull);
@@ -953,7 +950,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -972,7 +969,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1065,7 +1062,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1084,7 +1081,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1103,7 +1100,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1122,8 +1119,8 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
-    expect(method.name.name, 'm');
+    expect(method.name2, isNotNull);
+    expect(method.name2.lexeme, 'm');
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1142,7 +1139,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1161,7 +1158,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1182,7 +1179,7 @@
     expect(method.modifierKeyword, isNotNull);
     expect(method.propertyKeyword, isNotNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1201,7 +1198,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1220,7 +1217,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1237,7 +1234,7 @@
     expect(method.modifierKeyword, isNotNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1253,7 +1250,7 @@
     expect(method.modifierKeyword, isNotNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1272,7 +1269,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1291,7 +1288,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isGenericFunctionType);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1314,7 +1311,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name.name, '>>>');
+    expect(method.name2.lexeme, '>>>');
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1351,7 +1348,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1370,7 +1367,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1389,7 +1386,7 @@
     expect(method.modifierKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name.name, '<');
+    expect(method.name2.lexeme, '<');
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -1406,8 +1403,7 @@
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
     expect(constructor.returnType.name, 'C');
     expect(constructor.period, isNull);
-    expect(constructor.name, isNull);
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator!.type, TokenType.EQ);
@@ -1429,7 +1425,7 @@
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
     expect(constructor.returnType.name, 'C');
     expect(constructor.period, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator, isNull);
@@ -1455,9 +1451,8 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword!.keyword, Keyword.FACTORY);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
     expect(constructor.period, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator!.type, TokenType.EQ);
@@ -1504,10 +1499,8 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNotNull);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
     expect(constructor.period!.type, TokenType.PERIOD);
-    expect(constructor.name!.name, 'foo');
-    _assertIsDeclarationName(constructor.name!);
+    expect(constructor.name2!.lexeme, 'foo');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator, isNull);
@@ -1560,10 +1553,8 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
     expect(constructor.period!.type, TokenType.PERIOD);
-    expect(constructor.name!.name, 'foo');
-    _assertIsDeclarationName(constructor.name!);
+    expect(constructor.name2!.lexeme, 'foo');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator, isNull);
@@ -1614,8 +1605,7 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator!.lexeme, ':');
@@ -1638,8 +1628,7 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator!.lexeme, ':');
@@ -1660,9 +1649,8 @@
     expect(constructor.constKeyword, isNull);
     expect(constructor.factoryKeyword, isNull);
     expect(constructor.returnType.name, 'C');
-    _assertIsDeclarationName(constructor.returnType as SimpleIdentifier, false);
     expect(constructor.period, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, isEmpty);
     expect(constructor.separator, isNull);
@@ -1795,7 +1783,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_external() {
@@ -1878,7 +1866,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_late() {
@@ -1902,7 +1890,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_late_const() {
@@ -1928,7 +1916,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_late_final() {
@@ -1952,7 +1940,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_late_var() {
@@ -1975,7 +1963,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseField_non_abstract() {
@@ -2021,7 +2009,7 @@
     NodeList<VariableDeclaration> variables = list.variables;
     expect(variables, hasLength(1));
     VariableDeclaration variable = variables[0];
-    expect(variable.name, isNotNull);
+    expect(variable.name2, isNotNull);
   }
 
   void test_parseGetter_identifier_colon_issue_36961() {
@@ -2038,7 +2026,7 @@
     expect(constructor.body, isNotNull);
     expect(constructor.documentationComment, isNull);
     expect(constructor.externalKeyword, isNull);
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.returnType, isNotNull);
   }
@@ -2052,7 +2040,7 @@
     expectCommentText(method.documentationComment, '/// Doc');
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.parameters, isNull);
     expect(method.propertyKeyword, isNotNull);
@@ -2068,7 +2056,7 @@
     expectCommentText(method.documentationComment, '/// Doc');
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword!.lexeme, 'static');
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNull);
@@ -2115,7 +2103,7 @@
     expectCommentText(method.documentationComment, '/// Doc');
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNotNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -2132,7 +2120,7 @@
     expectCommentText(method.documentationComment, '/// Doc');
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword, isNull);
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -2149,7 +2137,7 @@
     expectCommentText(method.documentationComment, '/// Doc');
     expect(method.externalKeyword, isNull);
     expect(method.modifierKeyword!.lexeme, 'static');
-    expect(method.name, isNotNull);
+    expect(method.name2, isNotNull);
     expect(method.operatorKeyword, isNull);
     expect(method.typeParameters, isNull);
     expect(method.parameters, isNotNull);
@@ -2169,11 +2157,6 @@
     expectCommentText(parameter.documentationComment, '/// Doc');
   }
 
-  /// Assert that the given [name] is in declaration context.
-  void _assertIsDeclarationName(SimpleIdentifier name, [bool expected = true]) {
-    expect(name.inDeclarationContext(), expected);
-  }
-
   void _parseClassMember_method_native() {
     createParser('m() native "str";');
     var method = parser.parseClassMember('C') as MethodDeclaration;
diff --git a/pkg/analyzer/test/generated/collection_literal_parser_test.dart b/pkg/analyzer/test/generated/collection_literal_parser_test.dart
index 7e39201..3c171bb 100644
--- a/pkg/analyzer/test/generated/collection_literal_parser_test.dart
+++ b/pkg/analyzer/test/generated/collection_literal_parser_test.dart
@@ -48,7 +48,7 @@
     expect(second.rightParenthesis.lexeme, ')');
     var forLoopParts = second.forLoopParts as ForEachPartsWithDeclaration;
     DeclaredIdentifier forLoopVar = forLoopParts.loopVariable;
-    expect(forLoopVar.identifier.name, 'x');
+    expect(forLoopVar.name.lexeme, 'x');
     expect(forLoopParts.inKeyword, isNotNull);
     var iterable = forLoopParts.iterable as SimpleIdentifier;
     expect(iterable.name, 'list');
@@ -70,7 +70,7 @@
     expect(second.rightParenthesis.lexeme, ')');
     var forLoopParts = second.forLoopParts as ForEachPartsWithDeclaration;
     DeclaredIdentifier forLoopVar = forLoopParts.loopVariable;
-    expect(forLoopVar.identifier.name, 'x');
+    expect(forLoopVar.name.lexeme, 'x');
     expect(forLoopParts.inKeyword, isNotNull);
     var iterable = forLoopParts.iterable as SimpleIdentifier;
     expect(iterable.name, 'list');
@@ -97,7 +97,7 @@
     expect(second.rightParenthesis.lexeme, ')');
     var forLoopParts = second.forLoopParts as ForPartsWithDeclarations;
     VariableDeclaration forLoopVar = forLoopParts.variables.variables[0];
-    expect(forLoopVar.name.name, 'x');
+    expect(forLoopVar.name2.lexeme, 'x');
     var condition = forLoopParts.condition as BinaryExpression;
     var rightOperand = condition.rightOperand as IntegerLiteral;
     expect(rightOperand.value, 10);
diff --git a/pkg/analyzer/test/generated/element_resolver_test.dart b/pkg/analyzer/test/generated/element_resolver_test.dart
index ae995c2..0642108 100644
--- a/pkg/analyzer/test/generated/element_resolver_test.dart
+++ b/pkg/analyzer/test/generated/element_resolver_test.dart
@@ -35,7 +35,7 @@
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name2.staticElement));
-        expect(annotationElement.enclosingElement2, name1.staticElement);
+        expect(annotationElement.enclosingElement3, name1.staticElement);
         expect(annotationElement.displayName, 'A.named');
         expect(annotationElement.parameters, isEmpty);
       } else {
@@ -61,7 +61,7 @@
       expect(name3.staticElement!.displayName, 'A.named');
       if (annotationElement is ConstructorElement) {
         expect(annotationElement, same(name3.staticElement));
-        expect(annotationElement.enclosingElement2, name2.staticElement);
+        expect(annotationElement.enclosingElement3, name2.staticElement);
         expect(annotationElement.displayName, 'A.named');
         expect(annotationElement.parameters, isEmpty);
       } else {
@@ -87,7 +87,7 @@
       expect(name3.staticElement!.displayName, 'V');
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name3.staticElement));
-        expect(annotationElement.enclosingElement2, name2.staticElement);
+        expect(annotationElement.enclosingElement3, name2.staticElement);
         expect(annotationElement.displayName, 'V');
       } else {
         fail('Expected "annotationElement" is PropertyAccessorElement, '
@@ -110,7 +110,7 @@
       expect(name2.staticElement!.displayName, 'A');
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
-        expect(annotationElement.enclosingElement2, name2.staticElement);
+        expect(annotationElement.enclosingElement3, name2.staticElement);
         expect(annotationElement.displayName, 'A');
         expect(annotationElement.parameters, isEmpty);
       } else {
@@ -135,7 +135,7 @@
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name2.staticElement));
-        expect(annotationElement.enclosingElement2, name1.staticElement);
+        expect(annotationElement.enclosingElement3, name1.staticElement);
         expect(annotationElement.displayName, 'V');
       } else {
         fail('Expected "annotationElement" is PropertyAccessorElement, '
@@ -157,7 +157,7 @@
       expect(name2, isNull);
       expect(name3, isNull);
       if (annotationElement is ConstructorElement) {
-        expect(annotationElement.enclosingElement2, name1.staticElement);
+        expect(annotationElement.enclosingElement3, name1.staticElement);
         expect(annotationElement.displayName, 'A');
         expect(annotationElement.parameters, isEmpty);
       } else {
@@ -179,7 +179,7 @@
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name1.staticElement));
-        expect(annotationElement.enclosingElement2, isCompilationUnitElement);
+        expect(annotationElement.enclosingElement3, isCompilationUnitElement);
         expect(annotationElement.displayName, 'V');
       } else {
         fail('Expected "annotationElement" is PropertyAccessorElement, '
@@ -201,7 +201,7 @@
       expect(name3, isNull);
       if (annotationElement is PropertyAccessorElement) {
         expect(annotationElement, same(name2.staticElement));
-        expect(annotationElement.enclosingElement2, isCompilationUnitElement);
+        expect(annotationElement.enclosingElement3, isCompilationUnitElement);
         expect(annotationElement.displayName, 'V');
       } else {
         fail('Expected "annotationElement" is PropertyAccessorElement, '
diff --git a/pkg/analyzer/test/generated/error_parser_test.dart b/pkg/analyzer/test/generated/error_parser_test.dart
index a8779b3..da49dd5 100644
--- a/pkg/analyzer/test/generated/error_parser_test.dart
+++ b/pkg/analyzer/test/generated/error_parser_test.dart
@@ -852,7 +852,7 @@
     expect(semicolon, isNotNull);
     expect(semicolon.isSynthetic, isTrue);
     ClassDeclaration clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.name, 'A');
+    expect(clazz.name2.lexeme, 'A');
   }
 
   void test_expectedToken_semicolonMissingAfterExpression() {
@@ -888,7 +888,7 @@
     expect(semicolon, isNotNull);
     expect(semicolon.isSynthetic, isTrue);
     ClassDeclaration clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.name, 'A');
+    expect(clazz.name2.lexeme, 'A');
   }
 
   void test_expectedToken_whileMissingInDoStatement() {
@@ -2147,7 +2147,7 @@
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1),
       expectedError(ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, 6, 1)
     ]);
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 
   void test_missingNameForNamedParameter_equals() {
@@ -2159,7 +2159,7 @@
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 6, 1),
       expectedError(ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE, 6, 1)
     ]);
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 
   void test_missingNameForNamedParameter_noDefault() {
@@ -2169,7 +2169,7 @@
     expectNotNullIfNoErrors(parameter);
     listener.assertErrors(
         [expectedError(ParserErrorCode.MISSING_IDENTIFIER, 5, 1)]);
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 
   void test_missingNameInLibraryDirective() {
diff --git a/pkg/analyzer/test/generated/extension_methods_parser_test.dart b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
index 5c2a5c1..3407fe0 100644
--- a/pkg/analyzer/test/generated/extension_methods_parser_test.dart
+++ b/pkg/analyzer/test/generated/extension_methods_parser_test.dart
@@ -29,7 +29,7 @@
         ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'extends');
     expect((extension.extendedType as NamedType).name.name, 'A');
     expect(extension.members, hasLength(0));
@@ -42,7 +42,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'implements');
     expect((extension.extendedType as NamedType).name.name, 'C');
     expect(extension.members, hasLength(0));
@@ -52,7 +52,7 @@
     var unit = parseCompilationUnit('extension E on C<T> { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     var namedType = extension.extendedType as NamedType;
     expect(namedType.name.name, 'C');
@@ -64,7 +64,7 @@
     var unit = parseCompilationUnit('extension E<T> on C<T> { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     var namedType = extension.extendedType as NamedType;
     expect(namedType.name.name, 'C');
@@ -76,7 +76,7 @@
     var unit = parseCompilationUnit('extension<T> on C<T> { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name, isNull);
+    expect(extension.name2, isNull);
     expect(extension.onKeyword.lexeme, 'on');
     var namedType = extension.extendedType as NamedType;
     expect(namedType.name.name, 'C');
@@ -120,7 +120,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, '');
     expect(extension.members, hasLength(0));
@@ -133,7 +133,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, '');
     expect(extension.members, hasLength(0));
@@ -145,7 +145,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, 'C');
     expect(extension.members, hasLength(0));
@@ -159,7 +159,7 @@
     expect(method.externalKeyword, isNull);
     expect(method.propertyKeyword, isNull);
     expect(method.returnType, isNotNull);
-    expect(method.name.name, 'late');
+    expect(method.name2.lexeme, 'late');
     expect(method.functionExpression, isNotNull);
 
     var body = method.functionExpression.body as BlockFunctionBody;
@@ -173,7 +173,7 @@
     var unit = parseCompilationUnit('extension E on C { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, 'C');
     var namedType = extension.extendedType as NamedType;
@@ -188,7 +188,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'extends');
     expect((extension.extendedType as NamedType).name.name, 'C');
     expect(extension.members, hasLength(0));
@@ -200,7 +200,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'implements');
     expect((extension.extendedType as NamedType).name.name, 'C');
     expect(extension.members, hasLength(0));
@@ -210,7 +210,7 @@
     var unit = parseCompilationUnit('extension on C { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name, isNull);
+    expect(extension.name2, isNull);
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, 'C');
     var namedType = extension.extendedType as NamedType;
@@ -236,7 +236,7 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'with');
     expect((extension.extendedType as NamedType).name.name, 'C');
     expect(extension.members, hasLength(0));
@@ -246,7 +246,7 @@
     var unit = parseCompilationUnit('extension E on void { }');
     expect(unit.declarations, hasLength(1));
     var extension = unit.declarations[0] as ExtensionDeclaration;
-    expect(extension.name!.name, 'E');
+    expect(extension.name2!.lexeme, 'E');
     expect(extension.onKeyword.lexeme, 'on');
     expect((extension.extendedType as NamedType).name.name, 'void');
     expect(extension.members, hasLength(0));
diff --git a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
index 64b9988..613e8fc 100644
--- a/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
+++ b/pkg/analyzer/test/generated/formal_parameter_parser_test.dart
@@ -50,7 +50,7 @@
     expect(parameter, isFieldFormalParameter);
     var functionParameter = parameter as FieldFormalParameter;
     expect(functionParameter.type, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNotNull);
@@ -65,7 +65,7 @@
         defaultParameter.parameter as FunctionTypedFormalParameter;
     assertNoErrors();
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.isNamed, isTrue);
@@ -84,7 +84,7 @@
     var functionParameter =
         defaultParameter.parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.isNamed, isTrue);
@@ -103,7 +103,7 @@
     var functionParameter =
         defaultParameter.parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.isOptionalPositional, isTrue);
@@ -120,7 +120,7 @@
             errorCodes: [ParserErrorCode.EXPERIMENT_NOT_ENABLED])
         as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.isRequiredPositional, isTrue);
@@ -163,7 +163,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -181,7 +181,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -199,7 +199,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -220,7 +220,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -239,7 +239,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -257,7 +257,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -278,7 +278,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -297,7 +297,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isGenericFunctionType);
     expect(simpleParameter.isRequired, isTrue);
@@ -315,7 +315,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -334,7 +334,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -352,7 +352,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -373,7 +373,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -391,7 +391,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -409,7 +409,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -435,7 +435,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -453,7 +453,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -470,7 +470,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -491,7 +491,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -511,7 +511,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -529,7 +529,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -546,7 +546,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -566,7 +566,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNotNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -586,7 +586,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -606,7 +606,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -626,7 +626,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -645,7 +645,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isGenericFunctionType);
     expect(simpleParameter.isRequired, isTrue);
@@ -662,7 +662,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -682,7 +682,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -700,7 +700,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -717,7 +717,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -737,7 +737,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -757,7 +757,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -775,7 +775,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isRequired, isTrue);
@@ -792,7 +792,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isOptionalPositional, isTrue);
@@ -813,7 +813,7 @@
         defaultParameter.parameter as SimpleFormalParameter;
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.requiredKeyword, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
     expect(simpleParameter.isNamed, isTrue);
@@ -903,13 +903,13 @@
 
     expect(parameters[0], isSimpleFormalParameter);
     var required = parameters[0] as SimpleFormalParameter;
-    expect(required.identifier, isNull);
+    expect(required.name, isNull);
     expect(required.type, isNamedType);
     expect((required.type as NamedType).name.name, 'A');
 
     expect(parameters[1], isDefaultFormalParameter);
     var named = parameters[1] as DefaultFormalParameter;
-    expect(named.identifier, isNotNull);
+    expect(named.name, isNotNull);
     expect(named.parameter, isSimpleFormalParameter);
     var simple = named.parameter as SimpleFormalParameter;
     expect(simple.type, isNamedType);
@@ -1016,7 +1016,7 @@
     // TODO(danrubel): Investigate and improve recovery of parameter type/name.
     var parameter = list.parameters[0] as SimpleFormalParameter;
     expect(parameter.toSource(), 'io.File ');
-    expect(parameter.identifier!.token.isSynthetic, isTrue);
+    expect(parameter.name!.isSynthetic, isTrue);
     var type = parameter.type as NamedType;
     var typeName = type.name as PrefixedIdentifier;
     expect(typeName.prefix.token.isSynthetic, isFalse);
@@ -1037,7 +1037,7 @@
     // TODO(danrubel): Investigate and improve recovery of parameter type/name.
     var parameter = list.parameters[0] as SimpleFormalParameter;
     expect(parameter.toSource(), 'io. ');
-    expect(parameter.identifier!.token.isSynthetic, isTrue);
+    expect(parameter.name!.isSynthetic, isTrue);
     var type = parameter.type as NamedType;
     var typeName = type.name as PrefixedIdentifier;
     expect(typeName.prefix.token.isSynthetic, isFalse);
@@ -1069,7 +1069,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNotNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1082,7 +1082,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNotNull);
     expect(fieldParameter.type, isNotNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1095,7 +1095,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNotNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1108,7 +1108,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNotNull);
     expect(fieldParameter.type, isNotNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1120,7 +1120,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     FormalParameterList parameterList = fieldParameter.parameters!;
     expect(parameterList, isNotNull);
     expect(parameterList.parameters, hasLength(1));
@@ -1134,7 +1134,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     FormalParameterList parameterList = fieldParameter.parameters!;
     expect(parameterList, isNotNull);
     expect(parameterList.parameters, hasLength(0));
@@ -1153,7 +1153,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1165,7 +1165,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNull);
     expect(fieldParameter.type, isNotNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1177,7 +1177,7 @@
     var fieldParameter = parameter as FieldFormalParameter;
     expect(fieldParameter.keyword, isNotNull);
     expect(fieldParameter.type, isNull);
-    expect(fieldParameter.identifier, isNotNull);
+    expect(fieldParameter.name, isNotNull);
     expect(fieldParameter.parameters, isNull);
   }
 
@@ -1194,7 +1194,7 @@
         defaultParameter.parameter as FunctionTypedFormalParameter;
     assertNoErrors();
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.isNamed, isTrue);
@@ -1211,7 +1211,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1226,7 +1226,7 @@
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.covariantKeyword, isNotNull);
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1240,7 +1240,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNotNull);
@@ -1254,7 +1254,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNotNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1267,7 +1267,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1280,7 +1280,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNotNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1295,7 +1295,7 @@
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.covariantKeyword, isNotNull);
     expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1308,7 +1308,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1321,7 +1321,7 @@
     expect(parameter, isFunctionTypedFormalParameter);
     var functionParameter = parameter as FunctionTypedFormalParameter;
     expect(functionParameter.returnType, isNotNull);
-    expect(functionParameter.identifier, isNotNull);
+    expect(functionParameter.name, isNotNull);
     expect(functionParameter.typeParameters, isNotNull);
     expect(functionParameter.parameters, isNotNull);
     expect(functionParameter.question, isNull);
@@ -1342,7 +1342,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_const_type() {
@@ -1353,7 +1353,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_final_noType() {
@@ -1364,7 +1364,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_final_type() {
@@ -1375,7 +1375,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNotNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_noName() {
@@ -1387,7 +1387,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.identifier, isNull);
+    expect(simpleParameter.name, isNull);
   }
 
   void test_parseNormalFormalParameter_simple_noType() {
@@ -1398,7 +1398,7 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_noType_namedCovariant() {
@@ -1410,7 +1410,7 @@
     expect(simpleParameter.covariantKeyword, isNull);
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 
   void test_parseNormalFormalParameter_simple_type() {
@@ -1421,6 +1421,6 @@
     var simpleParameter = parameter as SimpleFormalParameter;
     expect(simpleParameter.keyword, isNull);
     expect(simpleParameter.type, isNotNull);
-    expect(simpleParameter.identifier, isNotNull);
+    expect(simpleParameter.name, isNotNull);
   }
 }
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 7beae7f..e50a3a7 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -194,7 +194,7 @@
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
-    expect(constructorDeclaration.name!.name, 'new');
+    expect(constructorDeclaration.name2!.lexeme, 'new');
   }
 
   void test_constructor_name_factory() {
@@ -207,7 +207,7 @@
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members[0] as ConstructorDeclaration;
-    expect(constructorDeclaration.name!.name, 'new');
+    expect(constructorDeclaration.name2!.lexeme, 'new');
   }
 
   void test_constructor_tearoff() {
@@ -320,7 +320,7 @@
     var classDeclaration = unit.declarations.single as ClassDeclaration;
     var constructorDeclaration =
         classDeclaration.members.single as ConstructorDeclaration;
-    expect(constructorDeclaration.name!.name, 'new');
+    expect(constructorDeclaration.name2!.lexeme, 'new');
   }
 
   void test_factory_redirection() {
diff --git a/pkg/analyzer/test/generated/nnbd_parser_test.dart b/pkg/analyzer/test/generated/nnbd_parser_test.dart
index 54f27bc..8cf5d0a 100644
--- a/pkg/analyzer/test/generated/nnbd_parser_test.dart
+++ b/pkg/analyzer/test/generated/nnbd_parser_test.dart
@@ -395,7 +395,7 @@
     // Object? o
     var parameter =
         constructor.parameters.parameters.single as SimpleFormalParameter;
-    expect(parameter.identifier!.name, 'o');
+    expect(parameter.name!.lexeme, 'o');
     var type = parameter.type as NamedType;
     expect(type.question!.lexeme, '?');
     expect(type.name.name, 'Object');
@@ -441,7 +441,7 @@
     // Object? o
     var parameter =
         constructor.parameters.parameters.single as SimpleFormalParameter;
-    expect(parameter.identifier!.name, 'o');
+    expect(parameter.name!.lexeme, 'o');
     var type = parameter.type as NamedType;
     expect(type.question!.lexeme, '?');
     expect(type.name.name, 'Object');
@@ -494,7 +494,7 @@
     // Object? o
     var parameter =
         constructor.parameters.parameters.single as SimpleFormalParameter;
-    expect(parameter.identifier!.name, 'o');
+    expect(parameter.name!.lexeme, 'o');
     var type = parameter.type as NamedType;
     expect(type.question!.lexeme, '?');
     expect(type.name.name, 'Object');
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 21ddaaf..28a7fb5 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -1458,7 +1458,7 @@
 ''');
     var x = findNode.namedExpression('arg: true');
     var y = x.staticParameterElement!;
-    expect(y.enclosingElement2, isNotNull);
+    expect(y.enclosingElement3, isNotNull);
     expect(y.declaration, findElement.parameter('arg'));
   }
 
@@ -1471,7 +1471,7 @@
 ''');
     var x = findNode.namedExpression('arg: true');
     var y = x.staticParameterElement!;
-    expect(y.enclosingElement2, isNotNull);
+    expect(y.enclosingElement3, isNotNull);
     expect(y.declaration, findElement.parameter('arg'));
   }
 
diff --git a/pkg/analyzer/test/generated/parser_test_base.dart b/pkg/analyzer/test/generated/parser_test_base.dart
index ef2d196..ccb7205 100644
--- a/pkg/analyzer/test/generated/parser_test_base.dart
+++ b/pkg/analyzer/test/generated/parser_test_base.dart
@@ -14,7 +14,8 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/ast/ast.dart' show CompilationUnitImpl;
+import 'package:analyzer/src/dart/ast/ast.dart'
+    show ClassDeclarationImpl, CompilationUnitImpl;
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart';
@@ -800,22 +801,22 @@
 
   ClassMember? parseClassMemberOrNull(String className) {
     return _run('ClassOrMixinBody', () {
-      astBuilder.classDeclaration = astFactory.classDeclaration(
-        null,
-        null,
-        null,
-        null,
-        null,
-        Token(Keyword.CLASS, 0),
-        astFactory.simpleIdentifier(fasta.StringTokenImpl.fromString(
+      astBuilder.classDeclaration = ClassDeclarationImpl(
+        comment: null,
+        metadata: null,
+        abstractKeyword: null,
+        macroKeyword: null,
+        augmentKeyword: null,
+        classKeyword: Token(Keyword.CLASS, 0),
+        name: astFactory.simpleIdentifier(fasta.StringTokenImpl.fromString(
             TokenType.IDENTIFIER, className, 6)),
-        null,
-        null,
-        null,
-        null,
-        Tokens.openCurlyBracket() /* leftBracket */,
-        <ClassMember>[],
-        Tokens.closeCurlyBracket() /* rightBracket */,
+        typeParameters: null,
+        extendsClause: null,
+        withClause: null,
+        implementsClause: null,
+        leftBracket: Tokens.openCurlyBracket(),
+        members: <ClassMember>[],
+        rightBracket: Tokens.closeCurlyBracket(),
       );
       // TODO(danrubel): disambiguate between class and mixin
       currentToken = fastaParser.parseClassMember(currentToken, className);
diff --git a/pkg/analyzer/test/generated/recovery_parser_test.dart b/pkg/analyzer/test/generated/recovery_parser_test.dart
index 196e3ca..fc3f193 100644
--- a/pkg/analyzer/test/generated/recovery_parser_test.dart
+++ b/pkg/analyzer/test/generated/recovery_parser_test.dart
@@ -389,7 +389,7 @@
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.childEntities.first as ClassDeclaration;
     expect(classDecl, isNotNull);
-    expect(classDecl.name.name, 'foo');
+    expect(classDecl.name2.lexeme, 'foo');
   }
 
   void test_equalityExpression_missing_LHS() {
@@ -500,7 +500,7 @@
     NodeList<VariableDeclaration> vars =
         (fieldDecl as FieldDeclaration).fields.variables;
     expect(vars, hasLength(1));
-    expect(vars[0].name.name, "v");
+    expect(vars[0].name2.lexeme, "v");
   }
 
   void test_functionExpression_named() {
@@ -660,7 +660,7 @@
     NodeList<VariableDeclaration> variables =
         (member as TopLevelVariableDeclaration).variables.variables;
     expect(variables, hasLength(1));
-    SimpleIdentifier name = variables[0].name;
+    final name = variables[0].name2;
     expect(name.isSynthetic, isFalse);
   }
 
@@ -676,7 +676,7 @@
     NodeList<VariableDeclaration> variables =
         (member as TopLevelVariableDeclaration).variables.variables;
     expect(variables, hasLength(1));
-    SimpleIdentifier name = variables[0].name;
+    final name = variables[0].name2;
     expect(name.isSynthetic, isTrue);
   }
 
@@ -692,7 +692,7 @@
     NodeList<VariableDeclaration> variables =
         (member as TopLevelVariableDeclaration).variables.variables;
     expect(variables, hasLength(1));
-    SimpleIdentifier name = variables[0].name;
+    final name = variables[0].name2;
     expect(name.isSynthetic, isTrue);
   }
 
@@ -708,7 +708,7 @@
     NodeList<VariableDeclaration> variables =
         (member as TopLevelVariableDeclaration).variables.variables;
     expect(variables, hasLength(1));
-    SimpleIdentifier name = variables[0].name;
+    final name = variables[0].name2;
     expect(name.isSynthetic, isTrue);
   }
 
@@ -734,7 +734,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isTrue);
+    expect(field.name2.isSynthetic, isTrue);
   }
 
   void test_incompleteField_final() {
@@ -759,7 +759,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isTrue);
+    expect(field.name2.isSynthetic, isTrue);
   }
 
   void test_incompleteField_static() {
@@ -785,7 +785,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isFalse);
+    expect(field.name2.isSynthetic, isFalse);
   }
 
   void test_incompleteField_static2() {
@@ -808,7 +808,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isFalse);
+    expect(field.name2.isSynthetic, isFalse);
   }
 
   void test_incompleteField_type() {
@@ -834,7 +834,7 @@
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
     expect(type, isNull);
-    expect(field.name.name, 'A');
+    expect(field.name2.lexeme, 'A');
   }
 
   void test_incompleteField_var() {
@@ -859,7 +859,7 @@
     NodeList<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.isSynthetic, isTrue);
+    expect(field.name2.isSynthetic, isTrue);
   }
 
   void test_incompleteForEach() {
@@ -964,7 +964,7 @@
     List<VariableDeclaration> fields = fieldList.variables;
     expect(fields, hasLength(1));
     VariableDeclaration field = fields[0];
-    expect(field.name.name, 'f');
+    expect(field.name2.lexeme, 'f');
 // validate the type
     var typeArguments = (fieldList.type as NamedType).typeArguments!;
     expect(typeArguments.arguments, hasLength(1));
@@ -1056,7 +1056,7 @@
     var fields = classDecl.members.first as FieldDeclaration;
     expect(fields.fields.variables, hasLength(1));
     VariableDeclaration field = fields.fields.variables.first;
-    expect(field.name.name, 'g');
+    expect(field.name2.lexeme, 'g');
   }
 
   void test_invalidTypeParameters_super() {
@@ -1099,7 +1099,7 @@
     ]);
     var declaration = unit.declarations[0] as ClassDeclaration;
     var method = declaration.members[0] as ConstructorDeclaration;
-    expect(method.name!.name, 'named');
+    expect(method.name2!.lexeme, 'named');
     expect(method.parameters, isNotNull);
   }
 
@@ -1110,7 +1110,7 @@
         ]);
     var declaration = unit.declarations[0] as ClassDeclaration;
     var constructor = declaration.members[0] as ConstructorDeclaration;
-    expect(constructor.name!.name, 'named');
+    expect(constructor.name2!.lexeme, 'named');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
   }
@@ -1121,7 +1121,7 @@
     ]);
     var declaration = unit.declarations[0] as ClassDeclaration;
     var constructor = declaration.members[0] as ConstructorDeclaration;
-    expect(constructor.name, isNull);
+    expect(constructor.name2, isNull);
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
   }
@@ -1132,7 +1132,7 @@
     ]);
     var declaration = unit.declarations[0] as ClassDeclaration;
     var constructor = declaration.members[0] as ConstructorDeclaration;
-    expect(constructor.name!.name, 'named');
+    expect(constructor.name2!.lexeme, 'named');
     expect(constructor.parameters, isNotNull);
     expect(constructor.parameters.parameters, hasLength(0));
   }
@@ -1145,7 +1145,7 @@
     ]);
     var declaration = unit.declarations[0] as ClassDeclaration;
     var method = declaration.members[0] as ConstructorDeclaration;
-    expect(method.name!.name, 'named');
+    expect(method.name2!.lexeme, 'named');
     expect(method.parameters, isNotNull);
     expect(method.parameters.parameters, hasLength(0));
   }
@@ -1284,7 +1284,7 @@
     expect(members[0], isMethodDeclaration);
     ClassMember member = members[1];
     expect(member, isMethodDeclaration);
-    expect((member as MethodDeclaration).name.name, "foo");
+    expect((member as MethodDeclaration).name2.lexeme, "foo");
   }
 
   void test_missingIdentifier_afterAnnotation() {
@@ -1309,7 +1309,7 @@
       expect(variables, hasLength(1));
       VariableDeclaration variable = variables[0];
       expect(variableList.type.toString(), expectedTypeName);
-      expect(variable.name.name, expectedName);
+      expect(variable.name2.lexeme, expectedName);
       if (expectedSemicolon.isEmpty) {
         expect(declaration.semicolon.isSynthetic, isTrue);
       } else {
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 86cbe1c..1f4018b 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -74,7 +74,7 @@
 
     var constructor = findElement.unnamedConstructor('C');
     var x = findElement.localFunction('x');
-    expect(x.enclosingElement2, constructor);
+    expect(x.enclosingElement3, constructor);
   }
 }
 
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index b382aee..6205e1d 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:test/test.dart';
 
 import '../src/dart/resolution/context_collection_resolution.dart';
@@ -212,6 +213,10 @@
       return;
     }
 
+    if (node is DeclaredSimpleIdentifier) {
+      return;
+    }
+
     var staticType = node.staticType;
     if (staticType != null &&
         staticType.isDynamic &&
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index a8ba8f8..01b61ea 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -108,10 +108,10 @@
 class C<@Foo.bar(const [], const [1], const{"":r""}, 0xFF + 2, .3, 4.5) T> {}
 ''');
     var clazz = unit.declarations[0] as ClassDeclaration;
-    expect(clazz.name.name, 'C');
+    expect(clazz.name2.lexeme, 'C');
     expect(clazz.typeParameters!.typeParameters, hasLength(1));
     TypeParameter typeParameter = clazz.typeParameters!.typeParameters[0];
-    expect(typeParameter.name.name, 'T');
+    expect(typeParameter.name2.lexeme, 'T');
     expect(typeParameter.metadata, hasLength(1));
     Annotation metadata = typeParameter.metadata[0];
     expect(metadata.name.name, 'Foo.bar');
@@ -154,7 +154,7 @@
     expect(method.parameters!.parameters, hasLength(1));
     var parameter =
         method.parameters!.parameters[0] as FunctionTypedFormalParameter;
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 
   void test_parseAnnotation_n1() {
@@ -1578,13 +1578,13 @@
 
     expect(parameters[0], isSimpleFormalParameter);
     var parameter = parameters[0] as SimpleFormalParameter;
-    expect(parameter.identifier, isNull);
+    expect(parameter.name, isNull);
     expect(parameter.type, isNamedType);
     expect((parameter.type as NamedType).name.name, 'int');
 
     expect(parameters[1], isSimpleFormalParameter);
     parameter = parameters[1] as SimpleFormalParameter;
-    expect(parameter.identifier, isNull);
+    expect(parameter.name, isNull);
     expect(parameter.type, isNamedType);
     expect((parameter.type as NamedType).name.name, 'int');
   }
@@ -1663,15 +1663,15 @@
 
     expect(parameters[0], isSimpleFormalParameter);
     var parameter = parameters[0] as SimpleFormalParameter;
-    expect(parameter.identifier, isNotNull);
-    expect(parameter.identifier!.name, 's');
+    expect(parameter.name, isNotNull);
+    expect(parameter.name!.lexeme, 's');
     expect(parameter.type, isNamedType);
     expect((parameter.type as NamedType).name.name, 'String');
 
     expect(parameters[1], isSimpleFormalParameter);
     parameter = parameters[1] as SimpleFormalParameter;
-    expect(parameter.identifier, isNotNull);
-    expect(parameter.identifier!.name, 'i');
+    expect(parameter.name, isNotNull);
+    expect(parameter.name!.lexeme, 'i');
     expect(parameter.type, isNamedType);
     expect((parameter.type as NamedType).name.name, 'int');
   }
@@ -1849,7 +1849,7 @@
     assertNoErrors();
     expect(parameter.bound, isGenericFunctionType);
     expect(parameter.extendsKeyword, isNotNull);
-    expect(parameter.name, isNotNull);
+    expect(parameter.name2, isNotNull);
   }
 
   void test_parseTypeParameter_bounded_functionType_return() {
@@ -1859,7 +1859,7 @@
     assertNoErrors();
     expect(parameter.bound, isGenericFunctionType);
     expect(parameter.extendsKeyword, isNotNull);
-    expect(parameter.name, isNotNull);
+    expect(parameter.name2, isNotNull);
   }
 
   void test_parseTypeParameter_bounded_generic() {
@@ -1869,7 +1869,7 @@
     assertNoErrors();
     expect(parameter.bound, isNamedType);
     expect(parameter.extendsKeyword, isNotNull);
-    expect(parameter.name, isNotNull);
+    expect(parameter.name2, isNotNull);
   }
 
   void test_parseTypeParameter_bounded_simple() {
@@ -1879,7 +1879,7 @@
     assertNoErrors();
     expect(parameter.bound, isNamedType);
     expect(parameter.extendsKeyword, isNotNull);
-    expect(parameter.name, isNotNull);
+    expect(parameter.name2, isNotNull);
   }
 
   void test_parseTypeParameter_simple() {
@@ -1889,7 +1889,7 @@
     assertNoErrors();
     expect(parameter.bound, isNull);
     expect(parameter.extendsKeyword, isNull);
-    expect(parameter.name, isNotNull);
+    expect(parameter.name2, isNotNull);
   }
 
   void test_parseTypeParameterList_multiple() {
@@ -1921,7 +1921,7 @@
     expect(parameterList.rightBracket, isNotNull);
     expect(parameterList.typeParameters, hasLength(1));
     TypeParameter typeParameter = parameterList.typeParameters[0];
-    expect(typeParameter.name.name, 'A');
+    expect(typeParameter.name2.lexeme, 'A');
     var bound = typeParameter.bound as NamedType;
     expect(bound.name.name, 'B');
     var typeArguments = bound.typeArguments!;
@@ -1955,7 +1955,7 @@
     VariableDeclaration declaration = parseVariableDeclaration('var a = b;');
     expectNotNullIfNoErrors(declaration);
     assertNoErrors();
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.equals, isNotNull);
     expect(declaration.initializer, isNotNull);
   }
@@ -2040,7 +2040,7 @@
     VariableDeclaration declaration = parseVariableDeclaration('var a;');
     expectNotNullIfNoErrors(declaration);
     assertNoErrors();
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.equals, isNull);
     expect(declaration.initializer, isNull);
   }
@@ -2072,11 +2072,11 @@
       expectedError(ScannerErrorCode.EXPECTED_TOKEN, 23, 1),
     ]);
     var typeAlias = unit.declarations[0] as GenericTypeAlias;
-    expect(typeAlias.name.toSource(), 'K');
+    expect(typeAlias.name2.lexeme, 'K');
     var functionType = typeAlias.functionType!;
     expect(functionType.parameters.parameters, hasLength(1));
     var parameter = functionType.parameters.parameters[0];
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 
   void test_typeAlias_parameter_missingIdentifier_37733() {
@@ -2086,10 +2086,10 @@
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 19, 1),
     ]);
     var typeAlias = unit.declarations[0] as GenericTypeAlias;
-    expect(typeAlias.name.toSource(), 'T');
+    expect(typeAlias.name2.lexeme, 'T');
     var functionType = typeAlias.functionType!;
     expect(functionType.parameters.parameters, hasLength(1));
     var parameter = functionType.parameters.parameters[0];
-    expect(parameter.identifier, isNotNull);
+    expect(parameter.name, isNotNull);
   }
 }
diff --git a/pkg/analyzer/test/generated/statement_parser_test.dart b/pkg/analyzer/test/generated/statement_parser_test.dart
index ec1236b..f358b2a 100644
--- a/pkg/analyzer/test/generated/statement_parser_test.dart
+++ b/pkg/analyzer/test/generated/statement_parser_test.dart
@@ -278,7 +278,7 @@
     expect(forStatement.forKeyword, isNotNull);
     expect(forStatement.leftParenthesis, isNotNull);
     var forLoopParts = forStatement.forLoopParts as ForEachPartsWithDeclaration;
-    expect(forLoopParts.loopVariable.identifier.name, 'external');
+    expect(forLoopParts.loopVariable.name.lexeme, 'external');
     expect(forLoopParts.inKeyword, isNotNull);
     expect(forLoopParts.iterable, isNotNull);
     expect(forStatement.rightParenthesis, isNotNull);
@@ -294,7 +294,7 @@
     expect(forStatement.forKeyword, isNotNull);
     expect(forStatement.leftParenthesis, isNotNull);
     var forLoopParts = forStatement.forLoopParts as ForEachPartsWithDeclaration;
-    expect(forLoopParts.loopVariable.identifier.name, 'required');
+    expect(forLoopParts.loopVariable.name.lexeme, 'required');
     expect(forLoopParts.inKeyword, isNotNull);
     expect(forLoopParts.iterable, isNotNull);
     expect(forStatement.rightParenthesis, isNotNull);
@@ -1072,7 +1072,7 @@
     assertNoErrors();
     List<VariableDeclaration> variables = statement.variables.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'Function');
+    expect(variables[0].name2.lexeme, 'Function');
   }
 
   void test_parseNonLabeledStatement_variableDeclaration_gftType() {
@@ -1082,7 +1082,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1095,7 +1095,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1107,7 +1107,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1119,7 +1119,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1131,7 +1131,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1142,7 +1142,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1154,7 +1154,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     expect(variableList.type, isGenericFunctionType);
   }
 
@@ -1164,7 +1164,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     var typeName = variableList.type as NamedType;
     expect(typeName.name.name, 'C');
     expect(typeName.typeArguments!.arguments, hasLength(1));
@@ -1179,7 +1179,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     var typeName = variableList.type as NamedType;
     expect(typeName.name.name, 'C');
     expect(typeName.typeArguments!.arguments, hasLength(1));
@@ -1194,7 +1194,7 @@
     VariableDeclarationList variableList = statement.variables;
     List<VariableDeclaration> variables = variableList.variables;
     expect(variables, hasLength(1));
-    expect(variables[0].name.name, 'v');
+    expect(variables[0].name2.lexeme, 'v');
     var typeName = variableList.type as NamedType;
     expect(typeName.name.name, 'C');
     expect(typeName.typeArguments!.arguments, hasLength(1));
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 8bf7ab3..c9978a9 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
-import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -2670,17 +2669,103 @@
 
   test_genericFunction() async {
     await assertNoErrorsInCode(r'T f<T>(T x) => null;');
-    expectFunctionType('f', 'T Function<T>(T)', typeFormals: '[T]');
-    SimpleIdentifier f = findNode.simple('f');
-    var e = f.staticElement as FunctionElementImpl;
-    FunctionType ft = e.type.instantiate([typeProvider.stringType]);
-    assertType(ft, 'String Function(String)');
+
+    final node = findNode.functionDeclaration('f<T>');
+    assertResolvedNodeText(node, r'''
+FunctionDeclaration
+  returnType: NamedType
+    name: SimpleIdentifier
+      token: T
+      staticElement: T@4
+      staticType: null
+    type: T*
+  name: f
+  functionExpression: FunctionExpression
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          declaredElement: T@4
+      rightBracket: >
+    parameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: SimpleIdentifier
+            token: T
+            staticElement: T@4
+            staticType: null
+          type: T*
+        name: x
+        declaredElement: self::@function::f::@parameter::x
+        declaredElementType: T*
+      rightParenthesis: )
+    body: ExpressionFunctionBody
+      functionDefinition: =>
+      expression: NullLiteral
+        literal: null
+        staticType: Null*
+      semicolon: ;
+    declaredElement: self::@function::f
+    staticType: T* Function<T>(T*)*
+  declaredElement: self::@function::f
+  declaredElementType: T* Function<T>(T*)*
+''');
   }
 
   test_genericFunction_bounds() async {
     await assertNoErrorsInCode(r'T f<T extends num>(T x) => null;');
-    expectFunctionType('f', 'T Function<T extends num>(T)',
-        typeFormals: '[T extends num]');
+
+    final node = findNode.functionDeclaration('f<T');
+    assertResolvedNodeText(node, r'''
+FunctionDeclaration
+  returnType: NamedType
+    name: SimpleIdentifier
+      token: T
+      staticElement: T@4
+      staticType: null
+    type: T*
+  name: f
+  functionExpression: FunctionExpression
+    typeParameters: TypeParameterList
+      leftBracket: <
+      typeParameters
+        TypeParameter
+          name: T
+          extendsKeyword: extends
+          bound: NamedType
+            name: SimpleIdentifier
+              token: num
+              staticElement: dart:core::@class::num
+              staticType: null
+            type: num*
+          declaredElement: T@4
+      rightBracket: >
+    parameters: FormalParameterList
+      leftParenthesis: (
+      parameter: SimpleFormalParameter
+        type: NamedType
+          name: SimpleIdentifier
+            token: T
+            staticElement: T@4
+            staticType: null
+          type: T*
+        name: x
+        declaredElement: self::@function::f::@parameter::x
+        declaredElementType: T*
+      rightParenthesis: )
+    body: ExpressionFunctionBody
+      functionDefinition: =>
+      expression: NullLiteral
+        literal: null
+        staticType: Null*
+      semicolon: ;
+    declaredElement: self::@function::f
+    staticType: T* Function<T extends num*>(T*)*
+  declaredElement: self::@function::f
+  declaredElementType: T* Function<T extends num*>(T*)*
+''');
   }
 
   test_genericFunction_parameter() async {
@@ -2698,11 +2783,40 @@
   static T f<T>(T x) => null;
 }
 ''');
-    expectFunctionType('f', 'T Function<T>(T)', typeFormals: '[T]');
-    SimpleIdentifier f = findNode.simple('f');
-    var e = f.staticElement as MethodElementImpl;
-    FunctionType ft = e.type.instantiate([typeProvider.stringType]);
-    assertType(ft, 'String Function(String)');
+
+    final node = findNode.methodDeclaration('f<T>');
+    assertResolvedNodeText(node, r'''
+MethodDeclaration
+  modifierKeyword: static
+  returnType: NamedType
+    name: SimpleIdentifier
+      token: T
+      staticElement: T@26
+      staticType: null
+    type: T*
+  name: f
+  parameters: FormalParameterList
+    leftParenthesis: (
+    parameter: SimpleFormalParameter
+      type: NamedType
+        name: SimpleIdentifier
+          token: T
+          staticElement: T@26
+          staticType: null
+        type: T*
+      name: x
+      declaredElement: self::@class::C::@method::f::@parameter::x
+      declaredElementType: T*
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: NullLiteral
+      literal: null
+      staticType: Null*
+    semicolon: ;
+  declaredElement: self::@class::C::@method::f
+  declaredElementType: T* Function<T>(T*)*
+''');
   }
 
   test_genericFunction_typedef() async {
@@ -3201,15 +3315,42 @@
   T f<T>(T x) => null;
 }
 class D extends C {
-  T f<T>(T x) => null; // from D
+  T f<T>(T y) => null;
 }
 ''');
-    expectFunctionType('f<T>(T x) => null; // from D', 'T Function<T>(T)',
-        typeFormals: '[T]');
-    SimpleIdentifier f = findNode.simple('f<T>(T x) => null; // from D');
-    var e = f.staticElement as MethodElementImpl;
-    FunctionType ft = e.type.instantiate([typeProvider.stringType]);
-    assertType(ft, 'String Function(String)');
+
+    final node = findNode.methodDeclaration('f<T>(T y)');
+    assertResolvedNodeText(node, r'''
+MethodDeclaration
+  returnType: NamedType
+    name: SimpleIdentifier
+      token: T
+      staticElement: T@61
+      staticType: null
+    type: T*
+  name: f
+  parameters: FormalParameterList
+    leftParenthesis: (
+    parameter: SimpleFormalParameter
+      type: NamedType
+        name: SimpleIdentifier
+          token: T
+          staticElement: T@61
+          staticType: null
+        type: T*
+      name: y
+      declaredElement: self::@class::D::@method::f::@parameter::y
+      declaredElementType: T*
+    rightParenthesis: )
+  body: ExpressionFunctionBody
+    functionDefinition: =>
+    expression: NullLiteral
+      literal: null
+      staticType: Null*
+    semicolon: ;
+  declaredElement: self::@class::D::@method::f
+  declaredElementType: T* Function<T>(T*)*
+''');
   }
 
   test_genericMethod_override_bounds() async {
diff --git a/pkg/analyzer/test/generated/top_level_parser_test.dart b/pkg/analyzer/test/generated/top_level_parser_test.dart
index f20c303..a628cb6 100644
--- a/pkg/analyzer/test/generated/top_level_parser_test.dart
+++ b/pkg/analyzer/test/generated/top_level_parser_test.dart
@@ -119,7 +119,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -138,8 +138,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    _assertIsDeclarationName(declaration.name);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -158,7 +157,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -177,7 +176,7 @@
     expect(declaration.implementsClause, isNotNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -193,7 +192,7 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.abstractKeyword, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.typeParameters, isNull);
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.withClause, isNotNull);
@@ -213,7 +212,7 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.abstractKeyword, isNull);
     expect(declaration.classKeyword, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.typeParameters, isNull);
     expect(declaration.extendsClause, isNotNull);
     expect(declaration.withClause, isNotNull);
@@ -236,7 +235,7 @@
     expect(declaration.implementsClause, isNotNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -378,7 +377,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(1));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -392,8 +391,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
-    _assertIsDeclarationName(typeAlias.name);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.implementsClause, isNotNull);
@@ -410,7 +408,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.withClause, isNotNull);
     expect(typeAlias.withClause.withKeyword, isNotNull);
@@ -432,14 +430,11 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.classKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
-    _assertIsDeclarationName(declaration.name);
+    expect(declaration.name2, isNotNull);
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNotNull);
     expect(declaration.typeParameters!.typeParameters, hasLength(1));
-    _assertIsDeclarationName(
-        declaration.typeParameters!.typeParameters[0].name);
   }
 
   void test_parseClassDeclaration_typeParameters_extends_void() {
@@ -657,7 +652,7 @@
     assertNoErrors();
     expect(member, isClassDeclaration);
     var declaration = member as ClassDeclaration;
-    expect(declaration.name.name, "A");
+    expect(declaration.name2.lexeme, "A");
     expect(declaration.members, hasLength(0));
   }
 
@@ -668,7 +663,7 @@
     assertNoErrors();
     expect(member, isClassTypeAlias);
     var declaration = member as ClassTypeAlias;
-    expect(declaration.name.name, "A");
+    expect(declaration.name2.lexeme, "A");
     expect(declaration.abstractKeyword, isNotNull);
   }
 
@@ -682,7 +677,6 @@
     expect(declaration.semicolon, isNotNull);
     expect(declaration.variables, isNotNull);
     expect(declaration.variables.keyword!.lexeme, 'const');
-    _assertIsDeclarationName(declaration.variables.variables[0].name);
   }
 
   void test_parseCompilationUnitMember_expressionFunctionBody_tokens() {
@@ -691,7 +685,6 @@
     var body = f.functionExpression.body as ExpressionFunctionBody;
     expect(body.functionDefinition.lexeme, '=>');
     expect(body.semicolon!.lexeme, ';');
-    _assertIsDeclarationName(f.name);
   }
 
   void test_parseCompilationUnitMember_finalVariable() {
@@ -837,7 +830,6 @@
     expect(declaration.externalKeyword, isNotNull);
     expect(declaration.functionExpression, isNotNull);
     expect(declaration.propertyKeyword, isNotNull);
-    _assertIsDeclarationName(declaration.name);
   }
 
   void test_parseCompilationUnitMember_getter_external_type() {
@@ -907,7 +899,6 @@
     var declaration = member as FunctionDeclaration;
     expect(declaration.functionExpression, isNotNull);
     expect(declaration.propertyKeyword, isNotNull);
-    _assertIsDeclarationName(declaration.name);
   }
 
   void test_parseCompilationUnitMember_setter_type() {
@@ -930,8 +921,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name.name, "C");
-    _assertIsDeclarationName(typeAlias.name);
+    expect(typeAlias.name2.lexeme, "C");
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNotNull);
@@ -949,7 +939,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name.name, "C");
+    expect(typeAlias.name2.lexeme, "C");
     expect(typeAlias.typeParameters!.typeParameters, hasLength(1));
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
@@ -967,7 +957,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name.name, "C");
+    expect(typeAlias.name2.lexeme, "C");
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
@@ -985,7 +975,7 @@
     expect(member, isClassTypeAlias);
     var typeAlias = member as ClassTypeAlias;
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name.name, "C");
+    expect(typeAlias.name2.lexeme, "C");
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.equals, isNotNull);
     expect(typeAlias.abstractKeyword, isNull);
@@ -1002,9 +992,8 @@
     assertNoErrors();
     expect(member, TypeMatcher<FunctionTypeAlias>());
     var typeAlias = member as FunctionTypeAlias;
-    expect(typeAlias.name.name, "F");
+    expect(typeAlias.name2.lexeme, "F");
     expect(typeAlias.parameters.parameters, hasLength(0));
-    _assertIsDeclarationName(typeAlias.name);
   }
 
   void test_parseCompilationUnitMember_typedef_withDocComment() {
@@ -1024,7 +1013,6 @@
     expect(declaration.variables, isNotNull);
     expect(declaration.variables.type, isNotNull);
     expect(declaration.variables.keyword, isNull);
-    _assertIsDeclarationName(declaration.variables.variables[0].name);
   }
 
   void test_parseCompilationUnitMember_variable() {
@@ -1317,7 +1305,7 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.constants, hasLength(1));
     expect(declaration.rightBracket, isNotNull);
   }
@@ -1330,7 +1318,7 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.constants, hasLength(1));
     expect(declaration.rightBracket, isNotNull);
   }
@@ -1343,7 +1331,7 @@
     expect(declaration.documentationComment, isNull);
     expect(declaration.enumKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     expect(declaration.constants, hasLength(2));
     expect(declaration.rightBracket, isNotNull);
   }
@@ -1468,7 +1456,7 @@
     assertNoErrors();
     expectCommentText(declaration.documentationComment, '/// Doc');
     expect((declaration.returnType as NamedType).name.name, 'T');
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     FunctionExpression expression = declaration.functionExpression;
     expect(expression, isNotNull);
     expect(expression.body, isNotNull);
@@ -1484,7 +1472,7 @@
     assertNoErrors();
     expectCommentText(declaration.documentationComment, '/// Doc');
     expect((declaration.returnType as NamedType).name.name, 'T');
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     FunctionExpression expression = declaration.functionExpression;
     expect(expression, isNotNull);
     expect(expression.body, isNotNull);
@@ -1500,7 +1488,7 @@
     assertNoErrors();
     expectCommentText(declaration.documentationComment, '/// Doc');
     expect((declaration.returnType as NamedType).name.name, 'T');
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     FunctionExpression expression = declaration.functionExpression;
     expect(expression, isNotNull);
     expect(expression.body, isNotNull);
@@ -1517,7 +1505,7 @@
     assertNoErrors();
     expect(declaration.documentationComment, isNull);
     expect((declaration.returnType as NamedType).name.name, 'T');
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     FunctionExpression expression = declaration.functionExpression;
     expect(expression, isNotNull);
     expect(expression.body, isNotNull);
@@ -1578,7 +1566,7 @@
     assertNoErrors();
     expectCommentText(declaration.documentationComment, '/// Doc');
     expect((declaration.returnType as NamedType).name.name, 'T');
-    expect(declaration.name, isNotNull);
+    expect(declaration.name2, isNotNull);
     FunctionExpression expression = declaration.functionExpression;
     expect(expression, isNotNull);
     expect(expression.body, isNotNull);
@@ -1592,8 +1580,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters, isNull);
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
@@ -1605,8 +1593,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(1));
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
@@ -1620,8 +1608,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(1));
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
@@ -1633,8 +1621,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
@@ -1648,8 +1636,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
@@ -1661,8 +1649,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     TypeParameter typeParam = alias.typeParameters!.typeParameters[2];
     var type = typeParam.bound as NamedType;
@@ -1678,8 +1666,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     TypeParameter typeParam = alias.typeParameters!.typeParameters[2];
     var type = typeParam.bound as NamedType;
@@ -1696,8 +1684,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     TypeParameter typeParam = alias.typeParameters!.typeParameters[2];
     var type = typeParam.bound as NamedType;
@@ -1714,8 +1702,8 @@
     var alias = parseFullCompilationUnitMember() as GenericTypeAlias;
     expect(alias, isNotNull);
     assertNoErrors();
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters!.typeParameters, hasLength(3));
     TypeParameter typeParam = alias.typeParameters!.typeParameters[2];
     var type = typeParam.bound as NamedType;
@@ -1733,11 +1721,11 @@
     assertErrors(errors: [
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 11, 1),
     ]);
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
     expect(alias.typeParameters!.typeParameters.length, 1);
-    expect(alias.typeParameters!.typeParameters.single.name.name, '');
+    expect(alias.typeParameters!.typeParameters.single.name2.lexeme, '');
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
     expect(alias.semicolon, isNotNull);
@@ -1751,12 +1739,11 @@
     assertErrors(errors: [
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 10, 2),
     ]);
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
     expect(alias.typeParameters!.typeParameters.length, 1);
-    expect(alias.typeParameters!.typeParameters.single.name.name, '');
+    expect(alias.typeParameters!.typeParameters.single.name2.lexeme, '');
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
     expect(alias.semicolon, isNotNull);
@@ -1770,12 +1757,11 @@
     assertErrors(errors: [
       expectedError(ParserErrorCode.MISSING_IDENTIFIER, 10, 1),
     ]);
-    expect(alias.name, isNotNull);
-    expect(alias.name.name, 'F');
-    expect(alias.name.name, 'F');
+    expect(alias.name2, isNotNull);
+    expect(alias.name2.lexeme, 'F');
     expect(alias.typeParameters, isNotNull);
     expect(alias.typeParameters!.typeParameters.length, 1);
-    expect(alias.typeParameters!.typeParameters.single.name.name, '');
+    expect(alias.typeParameters!.typeParameters.single.name2.lexeme, '');
     expect(alias.equals, isNotNull);
     expect(alias.functionType, isNotNull);
     expect(alias.semicolon, isNotNull);
@@ -1933,7 +1919,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -1955,7 +1941,7 @@
     expect(interfaces[0].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -1979,7 +1965,7 @@
     expect(interfaces[1].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -1998,7 +1984,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -2020,7 +2006,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -2044,7 +2030,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -2071,7 +2057,7 @@
     expect(interfaces[0].typeArguments, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(0));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -2094,7 +2080,7 @@
     expect(declaration.implementsClause, isNull);
     expect(declaration.mixinKeyword, isNotNull);
     expect(declaration.leftBracket, isNotNull);
-    expect(declaration.name.name, 'A');
+    expect(declaration.name2.lexeme, 'A');
     expect(declaration.members, hasLength(4));
     expect(declaration.rightBracket, isNotNull);
     expect(declaration.typeParameters, isNull);
@@ -2223,7 +2209,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2236,7 +2222,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2249,7 +2235,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2262,7 +2248,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2275,7 +2261,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2288,7 +2274,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.parameters, isNotNull);
     expect(typeAlias.returnType, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
@@ -2301,7 +2287,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2317,7 +2303,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2333,7 +2319,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2349,7 +2335,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2365,7 +2351,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2381,7 +2367,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2397,7 +2383,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2414,7 +2400,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2430,7 +2416,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2446,7 +2432,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2462,7 +2448,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNotNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2478,7 +2464,7 @@
     expect(typeAlias, isNotNull);
     assertNoErrors();
     expect(typeAlias.typedefKeyword, isNotNull);
-    expect(typeAlias.name, isNotNull);
+    expect(typeAlias.name2, isNotNull);
     expect(typeAlias.typeParameters, isNull);
     expect(typeAlias.semicolon, isNotNull);
     var functionType = typeAlias.functionType as GenericFunctionType;
@@ -2504,9 +2490,4 @@
     var typeVariable = classDeclaration.typeParameters!.typeParameters[0];
     expectCommentText(typeVariable.documentationComment, '/// Doc');
   }
-
-  /// Assert that the given [name] is in declaration context.
-  void _assertIsDeclarationName(SimpleIdentifier name) {
-    expect(name.inDeclarationContext(), isTrue);
-  }
 }
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 183e638..13d6e07 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -450,7 +450,6 @@
         (node) => node.documentationComment!,
         (node) => node.extendsClause!,
         (node) => node.implementsClause!,
-        (node) => node.name,
         (node) => node.typeParameters!,
         (node) => node.withClause!,
       ],
@@ -477,7 +476,6 @@
         (node) => node.documentationComment!,
         (node) => node.superclass,
         (node) => node.implementsClause!,
-        (node) => node.name,
         (node) => node.typeParameters!,
         (node) => node.withClause,
       ],
@@ -566,7 +564,6 @@
       source: findNode.constructor('B.named'),
       childAccessors: [
         (node) => node.body,
-        (node) => node.name!,
         (node) => node.parameters,
         (node) => node.returnType,
       ],
@@ -657,7 +654,6 @@
       destination: findNode.declaredIdentifier('i in'),
       source: findNode.declaredIdentifier('j in'),
       childAccessors: [
-        (node) => node.identifier,
         (node) => node.type!,
       ],
     );
@@ -703,13 +699,6 @@
     _assertAnnotatedNode(
       findNode.enumConstantDeclaration('aaa'),
     );
-    _assertReplacementForChildren<EnumConstantDeclaration>(
-      destination: findNode.enumConstantDeclaration('aaa'),
-      source: findNode.enumConstantDeclaration('bbb'),
-      childAccessors: [
-        (node) => node.name,
-      ],
-    );
   }
 
   void test_enumDeclaration() {
@@ -721,7 +710,6 @@
       destination: findNode.enumDeclaration('enum E1'),
       source: findNode.enumDeclaration('enum E2'),
       childAccessors: [
-        (node) => node.name,
         (node) => node.typeParameters!,
         (node) => node.withClause!,
         (node) => node.implementsClause!,
@@ -859,7 +847,6 @@
       destination: findNode.fieldFormalParameter('foo'),
       source: findNode.fieldFormalParameter('bar'),
       childAccessors: [
-        (node) => node.identifier,
         (node) => node.parameters!,
         (node) => node.type!,
         (node) => node.typeParameters!,
@@ -990,7 +977,6 @@
       source: findNode.functionDeclaration('g()'),
       childAccessors: [
         (node) => node.functionExpression,
-        (node) => node.name,
         (node) => node.returnType!,
       ],
     );
@@ -1064,7 +1050,6 @@
       destination: findNode.functionTypeAlias('int F'),
       source: findNode.functionTypeAlias('double G'),
       childAccessors: [
-        (node) => node.name,
         (node) => node.parameters,
         (node) => node.returnType!,
         (node) => node.typeParameters!,
@@ -1088,7 +1073,6 @@
       source: findNode.functionTypedFormalParameter('b<U>'),
       childAccessors: [
         (node) => node.returnType!,
-        (node) => node.identifier,
         (node) => node.typeParameters!,
         (node) => node.parameters,
       ],
@@ -1355,7 +1339,6 @@
       source: findNode.methodDeclaration('bar'),
       childAccessors: [
         (node) => node.returnType!,
-        (node) => node.name,
         (node) => node.typeParameters!,
         (node) => node.parameters!,
         (node) => node.body,
@@ -1626,7 +1609,6 @@
       source: findNode.simpleFormalParameter('int b'),
       childAccessors: [
         (node) => node.type!,
-        (node) => node.identifier!,
       ],
     );
   }
@@ -1678,7 +1660,6 @@
       source: findNode.superFormalParameter('a2'),
       childAccessors: [
         (node) => node.type!,
-        (node) => node.identifier,
       ],
     );
   }
@@ -1699,7 +1680,6 @@
       source: findNode.superFormalParameter('bar2'),
       childAccessors: [
         (node) => node.type!,
-        (node) => node.identifier,
         (node) => node.typeParameters!,
         (node) => node.parameters!,
       ],
@@ -1868,7 +1848,6 @@
       destination: findNode.typeParameter('T extends'),
       source: findNode.typeParameter('U extends'),
       childAccessors: [
-        (node) => node.name,
         (node) => node.bound!,
       ],
     );
@@ -1897,7 +1876,6 @@
       destination: findNode.variableDeclaration('a = 0'),
       source: findNode.variableDeclaration('b = 1'),
       childAccessors: [
-        (node) => node.name,
         (node) => node.initializer!,
       ],
     );
diff --git a/pkg/analyzer/test/generated/variance_parser_test.dart b/pkg/analyzer/test/generated/variance_parser_test.dart
index 37c8af3..358a867 100644
--- a/pkg/analyzer/test/generated/variance_parser_test.dart
+++ b/pkg/analyzer/test/generated/variance_parser_test.dart
@@ -64,14 +64,14 @@
     var unit = parseCompilationUnit('class A<in T, inout U, out V, W> { }');
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.name, 'A');
+    expect(classDecl.name2.lexeme, 'A');
 
     var typeParameters = classDecl.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(4));
-    expect(typeParameters.typeParameters[0].name.name, 'T');
-    expect(typeParameters.typeParameters[1].name.name, 'U');
-    expect(typeParameters.typeParameters[2].name.name, 'V');
-    expect(typeParameters.typeParameters[3].name.name, 'W');
+    expect(typeParameters.typeParameters[0].name2.lexeme, 'T');
+    expect(typeParameters.typeParameters[1].name2.lexeme, 'U');
+    expect(typeParameters.typeParameters[2].name2.lexeme, 'V');
+    expect(typeParameters.typeParameters[3].name2.lexeme, 'W');
 
     var typeParameterImplList = typeParameters.typeParameters;
     expect((typeParameterImplList[0] as TypeParameterImpl).varianceKeyword,
@@ -100,22 +100,22 @@
     ]);
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.name, 'A');
+    expect(classDecl.name2.lexeme, 'A');
 
     var typeParameters = classDecl.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
-    expect(typeParameters.typeParameters[0].name.name, 'T');
+    expect(typeParameters.typeParameters[0].name2.lexeme, 'T');
   }
 
   void test_class_enabled_single() {
     var unit = parseCompilationUnit('class A<in T> { }');
     expect(unit.declarations, hasLength(1));
     var classDecl = unit.declarations[0] as ClassDeclaration;
-    expect(classDecl.name.name, 'A');
+    expect(classDecl.name2.lexeme, 'A');
 
     var typeParameters = classDecl.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
-    expect(typeParameters.typeParameters[0].name.name, 'T');
+    expect(typeParameters.typeParameters[0].name2.lexeme, 'T');
 
     var typeParameterImpl =
         typeParameters.typeParameters[0] as TypeParameterImpl;
@@ -175,11 +175,11 @@
     var unit = parseCompilationUnit('mixin A<inout T> { }');
     expect(unit.declarations, hasLength(1));
     var mixinDecl = unit.declarations[0] as MixinDeclaration;
-    expect(mixinDecl.name.name, 'A');
+    expect(mixinDecl.name2.lexeme, 'A');
 
     var typeParameters = mixinDecl.typeParameters!;
     expect(typeParameters.typeParameters, hasLength(1));
-    expect(typeParameters.typeParameters[0].name.name, 'T');
+    expect(typeParameters.typeParameters[0].name2.lexeme, 'T');
   }
 
   void test_typedef_disabled() {
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index 8dc008f..e178ad1 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -102,7 +102,7 @@
       for (var name in interface.map.keys) {
         var executable = interface.map[name]!;
 
-        var enclosingClass = executable.enclosingElement2 as ClassElement;
+        var enclosingClass = executable.enclosingElement3 as ClassElement;
         if (enclosingClass.isDartCoreObject) continue;
 
         var id = MemberId.internal(
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 4a00cd4..dca066b 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -733,8 +733,7 @@
     VariableElement vElement;
     {
       var statement = statements[0] as VariableDeclarationStatement;
-      vElement = statement.variables.variables[0].name.staticElement
-          as VariableElement;
+      vElement = statement.variables.variables[0].declaredElement!;
       expect(vElement.type, typeProvider.numType);
     }
 
@@ -978,7 +977,7 @@
           forInvocation.argumentList.arguments[0] as FunctionExpression;
 
       var closureElement = closure.declaredElement as FunctionElementImpl;
-      expect(closureElement.enclosingElement2, same(mainElement));
+      expect(closureElement.enclosingElement3, same(mainElement));
 
       ParameterElement itemElement = closureElement.parameters[0];
       itemElement1 = itemElement;
@@ -1019,7 +1018,7 @@
           forInvocation.argumentList.arguments[0] as FunctionExpression;
 
       var closureElement = closure.declaredElement as FunctionElementImpl;
-      expect(closureElement.enclosingElement2, same(mainElement));
+      expect(closureElement.enclosingElement3, same(mainElement));
 
       ParameterElement itemElement = closureElement.parameters[0];
       expect(itemElement, isNot(same(itemElement1)));
@@ -1062,7 +1061,7 @@
     assertType(closure, 'List<T> Function<T>()');
 
     var closureElement = closure.declaredElement as FunctionElementImpl;
-    expect(closureElement.enclosingElement2, findElement.function('main'));
+    expect(closureElement.enclosingElement3, findElement.function('main'));
     assertType(closureElement.returnType, 'List<T>');
     expect(closureElement.parameters, isEmpty);
 
@@ -1708,7 +1707,7 @@
 
     var methodElement = invocation.methodName.staticElement as MethodElement;
     expect(methodElement.name, 'toString');
-    expect(methodElement.enclosingElement2, same(objectElement));
+    expect(methodElement.enclosingElement3, same(objectElement));
   }
 
   test_error_unresolvedTypeAnnotation() async {
@@ -1729,7 +1728,10 @@
     expect(namedType.typeArguments!.arguments[0].type, typeProvider.intType);
 
     VariableDeclaration vNode = statement.variables.variables[0];
+
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.name.staticType, isNull);
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.declaredElement!.type, isDynamicType);
   }
 
@@ -1791,8 +1793,7 @@
     expect(p.declaredElement, same(constructor.declaredElement!.parameters[0]));
 
     {
-      var type =
-          (p.identifier.staticElement as ParameterElement).type as FunctionType;
+      var type = (p.declaredElement as ParameterElement).type as FunctionType;
       expect(type.returnType, typeProvider.stringType);
 
       expect(type.parameters, hasLength(1));
@@ -1804,7 +1805,6 @@
     {
       var a = p.parameters.parameters[0] as SimpleFormalParameter;
       _assertNamedTypeSimple(a.type!, typeProvider.intType);
-      expect(a.identifier!.staticType, isNull);
     }
   }
 
@@ -1834,15 +1834,11 @@
     var p = parameters[0] as FieldFormalParameter;
     expect(p.declaredElement, same(pElement));
 
-    expect(p.identifier.staticElement, same(pElement));
-    assertTypeNull(p.identifier);
-
     _assertNamedTypeSimple(p.type!, typeProvider.stringType);
 
     {
       var a = p.parameters!.parameters[0] as SimpleFormalParameter;
       _assertNamedTypeSimple(a.type!, typeProvider.intType);
-      expect(a.identifier!.staticType, isNull);
     }
   }
 
@@ -1871,9 +1867,6 @@
     var parameterNode = parameters[0] as FieldFormalParameter;
     expect(parameterNode.type, isNull);
     expect(parameterNode.declaredElement, same(parameterElement));
-
-    expect(parameterNode.identifier.staticElement, same(parameterElement));
-    assertTypeNull(parameterNode.identifier);
   }
 
   test_formalParameter_simple_fieldFormal_typed() async {
@@ -1901,9 +1894,6 @@
     var parameterNode = parameters[0] as FieldFormalParameter;
     _assertNamedTypeSimple(parameterNode.type!, typeProvider.intType);
     expect(parameterNode.declaredElement, same(parameterElement));
-
-    expect(parameterNode.identifier.staticElement, same(parameterElement));
-    assertTypeNull(parameterNode.identifier);
   }
 
   test_forwardingStub_class() async {
@@ -3971,7 +3961,9 @@
     expect(fElement, isNotNull);
     assertType(fElement.type, fTypeString);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticType, isNull);
 
     var fReturnTypeNode = fNode.returnType as NamedType;
@@ -4054,19 +4046,25 @@
 
       TypeParameter tNode = fTypeParameters[0];
       expect(tNode.declaredElement, same(tElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(tNode.name.staticElement, same(tElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(tNode.name.staticType, typeProvider.typeType);
 
       TypeParameter uNode = fTypeParameters[1];
       expect(uNode.declaredElement, same(uElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(uNode.name.staticElement, same(uElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(uNode.name.staticType, typeProvider.typeType);
     }
 
     expect(fElement, isNotNull);
     assertType(fElement.type, 'T Function<T,U>(T, U)');
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticType, fElement.type);
 
     var fReturnTypeNode = fNode.returnType as NamedType;
@@ -4198,7 +4196,9 @@
     expect(fElement, isNotNull);
     assertType(fElement.type, fTypeString);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticType, isNull);
 
     var fReturnTypeNode = fNode.returnType as NamedType;
@@ -4263,7 +4263,9 @@
     expect(fElement, isNotNull);
     assertType(fElement.type, 'Null Function()');
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticType, isNull);
 
     expect(fExpression.declaredElement, same(fElement));
@@ -4290,7 +4292,9 @@
     expect(fElement, isNotNull);
     assertType(fElement.type, fTypeString);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fNode.name.staticType, isNull);
 
     var fReturnTypeNode = fNode.returnType as NamedType;
@@ -4772,7 +4776,10 @@
 
     var main = result.unit.declarations[0] as FunctionDeclaration;
     expect(main.declaredElement, isNotNull);
+
+    // ignore: deprecated_member_use_from_same_package
     expect(main.name.staticElement, isNotNull);
+    // ignore: deprecated_member_use_from_same_package
     expect(main.name.staticType, isNull);
 
     var body = main.functionExpression.body as BlockFunctionBody;
@@ -4783,10 +4790,11 @@
     {
       var statement = statements[0] as VariableDeclarationStatement;
       VariableDeclaration vNode = statement.variables.variables[0];
+      // ignore: deprecated_member_use_from_same_package
       expect(vNode.name.staticType, isNull);
       expect(vNode.initializer!.staticType, intType);
 
-      vElement = vNode.name.staticElement as VariableElement;
+      vElement = vNode.declaredElement!;
       expect(vElement, isNotNull);
       expect(vElement.type, isNotNull);
       expect(vElement.type, intType);
@@ -4929,7 +4937,9 @@
     LocalVariableElement vElement = vNode.declaredElement!;
     expect(vElement.type, typeProvider.intType);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.identifier.staticElement, vElement);
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.identifier.staticType, isNull);
 
     var statement = forBlock.statements[0] as ExpressionStatement;
@@ -4966,7 +4976,9 @@
     expect(vTypeIdentifier.staticElement, typeProvider.numType.element);
     expect(vTypeIdentifier.staticType, isNull);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.identifier.staticElement, vElement);
+    // ignore: deprecated_member_use_from_same_package
     expect(vNode.identifier.staticType, isNull);
 
     var statement = forBlock.statements[0] as ExpressionStatement;
@@ -5133,7 +5145,9 @@
     expect(methodElement, isNotNull);
     assertType(methodElement.type, fTypeString);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(methodDeclaration.name.staticElement, same(methodElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(methodDeclaration.name.staticType, isNull);
 
     var fReturnTypeNode = methodDeclaration.returnType as NamedType;
@@ -6546,7 +6560,10 @@
 
     var main = result.unit.declarations[0] as FunctionDeclaration;
     expect(main.declaredElement, isNotNull);
+
+    // ignore: deprecated_member_use_from_same_package
     expect(main.name.staticElement, isNotNull);
+    // ignore: deprecated_member_use_from_same_package
     expect(main.name.staticType, isNull);
 
     var body = main.functionExpression.body as BlockFunctionBody;
@@ -6556,8 +6573,7 @@
     VariableElement vElement;
     {
       var statement = statements[0] as VariableDeclarationStatement;
-      vElement = statement.variables.variables[0].name.staticElement
-          as VariableElement;
+      vElement = statement.variables.variables[0].declaredElement!;
     }
 
     {
@@ -6902,6 +6918,7 @@
     var dNode = result.unit.declarations[3] as ClassDeclaration;
     Element dElement = dNode.declaredElement!;
 
+    // ignore: deprecated_member_use_from_same_package
     SimpleIdentifier dName = dNode.name;
     expect(dName.staticElement, same(dElement));
     expect(dName.staticType, isNull);
@@ -6971,6 +6988,7 @@
     var dNode = result.unit.declarations[3] as ClassTypeAlias;
     Element dElement = dNode.declaredElement!;
 
+    // ignore: deprecated_member_use_from_same_package
     SimpleIdentifier dName = dNode.name;
     expect(dName.staticElement, same(dElement));
     expect(dName.staticType, isNull);
@@ -7030,6 +7048,7 @@
     var enumNode = result.unit.declarations[0] as EnumDeclaration;
     ClassElement enumElement = enumNode.declaredElement!;
 
+    // ignore: deprecated_member_use_from_same_package
     SimpleIdentifier dName = enumNode.name;
     expect(dName.staticElement, same(enumElement));
     expect(dName.staticType, isNull);
@@ -7038,7 +7057,10 @@
       var aElement = enumElement.getField('A');
       var aNode = enumNode.constants[0];
       expect(aNode.declaredElement, same(aElement));
+
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticElement, same(aElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticType, isNull);
     }
 
@@ -7046,7 +7068,10 @@
       var bElement = enumElement.getField('B');
       var bNode = enumNode.constants[1];
       expect(bNode.declaredElement, same(bElement));
+
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticElement, same(bElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticType, isNull);
     }
   }
@@ -7072,7 +7097,9 @@
     ClassElement cElement = cNode.declaredElement!;
 
     // The class name identifier.
+    // ignore: deprecated_member_use_from_same_package
     expect(cNode.name.staticElement, same(cElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(cNode.name.staticType, isNull);
 
     // unnamed constructor
@@ -7082,7 +7109,7 @@
       assertType(node.declaredElement!.type, 'C Function(int)');
       expect(node.returnType.staticElement, same(cElement));
       expect(node.returnType.staticType, isNull);
-      expect(node.name, isNull);
+      expect(node.name2, isNull);
     }
 
     // named constructor
@@ -7092,7 +7119,10 @@
       assertType(node.declaredElement!.type, 'C Function(int)');
       expect(node.returnType.staticElement, same(cElement));
       expect(node.returnType.staticType, isNull);
+
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name!.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name!.staticType, isNull);
     }
 
@@ -7110,7 +7140,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // method name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
 
       // method parameter
@@ -7122,9 +7154,6 @@
         var pType = pNode.type as NamedType;
         expect(pType.name.staticElement, doubleElement);
         expect(pType.name.staticType, isNull);
-
-        expect(pNode.identifier!.staticElement, pNode.declaredElement);
-        expect(pNode.identifier!.staticType, isNull);
       }
     }
 
@@ -7142,7 +7171,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // getter name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
     }
 
@@ -7160,7 +7191,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // setter name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
 
       // setter parameter
@@ -7172,9 +7205,6 @@
         var pType = pNode.type as NamedType;
         expect(pType.name.staticElement, doubleElement);
         expect(pType.name.staticType, isNull);
-
-        expect(pNode.identifier!.staticElement, pNode.declaredElement);
-        expect(pNode.identifier!.staticType, isNull);
       }
     }
   }
@@ -7205,7 +7235,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // function name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
 
       // function parameter
@@ -7218,9 +7250,6 @@
         var pType = pNode.type as NamedType;
         expect(pType.name.staticElement, doubleElement);
         expect(pType.name.staticType, isNull);
-
-        expect(pNode.identifier!.staticElement, pNode.declaredElement);
-        expect(pNode.identifier!.staticType, isNull);
       }
     }
 
@@ -7238,7 +7267,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // getter name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
     }
 
@@ -7256,7 +7287,9 @@
       expect(returnTypeName.staticType, isNull);
 
       // setter name
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticElement, same(node.declaredElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(node.name.staticType, isNull);
 
       // setter parameter
@@ -7269,9 +7302,6 @@
         var pType = pNode.type as NamedType;
         expect(pType.name.staticElement, doubleElement);
         expect(pType.name.staticType, isNull);
-
-        expect(pNode.identifier!.staticElement, pNode.declaredElement);
-        expect(pNode.identifier!.staticType, isNull);
       }
     }
   }
@@ -7300,7 +7330,9 @@
       VariableDeclaration aNode = aDeclaration.fields.variables[0];
       expect(aNode.declaredElement, same(aElement));
       expect(aElement.type, typeProvider.intType);
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticElement, same(aElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticType, isNull);
 
       var aValue = aNode.initializer as Expression;
@@ -7319,7 +7351,9 @@
       VariableDeclaration bNode = bDeclaration.fields.variables[0];
       expect(bNode.declaredElement, same(bElement));
       expect(bElement.type, typeParameterTypeNone(tElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticElement, same(bElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticType, isNull);
     }
   }
@@ -7347,7 +7381,9 @@
       expect(aNode.declaredElement, same(aElement));
       expect(aElement.type, typeProvider.intType);
 
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticElement, same(aElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticType, isNull);
 
       Expression aValue = aNode.initializer!;
@@ -7361,7 +7397,9 @@
       expect(bNode.declaredElement, same(bElement));
       expect(bElement.type, typeProvider.doubleType);
 
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticElement, same(bElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticType, isNull);
 
       Expression aValue = bNode.initializer!;
@@ -7386,7 +7424,9 @@
       var aElement = aNode.declaredElement as TopLevelVariableElement;
       expect(aElement, same(unitElement.topLevelVariables[0]));
       expect(aElement.type, typeProvider.intType);
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticElement, same(aElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticType, isNull);
 
       Expression aValue = aNode.initializer!;
@@ -7404,7 +7444,9 @@
       var namedType = bDeclaration.variables.type as NamedType;
       _assertNamedTypeSimple(namedType, typeProvider.doubleType);
 
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticElement, same(bElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticType, isNull);
 
       Expression aValue = bNode.initializer!;
@@ -7432,7 +7474,9 @@
       expect(aElement, same(unitElement.topLevelVariables[0]));
       expect(aElement.type, typeProvider.intType);
 
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticElement, same(aElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(aNode.name.staticType, isNull);
 
       Expression aValue = aNode.initializer!;
@@ -7445,7 +7489,9 @@
       expect(bElement, same(unitElement.topLevelVariables[1]));
       expect(bElement.type, typeProvider.doubleType);
 
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticElement, same(bElement));
+      // ignore: deprecated_member_use_from_same_package
       expect(bNode.name.staticType, isNull);
 
       Expression aValue = bNode.initializer!;
@@ -7471,7 +7517,9 @@
     expect(fElement, isNotNull);
     assertType(fElement.type, fTypeString);
 
+    // ignore: deprecated_member_use_from_same_package
     expect(fDeclaration.name.staticElement, same(fElement));
+    // ignore: deprecated_member_use_from_same_package
     expect(fDeclaration.name.staticType, isNull);
 
     var fReturnTypeNode = fDeclaration.returnType as NamedType;
@@ -8629,7 +8677,6 @@
 
     expect(node, isNotNull);
     expect(node.declaredElement, same(element));
-    expect(node.identifier!.staticElement, same(element));
 
     var namedType = node.type as NamedType?;
     if (namedType != null) {
@@ -8641,7 +8688,7 @@
   List<Statement> _getMainStatements(ResolvedUnitResult result) {
     for (var declaration in result.unit.declarations) {
       if (declaration is FunctionDeclaration &&
-          declaration.name.name == 'main') {
+          declaration.name2.lexeme == 'main') {
         var body = declaration.functionExpression.body as BlockFunctionBody;
         return body.block.statements;
       }
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index c022aa3..06f8192 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -3531,7 +3531,7 @@
   ClassDeclaration _getClass(CompilationUnit unit, String name) {
     for (CompilationUnitMember declaration in unit.declarations) {
       if (declaration is ClassDeclaration) {
-        if (declaration.name.name == name) {
+        if (declaration.name2.lexeme == name) {
           return declaration;
         }
       }
@@ -3545,7 +3545,7 @@
     for (ClassMember declaration in classDeclaration.members) {
       if (declaration is FieldDeclaration) {
         for (var field in declaration.fields.variables) {
-          if (field.name.name == fieldName) {
+          if (field.name2.lexeme == fieldName) {
             return field;
           }
         }
@@ -3559,7 +3559,7 @@
     ClassDeclaration classDeclaration = _getClass(unit, className);
     for (ClassMember declaration in classDeclaration.members) {
       if (declaration is MethodDeclaration &&
-          declaration.name.name == methodName) {
+          declaration.name2.lexeme == methodName) {
         return declaration;
       }
     }
@@ -3581,7 +3581,7 @@
     for (CompilationUnitMember declaration in unit.declarations) {
       if (declaration is TopLevelVariableDeclaration) {
         for (VariableDeclaration variable in declaration.variables.variables) {
-          if (variable.name.name == name) {
+          if (variable.name2.lexeme == name) {
             return variable;
           }
         }
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index 77c78fb..c4bf3b8 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -28,7 +28,7 @@
     var element = findNode.classDeclaration('A').declaredElement!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassDeclaration;
-    expect(node.name.name, 'A');
+    expect(node.name2.lexeme, 'A');
   }
 
   test_class_duplicate() async {
@@ -40,9 +40,9 @@
       var element = findNode.classDeclaration('A {} // 1').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ClassDeclaration;
-      expect(node.name.name, 'A');
+      expect(node.name2.lexeme, 'A');
       expect(
-        node.name.offset,
+        node.name2.offset,
         this.result.content.indexOf('A {} // 1'),
       );
     }
@@ -51,9 +51,9 @@
       var element = findNode.classDeclaration('A {} // 2').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ClassDeclaration;
-      expect(node.name.name, 'A');
+      expect(node.name2.lexeme, 'A');
       expect(
-        node.name.offset,
+        node.name2.offset,
         this.result.content.indexOf('A {} // 2'),
       );
     }
@@ -71,7 +71,7 @@
     var element = library.getType('A')!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassDeclaration;
-    expect(node.name.name, 'A');
+    expect(node.name2.lexeme, 'A');
   }
 
   test_class_missingName() async {
@@ -81,8 +81,8 @@
     var element = findNode.classDeclaration('class {}').declaredElement!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassDeclaration;
-    expect(node.name.name, '');
-    expect(node.name.offset, 6);
+    expect(node.name2.lexeme, '');
+    expect(node.name2.offset, 6);
   }
 
   test_classTypeAlias() async {
@@ -94,7 +94,7 @@
     var element = findElement.class_('B');
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassTypeAlias;
-    expect(node.name.name, 'B');
+    expect(node.name2.lexeme, 'B');
   }
 
   test_compilationUnit() async {
@@ -115,14 +115,14 @@
       var unnamed = findNode.constructor('A();').declaredElement!;
       var result = await getElementDeclaration(unnamed);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name, isNull);
+      expect(node.name2, isNull);
     }
 
     {
       var named = findNode.constructor('A.named();').declaredElement!;
       var result = await getElementDeclaration(named);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name!.name, 'named');
+      expect(node.name2!.lexeme, 'named');
     }
   }
 
@@ -137,9 +137,9 @@
       var element = findNode.constructor('A.named(); // 1').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name!.name, 'named');
+      expect(node.name2!.lexeme, 'named');
       expect(
-        node.name!.offset,
+        node.name2!.offset,
         this.result.content.indexOf('named(); // 1'),
       );
     }
@@ -148,9 +148,9 @@
       var element = findNode.constructor('A.named(); // 2').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name!.name, 'named');
+      expect(node.name2!.lexeme, 'named');
       expect(
-        node.name!.offset,
+        node.name2!.offset,
         this.result.content.indexOf('named(); // 2'),
       );
     }
@@ -167,7 +167,7 @@
       var element = findNode.constructor('A(); // 1').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name, isNull);
+      expect(node.name2, isNull);
       expect(
         node.returnType.offset,
         this.result.content.indexOf('A(); // 1'),
@@ -178,7 +178,7 @@
       var element = findNode.constructor('A(); // 2').declaredElement!;
       var result = await getElementDeclaration(element);
       var node = result!.node as ConstructorDeclaration;
-      expect(node.name, isNull);
+      expect(node.name2, isNull);
       expect(
         node.returnType.offset,
         this.result.content.indexOf('A(); // 2'),
@@ -204,7 +204,7 @@
     var element = findElement.enum_('MyEnum');
     var result = await getElementDeclaration(element);
     var node = result!.node as EnumDeclaration;
-    expect(node.name.name, 'MyEnum');
+    expect(node.name2.lexeme, 'MyEnum');
   }
 
   test_enum_constant() async {
@@ -214,7 +214,7 @@
     var element = findElement.field('a');
     var result = await getElementDeclaration(element);
     var node = result!.node as EnumConstantDeclaration;
-    expect(node.name.name, 'a');
+    expect(node.name2.lexeme, 'a');
   }
 
   test_extension() async {
@@ -224,7 +224,7 @@
     var element = findNode.extensionDeclaration('E').declaredElement!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ExtensionDeclaration;
-    expect(node.name!.name, 'E');
+    expect(node.name2!.lexeme, 'E');
   }
 
   test_field() async {
@@ -237,7 +237,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as VariableDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_functionDeclaration_local() async {
@@ -250,7 +250,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as FunctionDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_functionDeclaration_top() async {
@@ -261,7 +261,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as FunctionDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_genericFunctionTypeElement() async {
@@ -282,7 +282,7 @@
     var element = findElement.getter('x');
     var result = await getElementDeclaration(element);
     var node = result!.node as MethodDeclaration;
-    expect(node.name.name, 'x');
+    expect(node.name2.lexeme, 'x');
     expect(node.isGetter, isTrue);
   }
 
@@ -293,7 +293,7 @@
     var element = findElement.topGet('x');
     var result = await getElementDeclaration(element);
     var node = result!.node as FunctionDeclaration;
-    expect(node.name.name, 'x');
+    expect(node.name2.lexeme, 'x');
     expect(node.isGetter, isTrue);
   }
 
@@ -316,7 +316,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as VariableDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_method() async {
@@ -329,7 +329,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as MethodDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_mixin() async {
@@ -339,7 +339,7 @@
     var element = findElement.mixin('M');
     var result = await getElementDeclaration(element);
     var node = result!.node as MixinDeclaration;
-    expect(node.name.name, 'M');
+    expect(node.name2.lexeme, 'M');
   }
 
   test_parameter() async {
@@ -350,7 +350,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as SimpleFormalParameter;
-    expect(node.identifier!.name, 'a');
+    expect(node.name!.lexeme, 'a');
   }
 
   test_parameter_missingName_named() async {
@@ -364,7 +364,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as DefaultFormalParameter;
-    expect(node.identifier!.name, '');
+    expect(node.name!.lexeme, '');
   }
 
   test_parameter_missingName_required() async {
@@ -378,7 +378,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as SimpleFormalParameter;
-    expect(node.identifier!.name, '');
+    expect(node.name!.lexeme, '');
   }
 
   test_setter_class() async {
@@ -390,7 +390,7 @@
     var element = findElement.setter('x');
     var result = await getElementDeclaration(element);
     var node = result!.node as MethodDeclaration;
-    expect(node.name.name, 'x');
+    expect(node.name2.lexeme, 'x');
     expect(node.isSetter, isTrue);
   }
 
@@ -401,7 +401,7 @@
     var element = findElement.topSet('x');
     var result = await getElementDeclaration(element);
     var node = result!.node as FunctionDeclaration;
-    expect(node.name.name, 'x');
+    expect(node.name2.lexeme, 'x');
     expect(node.isSetter, isTrue);
   }
 
@@ -413,7 +413,7 @@
 
     var result = await getElementDeclaration(element);
     var node = result!.node as VariableDeclaration;
-    expect(node.name.name, 'foo');
+    expect(node.name2.lexeme, 'foo');
   }
 
   test_topLevelVariable_synthetic() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
index d583870..08e34ba 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_helper_test.dart
@@ -81,7 +81,7 @@
     var element = findElement.class_('A');
     var result = (await helper.getElementDeclaration(element))!;
     var node = result.node as ClassDeclaration;
-    expect(node.name.name, 'A');
+    expect(node.name2.lexeme, 'A');
   }
 
   test_getResolvedUnitByElement() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 0e071ee..9c13ede 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -329,7 +329,7 @@
     var element = libraryResult.element.getType('A')!;
     var declaration = parsedLibrary.getElementDeclaration(element)!;
     var node = declaration.node as ClassDeclaration;
-    expect(node.name.name, 'A');
+    expect(node.name2.lexeme, 'A');
     expect(node.offset, 0);
     expect(node.length, 10);
   }
@@ -365,10 +365,9 @@
     // We can get the variable element declaration.
     var fooDeclaration = parsedLibrary.getElementDeclaration(fooElement)!;
     var fooNode = fooDeclaration.node as VariableDeclaration;
-    expect(fooNode.name.name, 'foo');
+    expect(fooNode.name2.lexeme, 'foo');
     expect(fooNode.offset, 4);
     expect(fooNode.length, 7);
-    expect(fooNode.name.staticElement, isNull);
 
     // Synthetic elements don't have nodes.
     expect(parsedLibrary.getElementDeclaration(fooElement.getter!), isNull);
@@ -593,14 +592,14 @@
 
     var aDeclaration = resolvedLibrary.getElementDeclaration(aClass)!;
     var aNode = aDeclaration.node as ClassDeclaration;
-    expect(aNode.name.name, 'A');
+    expect(aNode.name2.lexeme, 'A');
     expect(aNode.offset, 16);
     expect(aNode.length, 16);
     expect(aNode.declaredElement!.name, 'A');
 
     var bDeclaration = resolvedLibrary.getElementDeclaration(bClass)!;
     var bNode = bDeclaration.node as ClassDeclaration;
-    expect(bNode.name.name, 'B');
+    expect(bNode.name2.lexeme, 'B');
     expect(bNode.offset, 19);
     expect(bNode.length, 16);
     expect(bNode.declaredElement!.name, 'B');
@@ -633,7 +632,7 @@
     // We can get the variable element declaration.
     var fooDeclaration = resolvedLibrary.getElementDeclaration(fooElement)!;
     var fooNode = fooDeclaration.node as VariableDeclaration;
-    expect(fooNode.name.name, 'foo');
+    expect(fooNode.name2.lexeme, 'foo');
     expect(fooNode.offset, 4);
     expect(fooNode.length, 7);
     expect(fooNode.declaredElement!.name, 'foo');
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 ab8a0dd..214b03a 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -52,13 +52,24 @@
     expect(element, same(unitElement));
   }
 
-  test_locate_ConstructorDeclaration() async {
+  test_locate_ConstructorDeclaration_named() async {
     await resolveTestCode(r'''
 class A {
   A.foo();
 }
 ''');
-    var node = findNode.constructor('foo();');
+    var node = findNode.constructor('A.foo()');
+    var element = ElementLocator.locate(node);
+    expect(element, isConstructorElement);
+  }
+
+  test_locate_ConstructorDeclaration_unnamed() async {
+    await resolveTestCode(r'''
+class A {
+  A();
+}
+''');
+    var node = findNode.constructor('A()');
     var element = ElementLocator.locate(node);
     expect(element, isConstructorElement);
   }
@@ -137,7 +148,7 @@
   A();
 }
 ''');
-    var node = findNode.constructor('A();');
+    var node = findNode.simple('A()');
     var element = ElementLocator.locate(node);
     expect(element, isConstructorElement);
   }
diff --git a/pkg/analyzer/test/src/dart/ast/utilities_test.dart b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
index 81e36e0..7468a58 100644
--- a/pkg/analyzer/test/src/dart/ast/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
@@ -26,6 +26,7 @@
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     VariableDeclarationList variableList = declaration.variables;
     Identifier typeName = (variableList.type as NamedType).name;
+    // ignore: deprecated_member_use_from_same_package
     SimpleIdentifier varName = variableList.variables[0].name;
     expect(NodeLocator2(0).searchWithin(unit), same(unit));
     expect(NodeLocator2(1).searchWithin(unit), same(typeName));
@@ -47,6 +48,7 @@
     var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
     VariableDeclarationList variableList = declaration.variables;
     Identifier typeName = (variableList.type as NamedType).name;
+    // ignore: deprecated_member_use_from_same_package
     SimpleIdentifier varName = variableList.variables[0].name;
     expect(NodeLocator2(-1, 2).searchWithin(unit), isNull);
     expect(NodeLocator2(0, 2).searchWithin(unit), same(unit));
diff --git a/pkg/analyzer/test/src/dart/constant/utilities_test.dart b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
index 913f242..8a22db8 100644
--- a/pkg/analyzer/test/src/dart/constant/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/utilities_test.dart
@@ -203,7 +203,7 @@
         keyword == Keyword.FINAL,
         keyword == Keyword.CONST,
         _typeProvider.intType);
-    variableDeclaration.name.staticElement = fieldElement;
+    variableDeclaration.declaredElement = fieldElement;
     FieldDeclaration fieldDeclaration = AstTestFactory.fieldDeclaration2(
         isStatic, keyword, <VariableDeclaration>[variableDeclaration]);
     var classDeclaration = AstTestFactory.classDeclaration(
@@ -212,7 +212,7 @@
     _node = classDeclaration;
     ClassElementImpl classElement = ElementFactory.classElement2(className);
     classElement.fields = <FieldElement>[fieldElement];
-    classDeclaration.name.staticElement = classElement;
+    classDeclaration.declaredElement = classElement;
     if (hasConstConstructor) {
       var constructorDeclaration = AstTestFactory.constructorDeclaration2(
           Keyword.CONST,
@@ -239,9 +239,8 @@
     var variableDeclaration = isInitialized
         ? AstTestFactory.variableDeclaration2(name, AstTestFactory.integer(0))
         : AstTestFactory.variableDeclaration(name);
-    var identifier = variableDeclaration.name;
-    VariableElement element = ElementFactory.localVariableElement(identifier);
-    identifier.staticElement = element;
+    VariableElement element = ElementFactory.localVariableElement2(name);
+    variableDeclaration.declaredElement = element;
     var keyword = isConst
         ? Keyword.CONST
         : isFinal
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index eb4f3fb..3cbb36f 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -1416,7 +1416,7 @@
 
   void _assertExecutable(ExecutableElement? element, String? expected) {
     if (expected != null && element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
 
       var type = element.type;
       var typeStr = typeString(type);
@@ -1426,7 +1426,7 @@
 
       if (element is PropertyAccessorElement) {
         var variable = element.variable;
-        expect(variable.enclosingElement2, same(element.enclosingElement2));
+        expect(variable.enclosingElement3, same(element.enclosingElement3));
         expect(variable.name, element.displayName);
         if (element.isGetter) {
           expect(variable.type, element.returnType);
@@ -1508,7 +1508,7 @@
       var element = entry.value;
       var type = element.type;
 
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement.name == 'Object') continue;
 
       var typeStr = type.getDisplayString(withNullability: false);
diff --git a/pkg/analyzer/test/src/dart/resolution/enum_test.dart b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
index a569dbc..dd2db98 100644
--- a/pkg/analyzer/test/src/dart/resolution/enum_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/enum_test.dart
@@ -87,10 +87,7 @@
     final node = findNode.enumConstantDeclaration('v.');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -126,10 +123,7 @@
     final node = findNode.enumConstantDeclaration('v(');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     argumentList: ArgumentList
       leftParenthesis: (
@@ -159,10 +153,7 @@
     final node = findNode.enumConstantDeclaration('v<');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     typeArguments: TypeArgumentList
       leftBracket: <
@@ -208,10 +199,7 @@
     final node = findNode.enumConstantDeclaration('v.');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -243,10 +231,7 @@
     final node = findNode.enumConstantDeclaration('v(');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     argumentList: ArgumentList
       leftParenthesis: (
@@ -271,10 +256,7 @@
     final node = findNode.enumConstantDeclaration('v\n');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   constructorElement: self::@enum::E::@constructor::•
   declaredElement: self::@enum::E::@field::v
 ''');
@@ -293,10 +275,7 @@
     final node = findNode.enumConstantDeclaration('v.');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -330,10 +309,7 @@
     final node = findNode.enumConstantDeclaration('v(');
     assertResolvedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
-    staticElement: self::@enum::E::@field::v
-    staticType: null
+  name: v
   arguments: EnumConstantArguments
     argumentList: ArgumentList
       leftParenthesis: (
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index 8cd9fc4..7e50d1e 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -62,10 +62,7 @@
         leftBracket: <
         typeParameters
           TypeParameter
-            name: SimpleIdentifier
-              token: T
-              staticElement: T@89
-              staticType: null
+            name: T
             declaredElement: T@89
         rightBracket: >
       parameters: FormalParameterList
@@ -287,10 +284,7 @@
       leftBracket: <
       typeParameters
         TypeParameter
-          name: SimpleIdentifier
-            token: T
-            staticElement: T@37
-            staticType: null
+          name: T
           declaredElement: T@37
       rightBracket: >
     parameters: FormalParameterList
@@ -302,10 +296,7 @@
             staticElement: T@37
             staticType: null
           type: T
-        identifier: SimpleIdentifier
-          token: a
-          staticElement: @36::@parameter::a
-          staticType: null
+        name: a
         declaredElement: @36::@parameter::a
         declaredElementType: T
       rightParenthesis: )
diff --git a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
index 0402d00..e575fbf 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_import_test.dart
@@ -344,10 +344,7 @@
         keyword: var
         variables
           VariableDeclaration
-            name: SimpleIdentifier
-              token: a
-              staticElement: self::@variable::a
-              staticType: null
+            name: a
             equals: =
             initializer: InstanceCreationExpression
               constructorName: ConstructorName
@@ -449,10 +446,7 @@
         keyword: var
         variables
           VariableDeclaration
-            name: SimpleIdentifier
-              token: a
-              staticElement: self::@variable::a
-              staticType: null
+            name: a
             equals: =
             initializer: InstanceCreationExpression
               constructorName: ConstructorName
@@ -676,10 +670,7 @@
         keyword: var
         variables
           VariableDeclaration
-            name: SimpleIdentifier
-              token: a
-              staticElement: self::@variable::a
-              staticType: null
+            name: a
             equals: =
             initializer: InstanceCreationExpression
               constructorName: ConstructorName
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 0820f8c..b1ea604c 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -32,7 +32,7 @@
     assertElementName(gElement, 'g', offset: 20);
 
     var gNode = findNode.methodDeclaration('g =>');
-    assertElement(gNode.name, gElement);
+    expect(gNode.declaredElement, same(gElement));
 
     var fields = element.fields;
     expect(fields, hasLength(1));
@@ -55,7 +55,7 @@
     assertElementName(fooElement, 'foo', offset: 17);
 
     var fooNode = findNode.methodDeclaration('foo()');
-    assertElement(fooNode.name, fooElement);
+    expect(fooNode.declaredElement, same(fooElement));
   }
 
   test_accessor_setter() async {
@@ -74,7 +74,7 @@
     assertElementName(sElement, 's=', offset: 21);
 
     var gNode = findNode.methodDeclaration('s(int _)');
-    assertElement(gNode.name, sElement);
+    expect(gNode.declaredElement, same(sElement));
 
     var fields = element.fields;
     expect(fields, hasLength(1));
@@ -206,7 +206,7 @@
     assertEnclosingElement(tElement, element);
 
     var tNode = findNode.typeParameter('T> {');
-    assertElement(tNode.name, tElement);
+    assertElement(tNode.declaredElement, tElement);
 
     var fields = element.fields;
     expect(fields, hasLength(1));
@@ -216,7 +216,7 @@
     assertEnclosingElement(fElement, element);
 
     var fNode = findNode.variableDeclaration('f;');
-    assertElement(fNode.name, fElement);
+    assertElement(fNode.declaredElement, fElement);
 
     assertNamedType(findNode.namedType('T f'), tElement, 'T');
 
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index cf74902..f386b87 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -215,7 +215,7 @@
   }
 
   void assertEnclosingElement(Element element, Element expectedEnclosing) {
-    expect(element.enclosingElement2, expectedEnclosing);
+    expect(element.enclosingElement3, expectedEnclosing);
   }
 
   Future<void> assertErrorsInCode(
@@ -492,7 +492,7 @@
   ) {
     var actualMapString = Map.fromEntries(
       substitution.map.entries.where((entry) {
-        return entry.key.enclosingElement2 is! ExecutableElement;
+        return entry.key.enclosingElement3 is! ExecutableElement;
       }).map((entry) {
         return MapEntry(
           entry.key.name,
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
index 87e173b..299ab7c 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/inference_update_1_test.dart
@@ -64,7 +64,7 @@
       assertType(findElement.localVar('a').type, 'int');
       assertType(findElement.parameter('x').type, 'int');
       assertType(findElement.parameter('y').type, 'int');
-      expect(findNode.binary('x + y').staticElement!.enclosingElement2.name,
+      expect(findNode.binary('x + y').staticElement!.enclosingElement3.name,
           'num');
     } else {
       await assertErrorsInCode(code, [
@@ -130,7 +130,7 @@
     assertType(findElement.localVar('a').type, _isEnabled ? 'int' : 'dynamic');
     assertType(findElement.parameter('x').type, _isEnabled ? 'int' : 'Object?');
     assertType(findElement.parameter('y').type, 'int');
-    expect(findNode.binary('+ y').staticElement?.enclosingElement2.name,
+    expect(findNode.binary('+ y').staticElement?.enclosingElement3.name,
         _isEnabled ? 'num' : null);
   }
 
@@ -294,7 +294,7 @@
     assertType(findElement.localVar('a').type, 'int?');
     assertType(findElement.parameter('x').type, 'int?');
     assertType(findElement.parameter('y').type, 'int');
-    expect(findNode.binary('+ y').staticElement!.enclosingElement2.name, 'num');
+    expect(findNode.binary('+ y').staticElement!.enclosingElement3.name, 'num');
   }
 
   test_horizontal_inference_unnecessary_due_to_explicit_parameter_type_named() async {
@@ -311,7 +311,7 @@
     assertType(findElement.localVar('a').type, 'int?');
     assertType(findElement.parameter('x').type, 'int?');
     assertType(findElement.parameter('y').type, 'int');
-    expect(findNode.binary('+ y').staticElement!.enclosingElement2.name, 'num');
+    expect(findNode.binary('+ y').staticElement!.enclosingElement3.name, 'num');
   }
 
   test_horizontal_inference_unnecessary_due_to_no_dependency() async {
diff --git a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
index 99c0eb9..d2c9228 100644
--- a/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extraneous_modifier_test.dart
@@ -29,8 +29,7 @@
     assertParsedNodeText(node, r'''
 SimpleFormalParameter
   keyword: const
-  identifier: SimpleIdentifier
-    token: a
+  name: a
 ''');
   }
 
@@ -46,8 +45,7 @@
     assertParsedNodeText(node, r'''
 SimpleFormalParameter
   keyword: var
-  identifier: SimpleIdentifier
-    token: a
+  name: a
 ''');
   }
 
@@ -67,8 +65,7 @@
   keyword: var
   superKeyword: super
   period: .
-  identifier: SimpleIdentifier
-    token: a
+  name: a
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
index 9ebed01..483d186 100644
--- a/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/function_typed_parameter_var_test.dart
@@ -30,14 +30,12 @@
 SuperFormalParameter
   superKeyword: super
   period: .
-  identifier: SimpleIdentifier
-    token: a
+  name: a
   typeParameters: TypeParameterList
     leftBracket: <
     typeParameters
       TypeParameter
-        name: SimpleIdentifier
-          token: T
+        name: T
     rightBracket: >
   parameters: FormalParameterList
     leftParenthesis: (
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
index 00b7f90..91bb8d8 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
@@ -26,12 +26,7 @@
       error(ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR, 27, 1),
     ]);
 
-    var element = findElement.mixin('M');
-    var constructorElement = element.constructors.single;
-
     var fpNode = findNode.fieldFormalParameter('f);');
-    assertElement(fpNode.identifier, constructorElement.parameters[0]);
-
     var fpElement = fpNode.declaredElement as FieldFormalParameterElement;
     assertElement(fpElement.field, findElement.field('f'));
   }
diff --git a/pkg/analyzer/test/src/fasta/ast_builder_test.dart b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
index b8872b3..fda8d7d 100644
--- a/pkg/analyzer/test/src/fasta/ast_builder_test.dart
+++ b/pkg/analyzer/test/src/fasta/ast_builder_test.dart
@@ -26,8 +26,7 @@
 ClassDeclaration
   augmentKeyword: augment
   classKeyword: class
-  name: SimpleIdentifier
-    token: A
+  name: A
   leftBracket: {
   rightBracket: }
 ''');
@@ -54,8 +53,7 @@
         offset: 0
   abstractKeyword: abstract @16
   classKeyword: class @25
-  name: SimpleIdentifier
-    token: A @31
+  name: A @31
   leftBracket: { @33
   rightBracket: } @34
 ''',
@@ -99,8 +97,7 @@
         token: Annotation @46
   abstractKeyword: abstract @57
   classKeyword: class @66
-  name: SimpleIdentifier
-    token: A @72
+  name: A @72
   leftBracket: { @74
   rightBracket: } @75
 ''',
@@ -161,8 +158,7 @@
         token: Annotation @46
   abstractKeyword: abstract @249
   classKeyword: class @258
-  name: SimpleIdentifier
-    token: A @264
+  name: A @264
   leftBracket: { @266
   rightBracket: } @267
 ''',
@@ -180,8 +176,7 @@
 ClassDeclaration
   macroKeyword: macro
   classKeyword: class
-  name: SimpleIdentifier
-    token: A
+  name: A
   leftBracket: {
   rightBracket: }
 ''');
@@ -198,8 +193,7 @@
     assertParsedNodeText(node, r'''
 ClassTypeAlias
   typedefKeyword: class
-  name: SimpleIdentifier
-    token: A
+  name: A
   equals: =
   macroKeyword: macro
   superclass: NamedType
@@ -284,8 +278,7 @@
     var node = parseResult.findNode.enumConstantDeclaration('v.');
     assertParsedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -310,8 +303,7 @@
     var node = parseResult.findNode.enumConstantDeclaration('v.');
     assertParsedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -337,8 +329,7 @@
     var node = parseResult.findNode.enumConstantDeclaration('v.');
     assertParsedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     constructorSelector: ConstructorSelector
       period: .
@@ -364,8 +355,7 @@
     var node = parseResult.findNode.enumConstantDeclaration('v<int>.');
     assertParsedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     typeArguments: TypeArgumentList
       leftBracket: <
@@ -400,8 +390,7 @@
         node,
         r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     typeArguments: TypeArgumentList
       leftBracket: <
@@ -434,8 +423,7 @@
     var node = parseResult.findNode.enumConstantDeclaration('v<int>');
     assertParsedNodeText(node, r'''
 EnumConstantDeclaration
-  name: SimpleIdentifier
-    token: v
+  name: v
   arguments: EnumConstantArguments
     typeArguments: TypeArgumentList
       leftBracket: <
@@ -462,13 +450,11 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: SimpleIdentifier
-    token: E
+  name: E
   leftBracket: {
   constants
     EnumConstantDeclaration
-      name: SimpleIdentifier
-        token: v
+      name: v
   rightBracket: }
 ''');
   }
@@ -485,13 +471,11 @@
     assertParsedNodeText(node, r'''
 EnumDeclaration
   enumKeyword: enum
-  name: SimpleIdentifier
-    token: E
+  name: E
   leftBracket: {
   constants
     EnumConstantDeclaration
-      name: SimpleIdentifier
-        token: v
+      name: v
   semicolon: ;
   rightBracket: }
 ''');
@@ -511,8 +495,7 @@
     assertParsedNodeText(node, r'''
 MethodDeclaration
   propertyKeyword: get
-  name: SimpleIdentifier
-    token: A
+  name: A
   body: ExpressionFunctionBody
     functionDefinition: =>
     expression: IntegerLiteral
@@ -551,8 +534,7 @@
 SuperFormalParameter
   superKeyword: super
   period: .
-  identifier: SimpleIdentifier
-    token: a
+  name: a
 ''');
   }
 }
diff --git a/pkg/analyzer/test/src/fasta/message_coverage_test.dart b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
index 726ed9d..3c3c34d 100644
--- a/pkg/analyzer/test/src/fasta/message_coverage_test.dart
+++ b/pkg/analyzer/test/src/fasta/message_coverage_test.dart
@@ -66,7 +66,7 @@
     var astBuilder = unit.declarations[0] as ClassDeclaration;
     var method = astBuilder.members
         .whereType<MethodDeclaration>()
-        .firstWhere((x) => x.name.name == 'reportMessage');
+        .firstWhere((x) => x.name2.lexeme == 'reportMessage');
     SwitchStatement statement = (method.body as BlockFunctionBody)
         .block
         .statements
diff --git a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
index 61e6024..171836e 100644
--- a/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart
@@ -565,6 +565,7 @@
 ''');
   }
 
+  @failingTest
   void test_fieldFormalParameter_noPeriod_last() {
     testRecovery('''
 class C {
@@ -579,6 +580,7 @@
 ''');
   }
 
+  @failingTest
   void test_fieldFormalParameter_noPeriod_notLast() {
     testRecovery('''
 class C {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 5a12633..98b3f3b 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -52,6 +52,7 @@
   bool withDisplayName = false,
   bool withExportScope = false,
   bool withNonSynthetic = false,
+  bool withPropertyLinking = false,
   bool withSyntheticDartCoreImport = false,
 }) {
   var writer = _ElementWriter(
@@ -60,6 +61,7 @@
     withDisplayName: withDisplayName,
     withExportScope: withExportScope,
     withNonSynthetic: withNonSynthetic,
+    withPropertyLinking: withPropertyLinking,
     withSyntheticDartCoreImport: withSyntheticDartCoreImport,
   );
   writer.writeLibraryElement(library);
@@ -126,8 +128,10 @@
   final bool withDisplayName;
   final bool withExportScope;
   final bool withNonSynthetic;
+  final bool withPropertyLinking;
   final bool withSyntheticDartCoreImport;
   final StringBuffer buffer = StringBuffer();
+  final _IdMap _idMap = _IdMap();
 
   String indent = '';
 
@@ -137,6 +141,7 @@
     required this.withDisplayName,
     required this.withExportScope,
     required this.withNonSynthetic,
+    required this.withPropertyLinking,
     required this.withSyntheticDartCoreImport,
   });
 
@@ -194,8 +199,8 @@
 
     expect(accessor.variable, same(property));
 
-    var propertyEnclosing = property.enclosingElement2;
-    expect(accessor.enclosingElement2, same(propertyEnclosing));
+    var propertyEnclosing = property.enclosingElement3;
+    expect(accessor.enclosingElement3, same(propertyEnclosing));
 
     if (propertyEnclosing is CompilationUnitElement) {
       expect(propertyEnclosing.accessors, contains(accessor));
@@ -373,7 +378,7 @@
       var classReference = reference.parent!.parent!;
       // We need this `if` for duplicate declarations.
       // The reference might be filled by another declaration.
-      if (identical(classReference.element, e.enclosingElement2)) {
+      if (identical(classReference.element, e.enclosingElement3)) {
         expect(reference.element, same(e));
       }
     }
@@ -410,7 +415,9 @@
 
       var superConstructor = e.superConstructor;
       if (superConstructor != null) {
-        if (!superConstructor.enclosingElement2.isDartCoreObject) {
+        final enclosingElement = superConstructor.enclosingElement3;
+        if (enclosingElement is ClassElement &&
+            !enclosingElement.isDartCoreObject) {
           _writeElementReference('superConstructor', superConstructor);
         }
       }
@@ -428,7 +435,7 @@
 
     if (e.isSynthetic) {
       expect(e.nameOffset, -1);
-      expect(e.nonSynthetic, same(e.enclosingElement2));
+      expect(e.nonSynthetic, same(e.enclosingElement3));
     } else {
       if (!e.isTempAugmentation) {
         expect(e.nameOffset, isPositive);
@@ -678,9 +685,9 @@
       _writeNonSyntheticElement(e);
     });
 
-    if (e.isSynthetic && e.enclosingElement2 is EnumElementImpl) {
+    if (e.isSynthetic && e.enclosingElement3 is EnumElementImpl) {
       expect(e.name, 'toString');
-      expect(e.nonSynthetic, same(e.enclosingElement2));
+      expect(e.nonSynthetic, same(e.enclosingElement3));
     } else {
       _assertNonSyntheticElementSelf(e);
     }
@@ -785,7 +792,7 @@
     PropertyInducingElement variable = e.variable;
     expect(variable, isNotNull);
 
-    var variableEnclosing = variable.enclosingElement2;
+    var variableEnclosing = variable.enclosingElement3;
     if (variableEnclosing is CompilationUnitElement) {
       expect(variableEnclosing.topLevelVariables, contains(variable));
     } else if (variableEnclosing is ClassElement) {
@@ -829,6 +836,13 @@
       _writeBodyModifiers(e);
     });
 
+    void writeLinking() {
+      if (withPropertyLinking) {
+        _writelnWithIndent('id: ${_idMap[e]}');
+        _writelnWithIndent('variable: ${_idMap[e.variable]}');
+      }
+    }
+
     _withIndent(() {
       _writeDocumentation(e);
       _writeMetadata(e);
@@ -838,6 +852,7 @@
       _writeParameterElements(e.parameters);
       _writeType('returnType', e.returnType);
       _writeNonSyntheticElement(e);
+      writeLinking();
     });
   }
 
@@ -877,6 +892,22 @@
       _writeName(e);
     });
 
+    void writeLinking() {
+      if (withPropertyLinking) {
+        _writelnWithIndent('id: ${_idMap[e]}');
+
+        final getter = e.getter;
+        if (getter != null) {
+          _writelnWithIndent('getter: ${_idMap[getter]}');
+        }
+
+        final setter = e.setter;
+        if (setter != null) {
+          _writelnWithIndent('setter: ${_idMap[setter]}');
+        }
+      }
+    }
+
     _withIndent(() {
       _writeDocumentation(e);
       _writeMetadata(e);
@@ -885,6 +916,7 @@
       _writeType('type', e.type);
       _writeConstantInitializer(e);
       _writeNonSyntheticElement(e);
+      writeLinking();
     });
   }
 
@@ -1012,6 +1044,26 @@
   }
 }
 
+class _IdMap {
+  final Map<Element, String> fieldMap = Map.identity();
+  final Map<Element, String> getterMap = Map.identity();
+  final Map<Element, String> setterMap = Map.identity();
+
+  String operator [](Element element) {
+    if (element is FieldElement) {
+      return fieldMap[element] ??= 'field_${fieldMap.length}';
+    } else if (element is TopLevelVariableElement) {
+      return fieldMap[element] ??= 'variable_${fieldMap.length}';
+    } else if (element is PropertyAccessorElement && element.isGetter) {
+      return getterMap[element] ??= 'getter_${getterMap.length}';
+    } else if (element is PropertyAccessorElement && element.isSetter) {
+      return setterMap[element] ??= 'setter_${setterMap.length}';
+    } else {
+      return '???';
+    }
+  }
+}
+
 class _Replacement {
   final int offset;
   final int end;
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 566a19d..f86beeb 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -4282,6 +4282,101 @@
 ''');
   }
 
+  test_class_field_duplicate_getter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo = 0;
+  int get foo => 0;
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          foo @16
+            type: int
+            id: field_0
+            getter: getter_0
+            setter: setter_0
+          synthetic foo @-1
+            type: int
+            id: field_1
+            getter: getter_1
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+            id: getter_0
+            variable: field_0
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+            id: setter_0
+            variable: field_0
+          get foo @35
+            returnType: int
+            id: getter_1
+            variable: field_1
+''',
+        withPropertyLinking: true);
+  }
+
+  test_class_field_duplicate_setter() async {
+    var library = await buildLibrary('''
+class C {
+  int foo = 0;
+  set foo(int _) {}
+}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    classes
+      class C @6
+        fields
+          foo @16
+            type: int
+            id: field_0
+            getter: getter_0
+            setter: setter_0
+          synthetic foo @-1
+            type: int
+            id: field_1
+            setter: setter_1
+        constructors
+          synthetic @-1
+        accessors
+          synthetic get foo @-1
+            returnType: int
+            id: getter_0
+            variable: field_0
+          synthetic set foo @-1
+            parameters
+              requiredPositional _foo @-1
+                type: int
+            returnType: void
+            id: setter_0
+            variable: field_0
+          set foo @31
+            parameters
+              requiredPositional _ @39
+                type: int
+            returnType: void
+            id: setter_1
+            variable: field_1
+''',
+        withPropertyLinking: true);
+  }
+
   test_class_field_external() async {
     var library = await buildLibrary('''
 abstract class C {
@@ -4389,10 +4484,7 @@
                                   staticElement: dart:core::@class::double
                                   staticType: null
                                 type: double
-                              identifier: SimpleIdentifier
-                                token: a @78
-                                staticElement: a@78
-                                staticType: null
+                              name: a @78
                               declaredElement: a@78
                               declaredElementType: double
                             rightParenthesis: ) @79
@@ -4451,7 +4543,9 @@
   set foo(int newValue) {}
 }
 ''');
-    checkElementText(library, r'''
+    checkElementText(
+        library,
+        r'''
 library
   definingUnit
     classes
@@ -4459,6 +4553,9 @@
         fields
           final foo @22
             type: int
+            id: field_0
+            getter: getter_0
+            setter: setter_0
         constructors
           @29
             parameters
@@ -4468,12 +4565,17 @@
         accessors
           synthetic get foo @-1
             returnType: int
+            id: getter_0
+            variable: field_0
           set foo @48
             parameters
               requiredPositional newValue @56
                 type: int
             returnType: void
-''');
+            id: setter_0
+            variable: field_0
+''',
+        withPropertyLinking: true);
   }
 
   test_class_field_formal_param_inferred_type_implicit() async {
@@ -22159,14 +22261,14 @@
 
     var T = F.typeParameters[0];
     expect(T.name, 'T');
-    expect(T.enclosingElement2, same(F));
+    expect(T.enclosingElement3, same(F));
 
     var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement2, same(F));
+    expect(function.enclosingElement3, same(F));
 
     var a = function.parameters[0];
     expect(a.name, 'a');
-    expect(a.enclosingElement2, same(function));
+    expect(a.enclosingElement3, same(function));
   }
 
   test_functionTypeAlias_type_element() async {
@@ -22789,10 +22891,7 @@
                           staticElement: dart:core::@class::String
                           staticType: null
                         type: String
-                      identifier: SimpleIdentifier
-                        token: a @52
-                        staticElement: a@52
-                        staticType: null
+                      name: a @52
                       declaredElement: a@52
                       declaredElementType: String
                     rightParenthesis: ) @53
@@ -22864,10 +22963,7 @@
                           staticElement: dart:core::@class::String
                           staticType: null
                         type: String
-                      identifier: SimpleIdentifier
-                        token: a @52
-                        staticElement: a@52
-                        staticType: null
+                      name: a @52
                       declaredElement: a@52
                       declaredElementType: String
                     rightParenthesis: ) @53
@@ -22950,10 +23046,7 @@
                                 staticType: null
                               question: ? @61
                               type: int?
-                            identifier: SimpleIdentifier
-                              token: a @63
-                              staticElement: a@63
-                              staticType: null
+                            name: a @63
                             declaredElement: a@63
                             declaredElementType: int?
                           declaredElement: a@63
@@ -23035,10 +23128,7 @@
                                 staticType: null
                               question: ? @61
                               type: int?
-                            identifier: SimpleIdentifier
-                              token: a @63
-                              staticElement: a@63
-                              staticType: null
+                            name: a @63
                             declaredElement: a@63
                             declaredElementType: int?
                           declaredElement: a@63
@@ -23120,10 +23210,7 @@
                                 staticElement: dart:core::@class::int
                                 staticType: null
                               type: int
-                            identifier: SimpleIdentifier
-                              token: a @71
-                              staticElement: a@71
-                              staticType: null
+                            name: a @71
                             declaredElement: a@71
                             declaredElementType: int
                           declaredElement: a@71
@@ -23202,10 +23289,7 @@
                               staticElement: dart:core::@class::int
                               staticType: null
                             type: int
-                          identifier: SimpleIdentifier
-                            token: a @61
-                            staticElement: a@61
-                            staticType: null
+                          name: a @61
                           declaredElement: a@61
                           declaredElementType: int
                         rightParenthesis: ) @62
@@ -23331,18 +23415,18 @@
 
     var T = F.typeParameters[0];
     expect(T.name, 'T');
-    expect(T.enclosingElement2, same(F));
+    expect(T.enclosingElement3, same(F));
 
     var function = F.aliasedElement as GenericFunctionTypeElement;
-    expect(function.enclosingElement2, same(F));
+    expect(function.enclosingElement3, same(F));
 
     var U = function.typeParameters[0];
     expect(U.name, 'U');
-    expect(U.enclosingElement2, same(function));
+    expect(U.enclosingElement3, same(function));
 
     var a = function.parameters[0];
     expect(a.name, 'a');
-    expect(a.enclosingElement2, same(function));
+    expect(a.enclosingElement3, same(function));
   }
 
   test_genericTypeAlias_recursive() async {
@@ -26517,7 +26601,7 @@
 
     final import_0 = library.augmentationImports[0];
     final augmentation = import_0.importedAugmentation!;
-    expect(augmentation.enclosingElement2, same(library));
+    expect(augmentation.enclosingElement3, same(library));
   }
 
   test_library_augmentationImports_noRelativeUriStr() async {
@@ -39097,26 +39181,119 @@
 ''');
   }
 
+  test_unit_variable_duplicate_getter() async {
+    var library = await buildLibrary('''
+int foo = 0;
+int get foo => 0;
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      static foo @4
+        type: int
+        id: variable_0
+        getter: getter_0
+        setter: setter_0
+      synthetic static foo @-1
+        type: int
+        id: variable_1
+        getter: getter_1
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+        id: getter_0
+        variable: variable_0
+      synthetic static set foo @-1
+        parameters
+          requiredPositional _foo @-1
+            type: int
+        returnType: void
+        id: setter_0
+        variable: variable_0
+      static get foo @21
+        returnType: int
+        id: getter_1
+        variable: variable_1
+''',
+        withPropertyLinking: true);
+  }
+
+  test_unit_variable_duplicate_setter() async {
+    var library = await buildLibrary('''
+int foo = 0;
+set foo(int _) {}
+''');
+    checkElementText(
+        library,
+        r'''
+library
+  definingUnit
+    topLevelVariables
+      static foo @4
+        type: int
+        id: variable_0
+        getter: getter_0
+        setter: setter_0
+      synthetic static foo @-1
+        type: int
+        id: variable_1
+        setter: setter_1
+    accessors
+      synthetic static get foo @-1
+        returnType: int
+        id: getter_0
+        variable: variable_0
+      synthetic static set foo @-1
+        parameters
+          requiredPositional _foo @-1
+            type: int
+        returnType: void
+        id: setter_0
+        variable: variable_0
+      static set foo @17
+        parameters
+          requiredPositional _ @25
+            type: int
+        returnType: void
+        id: setter_1
+        variable: variable_1
+''',
+        withPropertyLinking: true);
+  }
+
   test_unit_variable_final_withSetter() async {
     var library = await buildLibrary(r'''
 final int foo = 0;
 set foo(int newValue) {}
 ''');
-    checkElementText(library, r'''
+    checkElementText(
+        library,
+        r'''
 library
   definingUnit
     topLevelVariables
       static final foo @10
         type: int
+        id: variable_0
+        getter: getter_0
+        setter: setter_0
     accessors
       synthetic static get foo @-1
         returnType: int
+        id: getter_0
+        variable: variable_0
       static set foo @23
         parameters
           requiredPositional newValue @31
             type: int
         returnType: void
-''');
+        id: setter_0
+        variable: variable_0
+''',
+        withPropertyLinking: true);
   }
 
   test_unresolved_annotation_instanceCreation_argument_super() async {
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index f838869..a096a25 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -1298,7 +1298,7 @@
   }
 
   String _elementToReferenceString(Element element) {
-    final enclosingElement = element.enclosingElement2;
+    final enclosingElement = element.enclosingElement3;
     final reference = (element as ElementImpl).reference;
     if (reference != null) {
       return _referenceToString(reference);
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 99c68fe..a7a5668 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -1917,7 +1917,7 @@
           messageContains: ["'g0'"]),
       error(HintCode.UNUSED_ELEMENT, 96, 2),
       error(HintCode.UNUSED_ELEMENT, 126, 2),
-      error(LanguageCode.IMPLICIT_DYNAMIC_RETURN, 212, 12,
+      error(LanguageCode.IMPLICIT_DYNAMIC_RETURN, 212, 2,
           messageContains: ["'m0'"]),
       error(LanguageCode.IMPLICIT_DYNAMIC_RETURN, 304, 2,
           messageContains: ["'y0'"]),
diff --git a/pkg/analyzer/test/util/ast_check.dart b/pkg/analyzer/test/util/ast_check.dart
index 8119c60..6a3e71f 100644
--- a/pkg/analyzer/test/util/ast_check.dart
+++ b/pkg/analyzer/test/util/ast_check.dart
@@ -81,13 +81,6 @@
       (selected) => 'has arguments ${valueStr(selected)}',
     );
   }
-
-  CheckTarget<SimpleIdentifier> get name {
-    return nest(
-      value.name,
-      (selected) => 'has name ${valueStr(selected)}',
-    );
-  }
 }
 
 extension EnumDeclarationExtension on CheckTarget<EnumDeclaration> {
@@ -99,15 +92,6 @@
   }
 }
 
-extension FormalParameterExtension on CheckTarget<FormalParameter> {
-  CheckTarget<SimpleIdentifier?> get identifier {
-    return nest(
-      value.identifier,
-      (selected) => 'has identifier ${valueStr(selected)}',
-    );
-  }
-}
-
 extension SimpleFormalParameterExtension on CheckTarget<SimpleFormalParameter> {
   CheckTarget<Token?> get keyword {
     return nest(
@@ -147,13 +131,6 @@
 }
 
 extension SuperFormalParameterExtension on CheckTarget<SuperFormalParameter> {
-  CheckTarget<SimpleIdentifier> get identifier {
-    return nest(
-      value.identifier,
-      (selected) => 'has identifier ${valueStr(selected)}',
-    );
-  }
-
   CheckTarget<Token?> get keyword {
     return nest(
       value.keyword,
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index 3f9f608..27d9ac8 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -213,20 +213,20 @@
       if (className != null) {
         for (var declaration in unit.declarations) {
           if (declaration is ClassDeclaration &&
-              declaration.name.name == className) {
+              declaration.name2.lexeme == className) {
             for (var member in declaration.members) {
               if (member is ConstructorDeclaration) {
-                if (member.name!.name == name) {
+                if (member.name2!.lexeme == name) {
                   return member.offset;
                 }
               } else if (member is FieldDeclaration) {
                 for (var variable in member.fields.variables) {
-                  if (variable.name.name == name) {
+                  if (variable.name2.lexeme == name) {
                     return variable.offset;
                   }
                 }
               } else if (member is MethodDeclaration) {
-                if (member.name.name == name) {
+                if (member.name2.lexeme == name) {
                   return member.offset;
                 }
               }
@@ -239,12 +239,12 @@
       }
       for (var declaration in unit.declarations) {
         if (declaration is FunctionDeclaration) {
-          if (declaration.name.name == name) {
+          if (declaration.name2.lexeme == name) {
             return declaration.offset;
           }
         } else if (declaration is TopLevelVariableDeclaration) {
           for (var variable in declaration.variables.variables) {
-            if (variable.name.name == name) {
+            if (variable.name2.lexeme == name) {
               return variable.offset;
             }
           }
@@ -258,7 +258,7 @@
               .unit;
       for (var declaration in unit.declarations) {
         if (declaration is ClassDeclaration &&
-            declaration.name.name == className) {
+            declaration.name2.lexeme == className) {
           return declaration.offset;
         }
       }
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index 082f929..2adf9cd 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -30,7 +30,8 @@
   static ClassDeclaration getClass(CompilationUnit unit, String className) {
     NodeList<CompilationUnitMember> unitMembers = unit.declarations;
     for (CompilationUnitMember unitMember in unitMembers) {
-      if (unitMember is ClassDeclaration && unitMember.name.name == className) {
+      if (unitMember is ClassDeclaration &&
+          unitMember.name2.lexeme == className) {
         return unitMember;
       }
     }
@@ -47,7 +48,7 @@
     NodeList<ClassMember> classMembers = unitMember.members;
     for (ClassMember classMember in classMembers) {
       if (classMember is ConstructorDeclaration) {
-        if (classMember.name?.name == constructorName) {
+        if (classMember.name2?.lexeme == constructorName) {
           return classMember;
         }
       }
@@ -65,7 +66,7 @@
       if (classMember is FieldDeclaration) {
         NodeList<VariableDeclaration> fields = classMember.fields.variables;
         for (VariableDeclaration field in fields) {
-          if (field.name.name == fieldName) {
+          if (field.name2.lexeme == fieldName) {
             return field;
           }
         }
@@ -78,7 +79,7 @@
   /// with the given [className] in the given compilation [unit].
   static FieldElement? getFieldInClassElement(
       CompilationUnit unit, String className, String fieldName) {
-    return getFieldInClass(unit, className, fieldName).name.staticElement
+    return getFieldInClass(unit, className, fieldName).declaredElement
         as FieldElement;
   }
 
@@ -90,7 +91,7 @@
     NodeList<ClassMember> classMembers = unitMember.members;
     for (ClassMember classMember in classMembers) {
       if (classMember is MethodDeclaration) {
-        if (classMember.name.name == methodName) {
+        if (classMember.name2.lexeme == methodName) {
           return classMember;
         }
       }
@@ -124,7 +125,7 @@
     NodeList<CompilationUnitMember> unitMembers = unit.declarations;
     for (CompilationUnitMember unitMember in unitMembers) {
       if (unitMember is FunctionDeclaration) {
-        if (unitMember.name.name == functionName) {
+        if (unitMember.name2.lexeme == functionName) {
           return unitMember;
         }
       }
@@ -142,7 +143,7 @@
         NodeList<VariableDeclaration> variables =
             unitMember.variables.variables;
         for (VariableDeclaration variable in variables) {
-          if (variable.name.name == variableName) {
+          if (variable.name2.lexeme == variableName) {
             return variable;
           }
         }
@@ -154,7 +155,7 @@
   /// Return the top-level variable element with the given [name].
   static TopLevelVariableElement getTopLevelVariableElement(
       CompilationUnit unit, String name) {
-    return getTopLevelVariable(unit, name).name.staticElement
+    return getTopLevelVariable(unit, name).declaredElement
         as TopLevelVariableElement;
   }
 }
diff --git a/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
index d26eab1..7f1c6fb 100644
--- a/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
+++ b/pkg/analyzer/tool/messages/extract_errors_to_yaml.dart
@@ -173,11 +173,11 @@
         .unit;
     for (var declaration in unit.declarations) {
       if (declaration is! ClassDeclaration) continue;
-      var className = declaration.name.name;
+      var className = declaration.name2.lexeme;
       for (var member in declaration.members) {
         if (member is! FieldDeclaration) continue;
         for (var variable in member.fields.variables) {
-          (result[className] ??= {})[variable.name.name] = variable;
+          (result[className] ??= {})[variable.name2.lexeme] = variable;
         }
       }
     }
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 ec84066..9a17008 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
@@ -121,7 +121,7 @@
       {ArgumentList? argumentList,
       void Function()? bodyWriter,
       String? classNameGroupName,
-      SimpleIdentifier? constructorName,
+      String? constructorName,
       String? constructorNameGroupName,
       List<String>? fieldNames,
       void Function()? initializerWriter,
@@ -139,9 +139,9 @@
     if (constructorName != null) {
       write('.');
       if (constructorNameGroupName == null) {
-        write(constructorName.name);
+        write(constructorName);
       } else {
-        addSimpleLinkedEdit(constructorNameGroupName, constructorName.name);
+        addSimpleLinkedEdit(constructorNameGroupName, constructorName);
       }
     }
     write('(');
@@ -693,7 +693,7 @@
 
   @override
   void writeReference(Element element) {
-    if (element.enclosingElement2 is CompilationUnitElement) {
+    if (element.enclosingElement3 is CompilationUnitElement) {
       _writeLibraryReference(element);
     }
     write(element.displayName);
@@ -1112,10 +1112,10 @@
     if (type is TypeParameterType) {
       _initializeEnclosingElements();
       var element = type.element;
-      var enclosing = element.enclosingElement2;
+      var enclosing = element.enclosingElement3;
       while (enclosing is GenericFunctionTypeElement ||
           enclosing is ParameterElement) {
-        enclosing = enclosing!.enclosingElement2;
+        enclosing = enclosing!.enclosingElement3;
       }
       if (enclosing == _enclosingExecutable ||
           enclosing == _enclosingClass ||
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
index 7257b10..df27d1e 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/completion_target.dart
@@ -166,8 +166,19 @@
             // Try to replace with a comment token.
             var commentToken = _getContainingCommentToken(entity, offset);
             if (commentToken != null) {
-              return CompletionTarget._(
-                  offset, containingNode, commentToken, true);
+              // TODO(scheglov) This is duplicate of the code below.
+              // If the preceding comment is dartdoc token, then update
+              // the containing node to be the dartdoc comment.
+              // Otherwise completion is not required.
+              var docComment =
+                  _getContainingDocComment(containingNode, commentToken);
+              if (docComment != null) {
+                return CompletionTarget._(
+                    offset, docComment, commentToken, false);
+              } else {
+                return CompletionTarget._(
+                    offset, entryPoint, commentToken, true);
+              }
             }
             // Target found.
             return CompletionTarget._(offset, containingNode, entity, false);
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/element_suggestion_builder.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/element_suggestion_builder.dart
index e0a02d4..7d683d3 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/element_suggestion_builder.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/element_suggestion_builder.dart
@@ -70,7 +70,7 @@
           // Pair getter/setter by updating the existing suggestion
           if (existingSuggestion != null) {
             var getter = element.isGetter ? suggestion : existingSuggestion;
-            var elemKind = element.enclosingElement2 is ClassElement
+            var elemKind = element.enclosingElement3 is ClassElement
                 ? protocol.ElementKind.FIELD
                 : protocol.ElementKind.TOP_LEVEL_VARIABLE;
             existingSuggestion.element = protocol.Element(
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
index e567a2c..69c9428 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/optype.dart
@@ -75,6 +75,11 @@
       return optype;
     }
 
+    // Don't suggest anything in comments.
+    if (target.entity is CommentToken) {
+      return optype;
+    }
+
     var targetNode = target.containingNode;
     targetNode.accept(_OpTypeAstVisitor(optype, target.entity, offset));
 
@@ -466,7 +471,7 @@
 
   @override
   void visitDeclaredIdentifier(DeclaredIdentifier node) {
-    var identifier = node.identifier;
+    var identifier = node.name;
     if (identifier == entity &&
         offset < identifier.offset &&
         node.type == null) {
@@ -610,7 +615,7 @@
       // class A { static late ^ }
       if (node.staticKeyword != null &&
           variables.length == 1 &&
-          variables[0].name.name == 'late') {
+          variables[0].name2.lexeme == 'late') {
         optype.completionLocation = 'FieldDeclaration_static_late';
         optype.includeTypeNameSuggestions = true;
         return;
@@ -619,7 +624,7 @@
       if (node.staticKeyword == null &&
           offset <= node.semicolon.offset &&
           variables.length == 1 &&
-          variables[0].name.name == 'static') {
+          variables[0].name2.lexeme == 'static') {
         optype.completionLocation = 'FieldDeclaration_static';
         optype.includeTypeNameSuggestions = true;
         return;
@@ -645,7 +650,7 @@
 
   @override
   void visitFieldFormalParameter(FieldFormalParameter node) {
-    if (entity == node.identifier) {
+    if (entity == node.name) {
       optype.isPrefixed = true;
     } else {
       optype.includeReturnValueSuggestions = true;
@@ -788,7 +793,7 @@
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
     if (identical(entity, node.returnType) ||
-        identical(entity, node.name) && node.returnType == null) {
+        identical(entity, node.name2) && node.returnType == null) {
       optype.completionLocation = 'FunctionDeclaration_returnType';
       optype.includeTypeNameSuggestions = true;
     }
@@ -803,7 +808,7 @@
   @override
   void visitFunctionTypeAlias(FunctionTypeAlias node) {
     if (identical(entity, node.returnType) ||
-        identical(entity, node.name) && node.returnType == null) {
+        identical(entity, node.name2) && node.returnType == null) {
       optype.includeTypeNameSuggestions = true;
     }
   }
@@ -930,7 +935,7 @@
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
     if (identical(entity, node.returnType) ||
-        identical(entity, node.name) && node.returnType == null) {
+        identical(entity, node.name2) && node.returnType == null) {
       optype.completionLocation = 'MethodDeclaration_returnType';
     }
     // TODO(brianwilkerson) In visitFunctionDeclaration, this is conditional. It
@@ -1035,7 +1040,7 @@
 
   @override
   void visitNormalFormalParameter(NormalFormalParameter node) {
-    if (node.identifier != entity) {
+    if (node.name != entity) {
       optype.includeReturnValueSuggestions = true;
       optype.includeTypeNameSuggestions = true;
     }
@@ -1153,7 +1158,7 @@
   @override
   void visitSimpleFormalParameter(SimpleFormalParameter node) {
     var type = node.type;
-    var name = node.identifier;
+    var name = node.name;
 
     // "(Type^)" is parsed as a parameter with the _name_ "Type".
     if (type == null &&
@@ -1172,7 +1177,7 @@
 
     // If "(Type ^)", then include parameter names.
     if (type == null && name != null && name.end < offset) {
-      var nextToken = name.token.next;
+      var nextToken = name.next;
       if (nextToken != null && offset <= nextToken.offset) {
         optype.includeVarNameSuggestions = true;
         return;
diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
index f3446c6..7e7bbe2 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart
@@ -94,7 +94,7 @@
     suggestion.docSummary = getDartDocSummary(doc);
 
     suggestion.element = converter.convertElement(element);
-    var enclosingElement = element.enclosingElement2;
+    var enclosingElement = element.enclosingElement3;
     if (enclosingElement is ClassElement) {
       suggestion.declaringType = enclosingElement.displayName;
     }
diff --git a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
index 996d339..7aaab56 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/visitors/local_declaration_visitor.dart
@@ -35,7 +35,11 @@
 
   void declaredLabel(Label label, bool isCaseLabel) {}
 
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation? type) {}
+  void declaredLocalVar(
+    Token name,
+    TypeAnnotation? type,
+    LocalVariableElement declaredElement,
+  ) {}
 
   void declaredMethod(MethodDeclaration declaration) {}
 
@@ -123,11 +127,13 @@
     var forLoopParts = node.forLoopParts;
     if (forLoopParts is ForEachPartsWithDeclaration) {
       var loopVariable = forLoopParts.loopVariable;
-      declaredLocalVar(loopVariable.identifier, loopVariable.type);
+      declaredLocalVar(
+          loopVariable.name, loopVariable.type, loopVariable.declaredElement!);
     } else if (forLoopParts is ForPartsWithDeclarations) {
       var varList = forLoopParts.variables;
       for (var varDecl in varList.variables) {
-        declaredLocalVar(varDecl.name, varList.type);
+        declaredLocalVar(varDecl.name2, varList.type,
+            varDecl.declaredElement as LocalVariableElement);
       }
     }
     visitNode(node);
@@ -138,11 +144,13 @@
     var forLoopParts = node.forLoopParts;
     if (forLoopParts is ForEachPartsWithDeclaration) {
       var loopVariable = forLoopParts.loopVariable;
-      declaredLocalVar(loopVariable.identifier, loopVariable.type);
+      declaredLocalVar(
+          loopVariable.name, loopVariable.type, loopVariable.declaredElement!);
     } else if (forLoopParts is ForPartsWithDeclarations) {
       var varList = forLoopParts.variables;
       for (var varDecl in varList.variables) {
-        declaredLocalVar(varDecl.name, varList.type);
+        declaredLocalVar(varDecl.name2, varList.type,
+            varDecl.declaredElement as LocalVariableElement);
       }
     }
     visitNode(node);
@@ -302,7 +310,7 @@
         } else if (normalParam is SimpleFormalParameter) {
           type = normalParam.type;
         }
-        declaredParam(param.identifier!.token, param.declaredElement, type);
+        declaredParam(param.name!, param.declaredElement, type);
       }
     }
   }
@@ -314,13 +322,14 @@
           var varList = stmt.variables;
           for (var varDecl in varList.variables) {
             if (varDecl.end < offset) {
-              declaredLocalVar(varDecl.name, varList.type);
+              declaredLocalVar(varDecl.name2, varList.type,
+                  varDecl.declaredElement as LocalVariableElement);
             }
           }
         } else if (stmt is FunctionDeclarationStatement) {
           var declaration = stmt.functionDeclaration;
           if (declaration.offset < offset) {
-            var name = declaration.name.name;
+            var name = declaration.name2.lexeme;
             if (name.isNotEmpty) {
               declaredFunction(declaration);
               _visitTypeParameters(
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 8d281e6..cb41470 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -225,7 +225,7 @@
         // so should it return isEnumConstant = true?
         // Or should we return ElementKind.ENUM_CONSTANT here
         // in either or both of these cases?
-        element.type.element == element.enclosingElement2) {
+        element.type.element == element.enclosingElement3) {
       return plugin.ElementKind.ENUM_CONSTANT;
     }
     return convertElementKind(element.kind);
@@ -324,15 +324,15 @@
     if (currentElement is analyzer.CompilationUnitElement) {
       return currentElement;
     }
-    if (currentElement.enclosingElement2 is analyzer.LibraryElement) {
-      currentElement = currentElement.enclosingElement2;
+    if (currentElement.enclosingElement3 is analyzer.LibraryElement) {
+      currentElement = currentElement.enclosingElement3;
     }
     if (currentElement is analyzer.LibraryElement) {
       return currentElement.definingCompilationUnit;
     }
     for (;
         currentElement != null;
-        currentElement = currentElement.enclosingElement2) {
+        currentElement = currentElement.enclosingElement3) {
       if (currentElement is analyzer.CompilationUnitElement) {
         return currentElement;
       }
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index 2082af0..9574bb5 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -68,7 +68,7 @@
       {ArgumentList? argumentList,
       void Function()? bodyWriter,
       String? classNameGroupName,
-      SimpleIdentifier? constructorName,
+      String? constructorName,
       String? constructorNameGroupName,
       List<String>? fieldNames,
       void Function()? initializerWriter,
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index d356221..97b1c7f 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -106,9 +106,9 @@
       // the most likely completion is a super expression with same name
       var containingMethod =
           expression.thisOrAncestorOfType<MethodDeclaration>();
-      var id = containingMethod?.name;
+      var id = containingMethod?.name2;
       if (id != null) {
-        containingMethodName = id.name;
+        containingMethodName = id.lexeme;
       }
     }
     if (type == null || type.isDynamic) {
@@ -140,7 +140,7 @@
 
   @override
   void declaredClass(ClassDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       // no type
       finished();
     }
@@ -148,7 +148,7 @@
 
   @override
   void declaredClassTypeAlias(ClassTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       // no type
       finished();
     }
@@ -159,7 +159,7 @@
 
   @override
   void declaredField(FieldDeclaration fieldDecl, VariableDeclaration varDecl) {
-    if (varDecl.name.name == targetName) {
+    if (varDecl.name2.lexeme == targetName) {
       // Type provided by the element in computeFull above
       finished();
     }
@@ -167,7 +167,7 @@
 
   @override
   void declaredFunction(FunctionDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
@@ -178,7 +178,7 @@
 
   @override
   void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
@@ -189,7 +189,7 @@
 
   @override
   void declaredGenericTypeAlias(GenericTypeAlias declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var typeName = declaration.functionType?.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
@@ -207,17 +207,20 @@
   }
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation? type) {
-    if (name.name == targetName) {
-      var element = name.staticElement as VariableElement;
-      typeFound = element.type;
+  void declaredLocalVar(
+    Token name,
+    TypeAnnotation? type,
+    LocalVariableElement declaredElement,
+  ) {
+    if (name.lexeme == targetName) {
+      typeFound = declaredElement.type;
       finished();
     }
   }
 
   @override
   void declaredMethod(MethodDeclaration declaration) {
-    if (declaration.name.name == targetName) {
+    if (declaration.name2.lexeme == targetName) {
       var typeName = declaration.returnType;
       if (typeName != null) {
         typeFound = typeName.type;
@@ -237,7 +240,7 @@
   @override
   void declaredTopLevelVar(
       VariableDeclarationList varList, VariableDeclaration varDecl) {
-    if (varDecl.name.name == targetName) {
+    if (varDecl.name2.lexeme == targetName) {
       // Type provided by the element in computeFull above
       finished();
     }
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index be4d391..a1c5c55 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -26,6 +26,15 @@
     unit.accept(visitor);
   } else {
     var node = _getNodeForRange(unit, offset, length);
+
+    {
+      final parent = node?.parent;
+      // ignore: deprecated_member_use
+      if (parent is ConstructorDeclaration && parent.name == node) {
+        node = parent;
+      }
+    }
+
     if (node != null) {
       node = _getNavigationTargetNode(node);
     }
@@ -146,7 +155,7 @@
   void visitAnnotation(Annotation node) {
     var element = node.element;
     if (element is ConstructorElement && element.isSynthetic) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     var name = node.name;
     if (name is PrefixedIdentifier) {
@@ -271,12 +280,12 @@
   void visitConstructorDeclaration(ConstructorDeclaration node) {
     // For a default constructor, override the class name to be the declaration
     // itself rather than linking to the class.
-    var name = node.name;
-    if (name == null) {
+    var nameToken = node.name2;
+    if (nameToken == null) {
       computer._addRegionForNode(node.returnType, node.declaredElement);
     } else {
       node.returnType.accept(this);
-      name.accept(this);
+      computer._addRegionForToken(nameToken, node.declaredElement);
     }
     node.parameters.accept(this);
     node.initializers.accept(this);
@@ -330,7 +339,7 @@
 
   @override
   void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
-    computer._addRegionForNode(node.name, node.constructorElement);
+    computer._addRegionForToken(node.name2, node.constructorElement);
 
     var arguments = node.arguments;
     if (arguments != null) {
@@ -358,7 +367,7 @@
     final element = node.declaredElement;
     if (element is FieldFormalParameterElementImpl) {
       computer._addRegionForToken(node.thisKeyword, element.field);
-      computer._addRegionForNode(node.identifier, element.field);
+      computer._addRegionForToken(node.name, element.field);
     }
 
     node.type?.accept(this);
@@ -435,7 +444,7 @@
       RedirectingConstructorInvocation node) {
     Element? element = node.staticElement;
     if (element != null && element.isSynthetic) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     // add region
     computer._addRegionForToken(node.thisKeyword, element);
@@ -454,7 +463,7 @@
   void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
     Element? element = node.staticElement;
     if (element != null && element.isSynthetic) {
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     // add region
     computer._addRegionForToken(node.superKeyword, element);
@@ -469,7 +478,7 @@
     if (element is SuperFormalParameterElementImpl) {
       var superParameter = element.superConstructorParameter;
       computer._addRegionForToken(node.superKeyword, superParameter);
-      computer._addRegionForNode(node.identifier, superParameter);
+      computer._addRegionForToken(node.name, superParameter);
     }
 
     node.type?.accept(this);
diff --git a/pkg/analyzer_plugin/lib/utilities/range_factory.dart b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
index 5eed266..6a8789c 100644
--- a/pkg/analyzer_plugin/lib/utilities/range_factory.dart
+++ b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
@@ -117,6 +117,11 @@
     return SourceRange(offset, length);
   }
 
+  /// Return a source range that covers the same range as the given [node].
+  SourceRange entity(SyntacticEntity node) {
+    return SourceRange(node.offset, node.length);
+  }
+
   /// Return a source range that covers the same range as the given [error].
   SourceRange error(AnalysisError error) {
     return SourceRange(error.offset, error.length);
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index 3613ca6..ab696eb 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -960,7 +960,7 @@
   }
 
   static String _executableNameStr(ExecutableElement executable) {
-    var executableEnclosing = executable.enclosingElement2;
+    var executableEnclosing = executable.enclosingElement3;
     if (executableEnclosing is CompilationUnitElement) {
       return executable.name;
     } else if (executable is ConstructorElement) {
diff --git a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
index f06dbb2..a9374fc 100644
--- a/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/visitors/local_declaration_visitor_test.dart
@@ -4,6 +4,8 @@
 
 import 'package:analyzer/dart/analysis/utilities.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -42,7 +44,11 @@
   TestVisitor(int offset) : super(offset);
 
   @override
-  void declaredLocalVar(SimpleIdentifier name, TypeAnnotation? type) {
+  void declaredLocalVar(
+    Token name,
+    TypeAnnotation? type,
+    LocalVariableElement declaredElement,
+  ) {
     expect(name, isNotNull);
   }
 }
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 612c664..4d1de2b 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -325,7 +325,7 @@
       expect(element.parameters, isNull);
       expect(element.returnType, '_E1');
       // TODO(danrubel) determine why enum constant is not marked as deprecated
-      //analyzer.ClassElement classElement = engineElement.enclosingElement2;
+      //analyzer.ClassElement classElement = engineElement.enclosingElement3;
       //expect(classElement.isDeprecated, isTrue);
       expect(
           element.flags,
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 28e0205..ad2aacb 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -510,7 +510,7 @@
   Future<void> test_endEnd() async {
     await resolveTestCode('main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var mainName = mainFunction.name2;
     var mainBody = mainFunction.functionExpression.body;
     expect(range.endEnd(mainName, mainBody), SourceRange(4, 5));
   }
@@ -518,14 +518,14 @@
   Future<void> test_endLength() async {
     await resolveTestCode('main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var mainName = mainFunction.name2;
     expect(range.endLength(mainName, 3), SourceRange(4, 3));
   }
 
   Future<void> test_endStart() async {
     await resolveTestCode('main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var mainName = mainFunction.name2;
     var mainBody = mainFunction.functionExpression.body;
     expect(range.endStart(mainName, mainBody), SourceRange(4, 3));
   }
@@ -542,17 +542,16 @@
 
   Future<void> test_node() async {
     await resolveTestCode('main() {}');
-    var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
-    expect(range.node(mainName), SourceRange(0, 4));
+    var main = testUnit.declarations[0] as FunctionDeclaration;
+    expect(range.node(main), SourceRange(0, 9));
   }
 
   Future<void> test_nodes() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var mainParameters = mainFunction.functionExpression.parameters!;
     var mainBody = mainFunction.functionExpression.body;
-    expect(range.nodes([mainName, mainBody]), SourceRange(1, 9));
+    expect(range.nodes([mainParameters, mainBody]), SourceRange(5, 5));
   }
 
   Future<void> test_nodes_empty() async {
@@ -567,7 +566,7 @@
   Future<void> test_startEnd_nodeNode() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var mainName = mainFunction.name2;
     var mainBody = mainFunction.functionExpression.body;
     expect(range.startEnd(mainName, mainBody), SourceRange(1, 9));
   }
@@ -575,8 +574,8 @@
   Future<void> test_startLength_node() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
-    expect(range.startLength(mainName, 10), SourceRange(1, 10));
+    var parameters = mainFunction.functionExpression.parameters!;
+    expect(range.startLength(parameters, 10), SourceRange(5, 10));
   }
 
   void test_startOffsetEndOffset() {
@@ -586,16 +585,16 @@
   Future<void> test_startStart_nodeNode() async {
     await resolveTestCode('main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
+    var parameters = mainFunction.functionExpression.parameters!;
     var mainBody = mainFunction.functionExpression.body;
-    expect(range.startStart(mainName, mainBody), SourceRange(0, 7));
+    expect(range.startStart(parameters, mainBody), SourceRange(4, 3));
   }
 
   Future<void> test_token() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
-    var mainName = mainFunction.name;
-    expect(range.token(mainName.beginToken), SourceRange(1, 4));
+    var mainName = mainFunction.name2;
+    expect(range.token(mainName), SourceRange(1, 4));
   }
 
   Future<void> _deletionRange(String code,
diff --git a/pkg/frontend_server/bin/frontend_server_starter.dart b/pkg/frontend_server/bin/frontend_server_starter.dart
index 526c396..487f980 100644
--- a/pkg/frontend_server/bin/frontend_server_starter.dart
+++ b/pkg/frontend_server/bin/frontend_server_starter.dart
@@ -4,7 +4,7 @@
 import 'dart:async';
 import 'dart:io';
 
-import 'package:frontend_server/frontend_server.dart';
+import 'package:frontend_server/starter.dart';
 
 Future<Null> main(List<String> args) async {
   exitCode = await starter(args);
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index 9065163..4a2a525 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -7,7 +7,7 @@
 
 import 'dart:async';
 import 'dart:convert';
-import 'dart:io' show Directory, File, IOSink, stdin, stdout;
+import 'dart:io' show File, IOSink, stdout;
 import 'dart:typed_data' show BytesBuilder;
 
 import 'package:args/args.dart';
@@ -31,13 +31,11 @@
     show Component, loadComponentSourceFromBytes;
 import 'package:kernel/target/targets.dart' show targets, TargetFlags;
 import 'package:package_config/package_config.dart';
-import 'package:path/path.dart' as path;
 import 'package:usage/uuid/uuid.dart';
 
 import 'package:vm/incremental_compiler.dart' show IncrementalCompiler;
 import 'package:vm/kernel_front_end.dart';
 
-import 'src/binary_protocol.dart';
 import 'src/javascript_bundle.dart';
 import 'src/strong_components.dart';
 
@@ -205,6 +203,11 @@
   ..addFlag('print-incremental-dependencies',
       help: 'Print list of sources added and removed from compilation',
       defaultsTo: true)
+  ..addOption('resident-info-file-name',
+      help:
+          'Allowing for incremental compilation of changes when using the Dart CLI.'
+          ' Stores server information in this file for accessing later',
+      hide: true)
   ..addOption('verbosity',
       help: 'Sets the verbosity level of the compilation',
       defaultsTo: Verbosity.defaultValue,
@@ -1370,91 +1373,3 @@
     }
   });
 }
-
-/// Entry point for this module, that creates `_FrontendCompiler` instance and
-/// processes user input.
-/// `compiler` is an optional parameter so it can be replaced with mocked
-/// version for testing.
-Future<int> starter(
-  List<String> args, {
-  CompilerInterface compiler,
-  Stream<List<int>> input,
-  StringSink output,
-  IncrementalCompiler generator,
-  BinaryPrinterFactory binaryPrinterFactory,
-}) async {
-  ArgResults options;
-  try {
-    options = argParser.parse(args);
-  } catch (error) {
-    print('ERROR: $error\n');
-    print(usage);
-    return 1;
-  }
-
-  if (options['train']) {
-    if (options.rest.isEmpty) {
-      throw Exception('Must specify input.dart');
-    }
-
-    final String input = options.rest[0];
-    final String sdkRoot = options['sdk-root'];
-    final String platform = options['platform'];
-    final Directory temp =
-        Directory.systemTemp.createTempSync('train_frontend_server');
-    try {
-      final String outputTrainingDill = path.join(temp.path, 'app.dill');
-      final List<String> args = <String>[
-        '--incremental',
-        '--sdk-root=$sdkRoot',
-        '--output-dill=$outputTrainingDill',
-      ];
-      if (platform != null) {
-        args.add('--platform=${Uri.file(platform)}');
-      }
-      options = argParser.parse(args);
-      compiler ??=
-          FrontendCompiler(output, printerFactory: binaryPrinterFactory);
-
-      await compiler.compile(input, options, generator: generator);
-      compiler.acceptLastDelta();
-      await compiler.recompileDelta();
-      compiler.acceptLastDelta();
-      compiler.resetIncrementalCompiler();
-      await compiler.recompileDelta();
-      compiler.acceptLastDelta();
-      await compiler.recompileDelta();
-      compiler.acceptLastDelta();
-      return 0;
-    } finally {
-      temp.deleteSync(recursive: true);
-    }
-  }
-
-  final binaryProtocolAddressStr = options['binary-protocol-address'];
-  if (binaryProtocolAddressStr is String) {
-    runBinaryProtocol(binaryProtocolAddressStr);
-    return 0;
-  }
-
-  compiler ??= FrontendCompiler(output,
-      printerFactory: binaryPrinterFactory,
-      unsafePackageSerialization: options["unsafe-package-serialization"],
-      incrementalSerialization: options["incremental-serialization"],
-      useDebuggerModuleNames: options['debugger-module-names'],
-      emitDebugMetadata: options['experimental-emit-debug-metadata'],
-      emitDebugSymbols: options['emit-debug-symbols']);
-
-  if (options.rest.isNotEmpty) {
-    return await compiler.compile(options.rest[0], options,
-            generator: generator)
-        ? 0
-        : 254;
-  }
-
-  Completer<int> completer = Completer<int>();
-  var subscription = listenAndCompile(
-      compiler, input ?? stdin, options, completer,
-      generator: generator);
-  return completer.future..then((value) => subscription.cancel());
-}
diff --git a/pkg/frontend_server/lib/src/resident_frontend_server.dart b/pkg/frontend_server/lib/src/resident_frontend_server.dart
new file mode 100644
index 0000000..046fc0e
--- /dev/null
+++ b/pkg/frontend_server/lib/src/resident_frontend_server.dart
@@ -0,0 +1,385 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// @dart = 2.9
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' show File, InternetAddress, ServerSocket, Socket;
+import 'dart:typed_data' show Uint8List;
+
+import 'package:args/args.dart';
+
+// front_end/src imports below that require lint `ignore_for_file`
+// are a temporary state of things until frontend team builds better api
+// that would replace api used below. This api was made private in
+// an effort to discourage further use.
+// ignore_for_file: implementation_imports
+import 'package:front_end/src/api_unstable/vm.dart';
+
+import '../frontend_server.dart';
+
+extension on DateTime {
+  /// Truncates by [amount]
+  DateTime floorTime(Duration amount) {
+    return DateTime.fromMillisecondsSinceEpoch(this.millisecondsSinceEpoch -
+        this.millisecondsSinceEpoch % amount.inMilliseconds);
+  }
+}
+
+enum _ResidentState {
+  WAITING_FOR_FIRST_COMPILE,
+  COMPILING,
+  WAITING_FOR_RECOMPILE,
+}
+
+/// A wrapper around the FrontendCompiler, along with all the state needed
+/// to perform incremental compilations
+///
+/// TODO: Fix the race condition that occurs when the ResidentCompiler returns
+///   a kernel file to the CLI and another compilation request is given before
+///   the VM is able to launch from the kernel that was returned in the first
+///   compile request. The ResidentCompiler will be in the state of waiting for
+///   a recompile request and will subsequently process the request and modify
+///   the kernel file. However, it should be waiting for the VM to finish
+///   launching itself from this kernel until it modifies the kernel.
+///   As far as I can tell this race also exists in the current CLI run
+///   command when using pub's precompile pipeline.
+///
+/// TODO Fix the race condition that occurs when the same entry point is
+///   compiled concurrently.
+class ResidentCompiler {
+  File _entryPoint;
+  File _outputDill;
+  File _currentPackage;
+  ArgResults _compileOptions;
+  FrontendCompiler _compiler;
+  DateTime _lastCompileStartTime =
+      DateTime.now().floorTime(Duration(seconds: 1));
+  _ResidentState _state = _ResidentState.WAITING_FOR_FIRST_COMPILE;
+  final StringBuffer _compilerOutput = StringBuffer();
+  final Set<Uri> trackedSources = <Uri>{};
+  final List<String> _formattedOutput = <String>[];
+
+  ResidentCompiler(this._entryPoint, this._outputDill, this._compileOptions) {
+    _compiler = FrontendCompiler(_compilerOutput);
+    updateState(_compileOptions);
+  }
+
+  /// The [ResidentCompiler] will use the [newOptions] for future compilation
+  /// requests.
+  void updateState(ArgResults newOptions) {
+    final packages = newOptions['packages'];
+    _compileOptions = newOptions;
+    _currentPackage = packages == null ? null : File(packages);
+    // Refresh the compiler's output for the next compile
+    _compilerOutput.clear();
+    _formattedOutput.clear();
+    _state = _ResidentState.WAITING_FOR_FIRST_COMPILE;
+  }
+
+  /// Determines whether the current compile options are outdated with respect
+  /// to the [newOptions]
+  ///
+  /// TODO: account for all compiler options. See vm/bin/kernel_service.dart:88
+  bool areOptionsOutdated(ArgResults newOptions) {
+    final packagesPath = newOptions['packages'];
+    return (packagesPath != null && _currentPackage == null) ||
+        (packagesPath == null && _currentPackage != null) ||
+        (_currentPackage != null && _currentPackage.path != packagesPath) ||
+        (_currentPackage != null &&
+            !_lastCompileStartTime.isAfter(_currentPackage
+                .statSync()
+                .modified
+                .floorTime(Duration(seconds: 1))));
+  }
+
+  /// Compiles the entry point that this ResidentCompiler is hooked to.
+  /// Will perform incremental compilations when possible.
+  /// If the options are outdated, must use updateState to get a correct
+  /// compile.
+  Future<String> compile() async {
+    var incremental = false;
+
+    // If this entrypoint was previously compiled on this compiler instance,
+    // check which source files need to be recompiled in the incremental
+    // compilation request. If no files have been modified, we can return
+    // the cached kernel. Otherwise, perform an incremental compilation.
+    if (_state == _ResidentState.WAITING_FOR_RECOMPILE) {
+      var invalidatedUris =
+          await _getSourceFilesToRecompile(_lastCompileStartTime);
+      // No changes to source files detected and cached kernel file exists
+      // If a kernel file is removed in between compilation requests,
+      // fall through to procude the kernel in recompileDelta.
+      if (invalidatedUris.isEmpty && _outputDill.existsSync()) {
+        return _encodeCompilerOutput(
+            _outputDill.path, _formattedOutput, _compiler.errors.length,
+            usingCachedKernel: true);
+      }
+      _state = _ResidentState.COMPILING;
+      incremental = true;
+      invalidatedUris
+          .forEach((invalidatedUri) => _compiler.invalidate(invalidatedUri));
+      _compiler.errors.clear();
+      _lastCompileStartTime = DateTime.now().floorTime(Duration(seconds: 1));
+      await _compiler.recompileDelta(entryPoint: _entryPoint.path);
+    } else {
+      _state = _ResidentState.COMPILING;
+      _lastCompileStartTime = DateTime.now().floorTime(Duration(seconds: 1));
+      _compiler.errors.clear();
+      await _compiler.compile(_entryPoint.path, _compileOptions);
+    }
+
+    _interpretCompilerOutput(LineSplitter()
+        .convert(_compilerOutput.toString())
+        .where((line) => line.isNotEmpty)
+        .toList());
+    _compilerOutput.clear();
+    // forces the compiler to produce complete kernel files on each
+    // request, even when incrementally compiled.
+    _compiler
+      ..acceptLastDelta()
+      ..resetIncrementalCompiler();
+    _state = _ResidentState.WAITING_FOR_RECOMPILE;
+
+    return _encodeCompilerOutput(
+        _outputDill.path, _formattedOutput, _compiler.errors.length,
+        incrementalCompile: incremental);
+  }
+
+  /// Reads the compiler's [outputLines] to keep track of which files
+  /// need to be tracked. Adds correctly ANSI formatted output to
+  /// the [_formattedOutput] list.
+  void _interpretCompilerOutput(List<String> outputLines) {
+    _formattedOutput.clear();
+    var outputLineIndex = 0;
+    var acceptingErrorsOrVerboseOutput = true;
+    final boundaryKey = outputLines[outputLineIndex]
+        .substring(outputLines[outputLineIndex++].indexOf(' ') + 1);
+    var line = outputLines[outputLineIndex++];
+
+    while (acceptingErrorsOrVerboseOutput || !line.startsWith(boundaryKey)) {
+      if (acceptingErrorsOrVerboseOutput) {
+        if (line == boundaryKey) {
+          acceptingErrorsOrVerboseOutput = false;
+        } else {
+          _formattedOutput.add(line);
+        }
+      } else {
+        final diffUri = line.substring(1);
+        if (line.startsWith('+')) {
+          trackedSources.add(Uri.parse(diffUri));
+        } else if (line.startsWith('-')) {
+          trackedSources.remove(Uri.parse(diffUri));
+        }
+      }
+      line = outputLines[outputLineIndex++];
+    }
+  }
+
+  /// Returns a list of uris that need to be recompiled, based on the
+  /// [lastkernelCompileTime] timestamp.
+  /// Due to Windows timestamp granularity, all timestamps are truncated by
+  /// the second. This has no effect on correctness but may result in more
+  /// files being marked as invalid than are strictly required.
+  Future<List<Uri>> _getSourceFilesToRecompile(
+      DateTime lastKernelCompileTime) async {
+    final sourcesToRecompile = <Uri>[];
+    for (Uri uri in trackedSources) {
+      final sourceModifiedTime = File(uri.toFilePath())
+          .statSync()
+          .modified
+          .floorTime(Duration(seconds: 1));
+      if (!lastKernelCompileTime.isAfter(sourceModifiedTime)) {
+        sourcesToRecompile.add(uri);
+      }
+    }
+    return sourcesToRecompile;
+  }
+
+  /// Encodes [outputDillPath] and any [formattedErrors] in JSON to
+  /// be sent over the socket.
+  static String _encodeCompilerOutput(
+    String outputDillPath,
+    List<String> formattedErrors,
+    int errorCount, {
+    bool usingCachedKernel = false,
+    bool incrementalCompile = false,
+  }) {
+    return jsonEncode(<String, Object>{
+      "success": errorCount == 0,
+      "errorCount": errorCount,
+      "compilerOutputLines": formattedErrors,
+      "output-dill": outputDillPath,
+      if (usingCachedKernel) "returnedStoredKernel": true, // used for testing
+      if (incrementalCompile) "incremental": true, // used for testing
+    });
+  }
+}
+
+/// Maintains [FrontendCompiler] instances for kernel compilations, meant to be
+/// used by the Dart CLI via sockets.
+///
+/// The [ResidentFrontendServer] manages compilation requests for VM targets
+/// between any number of dart entrypoints, and utilizes incremental
+/// compilation and existing kernel files for faster compile times.
+///
+/// Communication is handled on the socket set up by the
+/// residentListenAndCompile method.
+class ResidentFrontendServer {
+  static const _commandString = 'command';
+  static const _executableString = 'executable';
+  static const _packageString = 'packages';
+  static const _outputString = 'output-dill';
+  static const _shutdownString = 'shutdown';
+  static const _compilerLimit = 3;
+
+  static final shutdownCommand =
+      jsonEncode(<String, Object>{_commandString: _shutdownString});
+  static final _shutdownJsonResponse =
+      jsonEncode(<String, Object>{_shutdownString: true});
+  static final _sdkBinariesUri = computePlatformBinariesLocation();
+  static final _sdkUri = _sdkBinariesUri.resolve('../../');
+  static final _platformKernelUri =
+      _sdkBinariesUri.resolve('vm_platform_strong.dill');
+  static final Map<String, ResidentCompiler> compilers = {};
+
+  /// Takes in JSON [input] from the socket and compiles the request,
+  /// using incremental compilation if possible. Returns a JSON string to be
+  /// sent back to the client socket containing either an error message or the
+  /// kernel file to be used.
+  ///
+  /// If the command is compile, paths the source file, package_config.json,
+  /// and the output-dill file must be provided via "executable", "packages",
+  /// and "output-dill".
+  static Future<String> handleRequest(String input) async {
+    Map<String, dynamic> request;
+    try {
+      request = jsonDecode(input);
+    } on FormatException {
+      return _encodeErrorMessage('$input is not valid JSON.');
+    }
+
+    switch (request[_commandString]) {
+      case 'compile':
+        if (request[_executableString] == null ||
+            request[_outputString] == null) {
+          return _encodeErrorMessage(
+              'compilation requests must include an $_executableString and an $_outputString path.');
+        }
+        final executablePath = request[_executableString];
+        final cachedDillPath = request[_outputString];
+        final options = argParser.parse(<String>[
+          '--sdk-root=${_sdkUri.toFilePath()}',
+          '--incremental',
+          if (request.containsKey(_packageString))
+            '--packages=${request[_packageString]}',
+          '--platform=${_platformKernelUri.path}',
+          '--output-dill=$cachedDillPath',
+          '--target=vm',
+          '--filesystem-scheme',
+          'org-dartlang-root',
+          if (request['verbose'] == true) '--verbose',
+        ]);
+
+        var residentCompiler = compilers[executablePath];
+        if (residentCompiler == null) {
+          // Avoids using too much memory
+          if (compilers.length >= ResidentFrontendServer._compilerLimit) {
+            compilers.remove(compilers.keys.first);
+          }
+          residentCompiler = ResidentCompiler(
+              File(executablePath), File(cachedDillPath), options);
+          compilers[executablePath] = residentCompiler;
+        } else if (residentCompiler.areOptionsOutdated(options)) {
+          residentCompiler.updateState(options);
+        }
+
+        return await residentCompiler.compile();
+      case 'shutdown':
+        return _shutdownJsonResponse;
+      default:
+        return _encodeErrorMessage(
+            'Unsupported command: ${request[_commandString]}.');
+    }
+  }
+
+  /// Encodes the [message] in JSON to be sent over the socket.
+  static String _encodeErrorMessage(String message) =>
+      jsonEncode(<String, Object>{"success": false, "errorMessage": message});
+
+  /// Used to create compile requests for the ResidentFrontendServer.
+  /// Returns a JSON string that the resident compiler will be able to
+  /// interpret.
+  static String createCompileJSON(
+      {String executable,
+      String packages,
+      String outputDill,
+      bool verbose = false}) {
+    return jsonEncode(<String, Object>{
+      "command": "compile",
+      "executable": executable,
+      if (packages != null) "packages": packages,
+      "output-dill": outputDill,
+      "verbose": verbose,
+    });
+  }
+}
+
+/// Sends the JSON string [request] to the resident frontend server
+/// and returns server's response in JSON
+///
+/// Clients must use this function when wanting to interact with a
+/// ResidentFrontendServer instance.
+Future<Map<String, dynamic>> sendAndReceiveResponse(
+    InternetAddress address, int port, String request) async {
+  try {
+    final client = await Socket.connect(address, port);
+    client.write(request);
+    final data = await client.first;
+    client.destroy();
+    return jsonDecode(String.fromCharCodes(data));
+  } catch (e) {
+    return <String, Object>{"success": false, "errorMessage": e.toString()};
+  }
+}
+
+/// Listens for compilation commands from socket connections on the
+/// provided [address] and [port].
+Future<StreamSubscription<Socket>> residentListenAndCompile(
+    InternetAddress address, int port, File serverInfoFile) async {
+  ServerSocket server;
+  try {
+    // TODO: have server shut itself off after period of inactivity
+    server = await ServerSocket.bind(address, port);
+    serverInfoFile
+      ..writeAsStringSync(
+          'address:${server.address.address} port:${server.port}');
+  } catch (e) {
+    print('Error: $e\n');
+    return null;
+  }
+  print(
+      'Resident Frontend Compiler is listening at ${server.address.address}:${server.port}');
+  return server.listen((client) {
+    client.listen((Uint8List data) async {
+      String result = await ResidentFrontendServer.handleRequest(
+          String.fromCharCodes(data));
+      client.write(result);
+      if (result == ResidentFrontendServer._shutdownJsonResponse) {
+        if (serverInfoFile.existsSync()) {
+          serverInfoFile.deleteSync();
+        }
+        await server.close();
+      }
+    }, onError: (error) {
+      client.close();
+    }, onDone: () {
+      client.close();
+    });
+  }, onError: (_) {
+    if (serverInfoFile.existsSync()) {
+      serverInfoFile.deleteSync();
+    }
+  });
+}
diff --git a/pkg/frontend_server/lib/starter.dart b/pkg/frontend_server/lib/starter.dart
new file mode 100644
index 0000000..e88a7dd
--- /dev/null
+++ b/pkg/frontend_server/lib/starter.dart
@@ -0,0 +1,111 @@
+// 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.md file.
+
+// @dart = 2.9
+import 'dart:async';
+import 'dart:io' show Directory, File, InternetAddress, stdin;
+
+import 'package:args/args.dart';
+import 'package:path/path.dart' as path;
+import 'package:vm/incremental_compiler.dart' show IncrementalCompiler;
+
+import 'frontend_server.dart';
+import 'src/binary_protocol.dart';
+import 'src/resident_frontend_server.dart';
+
+/// Entry point for this module, that creates either a `_FrontendCompiler`
+/// instance or a `ResidentFrontendServer` instance and
+/// processes user input.
+/// `compiler` is an optional parameter so it can be replaced with mocked
+/// version for testing.
+Future<int> starter(
+  List<String> args, {
+  CompilerInterface compiler,
+  Stream<List<int>> input,
+  StringSink output,
+  IncrementalCompiler generator,
+  BinaryPrinterFactory binaryPrinterFactory,
+}) async {
+  ArgResults options;
+  try {
+    options = argParser.parse(args);
+  } catch (error) {
+    print('ERROR: $error\n');
+    print(usage);
+    return 1;
+  }
+  if (options['resident-info-file-name'] != null) {
+    var serverSubscription = await residentListenAndCompile(
+        InternetAddress.loopbackIPv4,
+        0,
+        File(options['resident-info-file-name']));
+    return serverSubscription == null ? 1 : 0;
+  }
+
+  if (options['train']) {
+    if (options.rest.isEmpty) {
+      throw Exception('Must specify input.dart');
+    }
+
+    final String input = options.rest[0];
+    final String sdkRoot = options['sdk-root'];
+    final String platform = options['platform'];
+    final Directory temp =
+        Directory.systemTemp.createTempSync('train_frontend_server');
+    try {
+      final String outputTrainingDill = path.join(temp.path, 'app.dill');
+      final List<String> args = <String>[
+        '--incremental',
+        '--sdk-root=$sdkRoot',
+        '--output-dill=$outputTrainingDill',
+      ];
+      if (platform != null) {
+        args.add('--platform=${Uri.file(platform)}');
+      }
+      options = argParser.parse(args);
+      compiler ??=
+          FrontendCompiler(output, printerFactory: binaryPrinterFactory);
+
+      await compiler.compile(input, options, generator: generator);
+      compiler.acceptLastDelta();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      compiler.resetIncrementalCompiler();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      await compiler.recompileDelta();
+      compiler.acceptLastDelta();
+      return 0;
+    } finally {
+      temp.deleteSync(recursive: true);
+    }
+  }
+
+  final binaryProtocolAddressStr = options['binary-protocol-address'];
+  if (binaryProtocolAddressStr is String) {
+    runBinaryProtocol(binaryProtocolAddressStr);
+    return 0;
+  }
+
+  compiler ??= FrontendCompiler(output,
+      printerFactory: binaryPrinterFactory,
+      unsafePackageSerialization: options["unsafe-package-serialization"],
+      incrementalSerialization: options["incremental-serialization"],
+      useDebuggerModuleNames: options['debugger-module-names'],
+      emitDebugMetadata: options['experimental-emit-debug-metadata'],
+      emitDebugSymbols: options['emit-debug-symbols']);
+
+  if (options.rest.isNotEmpty) {
+    return await compiler.compile(options.rest[0], options,
+            generator: generator)
+        ? 0
+        : 254;
+  }
+
+  Completer<int> completer = Completer<int>();
+  var subscription = listenAndCompile(
+      compiler, input ?? stdin, options, completer,
+      generator: generator);
+  return completer.future..then((value) => subscription.cancel());
+}
diff --git a/pkg/frontend_server/test/frontend_server_flutter.dart b/pkg/frontend_server/test/frontend_server_flutter.dart
index fee26f6..3423d16 100644
--- a/pkg/frontend_server/test/frontend_server_flutter.dart
+++ b/pkg/frontend_server/test/frontend_server_flutter.dart
@@ -1,3 +1,7 @@
+// 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.md file.
+
 // @dart = 2.9
 import 'dart:async' show StreamController;
 import 'dart:convert' show utf8, LineSplitter;
@@ -13,7 +17,7 @@
 import 'package:front_end/src/api_unstable/vm.dart'
     show CompilerOptions, NnbdMode, StandardFileSystem;
 
-import 'package:frontend_server/frontend_server.dart';
+import 'package:frontend_server/starter.dart';
 
 main(List<String> args) async {
   String flutterDir;
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 9cc623d..5bac7ef 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -1,3 +1,7 @@
+// 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.md file.
+
 // @dart = 2.9
 // ignore_for_file: empty_catches
 
@@ -10,6 +14,7 @@
 import 'package:_fe_analyzer_shared/src/macros/compiler/request_channel.dart';
 import 'package:front_end/src/api_unstable/vm.dart';
 import 'package:frontend_server/frontend_server.dart';
+import 'package:frontend_server/starter.dart';
 import 'package:kernel/ast.dart' show Component;
 import 'package:kernel/binary/ast_to_binary.dart';
 import 'package:kernel/kernel.dart' show loadComponentFromBinary;
diff --git a/pkg/frontend_server/test/src/resident_frontend_server_test.dart b/pkg/frontend_server/test/src/resident_frontend_server_test.dart
new file mode 100644
index 0000000..bf96a29
--- /dev/null
+++ b/pkg/frontend_server/test/src/resident_frontend_server_test.dart
@@ -0,0 +1,526 @@
+// 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.md file.
+
+// @dart = 2.9
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:frontend_server/starter.dart';
+import 'package:frontend_server/src/resident_frontend_server.dart';
+import 'package:path/path.dart' as path;
+import 'package:test/test.dart';
+
+void main() async {
+  // Files are considered to be modified if the modification timestamp is
+  // during the same second of the last compile time due to the
+  // granularity of file stat on windows.
+  // Waiting for this number of milliseconds guarantees that the files in
+  // the unit tests will not be counted as modified.
+  const STAT_GRANULARITY = 1100;
+
+  group('Resident Frontend Server: invalid input: ', () {
+    test('no command given', () async {
+      final jsonResponse = await ResidentFrontendServer.handleRequest(
+          jsonEncode(<String, Object>{"no": "command"}));
+      expect(
+          jsonResponse,
+          equals(jsonEncode(<String, Object>{
+            "success": false,
+            "errorMessage": "Unsupported command: null."
+          })));
+    });
+
+    test('invalid command', () async {
+      final jsonResponse = await ResidentFrontendServer.handleRequest(
+          jsonEncode(<String, Object>{"command": "not a command"}));
+      expect(
+          jsonResponse,
+          equals(jsonEncode(<String, Object>{
+            "success": false,
+            "errorMessage": "Unsupported command: not a command."
+          })));
+    });
+
+    test('not a JSON request', () async {
+      final jsonResponse = await ResidentFrontendServer.handleRequest("hello");
+      expect(
+          jsonResponse,
+          equals(jsonEncode(<String, Object>{
+            "success": false,
+            "errorMessage": "hello is not valid JSON."
+          })));
+    });
+
+    test('missing files for compile command', () async {
+      final jsonResponse = await ResidentFrontendServer.handleRequest(
+          jsonEncode(<String, Object>{"command": "compile"}));
+      expect(
+          jsonResponse,
+          equals(jsonEncode(<String, Object>{
+            "success": false,
+            "errorMessage":
+                "compilation requests must include an executable and an output-dill path."
+          })));
+    });
+  });
+
+  group('Resident Frontend Server: compile tests: ', () {
+    Directory d;
+    File executable, package, cachedDill;
+
+    setUp(() async {
+      d = Directory.systemTemp.createTempSync();
+      executable = File(path.join(d.path, 'src1.dart'))
+        ..createSync()
+        ..writeAsStringSync('void main() {print("hello " "there");}');
+      package = File(path.join(d.path, '.dart_tool', 'package_config.json'))
+        ..createSync(recursive: true)
+        ..writeAsStringSync('''
+  {
+    "configVersion": 2,
+    "packages": [
+      {
+        "name": "hello",
+        "rootUri": "../",
+        "packageUri": "./"
+      }
+    ]
+  }
+  ''');
+      cachedDill = File(path.join(d.path, 'src1.dart.dill'));
+    });
+
+    tearDown(() async {
+      d.delete(recursive: true);
+      ResidentFrontendServer.compilers.clear();
+    });
+
+    test('initial compile, basic', () async {
+      final compileResult = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      expect(compileResult['success'], true);
+      expect(compileResult['errorCount'], 0);
+      expect(compileResult['output-dill'], equals(cachedDill.path));
+    });
+
+    test('no package_config.json provided', () async {
+      final compileResult = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path, outputDill: cachedDill.path)));
+
+      expect(compileResult['success'], true);
+      expect(compileResult['errorCount'], 0);
+      expect(compileResult['output-dill'], equals(cachedDill.path));
+    });
+
+    test('incremental compilation', () async {
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+        executable: executable.path,
+        packages: package.path,
+        outputDill: cachedDill.path,
+      )));
+      executable.writeAsStringSync(
+          executable.readAsStringSync().replaceFirst('there', 'world'));
+
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+        executable: executable.path,
+        packages: package.path,
+        outputDill: cachedDill.path,
+      )));
+
+      expect(compileResults1['success'], true);
+      expect(compileResults1['errorCount'],
+          allOf(0, equals(compileResults2['errorCount'])));
+      expect(compileResults2['output-dill'],
+          equals(compileResults1['output-dill']));
+      expect(compileResults2['incremental'], true);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.first,
+          equals(Uri.file(executable.path)));
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.length,
+          1);
+    });
+
+    test(
+        'compiling twice with no modifications returns cached kernel without invoking compiler',
+        () async {
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      expect(compileResults1['errorCount'],
+          allOf(0, equals(compileResults2['errorCount'])));
+      expect(compileResults1['output-dill'],
+          equals(compileResults2['output-dill']));
+      expect(compileResults2['returnedStoredKernel'], true);
+      expect(ResidentFrontendServer.compilers.length, 1);
+    });
+
+    test('switch entrypoints gracefully', () async {
+      final executable2 = File(path.join(d.path, 'src2.dart'))
+        ..writeAsStringSync('void main() {}');
+      final entryPointDill = File(path.join(d.path, 'src2.dart.dill'));
+
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable2.path,
+                  packages: package.path,
+                  outputDill: entryPointDill.path)));
+
+      expect(compileResults1['success'],
+          allOf(true, equals(compileResults2['success'])));
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.length,
+          1);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.first,
+          equals(Uri.file(executable.path)));
+      expect(
+          ResidentFrontendServer
+              .compilers[executable2.path].trackedSources.length,
+          1);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable2.path].trackedSources.first,
+          equals(Uri.file(executable2.path)));
+      expect(ResidentFrontendServer.compilers.length, 2);
+    });
+
+    test('Cached kernel is removed between compilation requests', () async {
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      executable.writeAsStringSync(
+          executable.readAsStringSync().replaceFirst('there', 'world'));
+      cachedDill.deleteSync();
+      expect(cachedDill.existsSync(), false);
+
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      expect(compileResults1['success'], true);
+      expect(compileResults1['errorCount'],
+          allOf(equals(compileResults2['errorCount']), 0));
+      expect(compileResults2['returnedStoredKernel'], null);
+      expect(compileResults2['incremental'], true);
+      expect(cachedDill.existsSync(), true);
+      expect(ResidentFrontendServer.compilers.length, 1);
+    });
+
+    test('maintains tracked sources', () async {
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+      final executable2 = File(path.join(d.path, 'src2.dart'))
+        ..createSync()
+        ..writeAsStringSync('''
+            import 'src3.dart';
+            void main() {}''');
+      final executable3 = File(path.join(d.path, 'src3.dart'))
+        ..createSync()
+        ..writeAsStringSync('''
+            void fn() {}''');
+
+      // adding or removing package_config.json while maintaining the same entrypoint
+      // should not alter tracked sources
+      await ResidentFrontendServer.handleRequest(
+          ResidentFrontendServer.createCompileJSON(
+              executable: executable.path, outputDill: cachedDill.path));
+      await ResidentFrontendServer.handleRequest(
+          ResidentFrontendServer.createCompileJSON(
+              executable: executable.path,
+              packages: package.path,
+              outputDill: cachedDill.path));
+      final compileResult1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path, outputDill: cachedDill.path)));
+
+      expect(compileResult1['success'], true);
+      expect(compileResult1['returnedStoredKernel'], null);
+      expect(compileResult1['incremental'], null);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.length,
+          1);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.first,
+          equals(Uri.file(executable.path)));
+
+      // switching entrypoints, packages, and modifying packages
+      await ResidentFrontendServer.handleRequest(
+          ResidentFrontendServer.createCompileJSON(
+              executable: executable2.path, outputDill: cachedDill.path));
+      await ResidentFrontendServer.handleRequest(
+          ResidentFrontendServer.createCompileJSON(
+              executable: executable2.path,
+              packages: package.path,
+              outputDill: cachedDill.path));
+
+      package.writeAsStringSync(package.readAsStringSync());
+      // Forces package to be behind the next computed kernel by 1 second
+      // so that the final compilation will be incremental
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+
+      final compileResult2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable2.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      expect(compileResult2['success'], true);
+      expect(compileResult2['incremental'], null);
+      expect(compileResult2['returnedStoredKernel'], null);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable2.path].trackedSources.length,
+          greaterThanOrEqualTo(2));
+      expect(
+          ResidentFrontendServer.compilers[executable2.path].trackedSources,
+          containsAll(
+              <Uri>{Uri.file(executable2.path), Uri.file(executable3.path)}));
+
+      // remove a source
+      executable2.writeAsStringSync('void main() {}');
+      final compileResult3 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable2.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      expect(compileResult3['success'], true);
+      expect(compileResult3['incremental'], true);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable2.path].trackedSources.length,
+          greaterThanOrEqualTo(1));
+      expect(ResidentFrontendServer.compilers[executable2.path].trackedSources,
+          containsAll(<Uri>{Uri.file(executable2.path)}));
+    });
+
+    test('continues to work after compiler error is produced', () async {
+      final originalContent = executable.readAsStringSync();
+      final newContent = originalContent.replaceAll(';', '@');
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+
+      executable.writeAsStringSync(newContent);
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      executable.writeAsStringSync(originalContent);
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+
+      expect(compileResults1['success'], false);
+      expect(compileResults1['errorCount'], greaterThan(1));
+      expect(compileResults2['success'], true);
+      expect(compileResults2['errorCount'], 0);
+      expect(compileResults2['incremental'], true);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.length,
+          1);
+      expect(
+          ResidentFrontendServer
+              .compilers[executable.path].trackedSources.first,
+          equals(Uri.file(executable.path)));
+    });
+
+    test('using cached kernel maintains error messages', () async {
+      final originalContent = executable.readAsStringSync();
+      executable.writeAsStringSync(originalContent.replaceFirst(';', ''));
+      await Future.delayed(Duration(milliseconds: STAT_GRANULARITY));
+
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+        executable: executable.path,
+        packages: package.path,
+        outputDill: cachedDill.path,
+      )));
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+        executable: executable.path,
+        packages: package.path,
+        outputDill: cachedDill.path,
+      )));
+      executable.writeAsStringSync(originalContent);
+      final compileResults3 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+        executable: executable.path,
+        packages: package.path,
+        outputDill: cachedDill.path,
+      )));
+
+      expect(compileResults2['returnedStoredKernel'], true);
+      expect(compileResults1['errorCount'],
+          allOf(1, equals(compileResults2['errorCount'])));
+      expect(
+          compileResults2['compilerOutputLines'] as List<dynamic>,
+          containsAllInOrder(
+              compileResults1['compilerOutputLines'] as List<dynamic>));
+      expect(compileResults3['errorCount'], 0);
+      expect(compileResults3['incremental'], true);
+    });
+
+    test('enforces compiler limit', () async {
+      final executable2 = File(path.join(d.path, 'src2.dart'))
+        ..createSync()
+        ..writeAsStringSync('''
+            import 'src3.dart';
+            void main() {}''');
+      final executable3 = File(path.join(d.path, 'src3.dart'))
+        ..createSync()
+        ..writeAsStringSync('''
+            void main() {}''');
+      final executable4 = File(path.join(d.path, 'src4.dart'))
+        ..createSync()
+        ..writeAsStringSync('''
+            void main() {}''');
+      final compileResults1 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      final compileResults2 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable2.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      final compileResults3 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable3.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      final compileResults4 = jsonDecode(
+          await ResidentFrontendServer.handleRequest(
+              ResidentFrontendServer.createCompileJSON(
+                  executable: executable4.path,
+                  packages: package.path,
+                  outputDill: cachedDill.path)));
+      expect(
+          compileResults1['success'],
+          allOf(
+              true,
+              equals(compileResults2['success']),
+              equals(compileResults3['success']),
+              equals(compileResults4['success'])));
+      expect(ResidentFrontendServer.compilers.length, 3);
+      expect(
+          ResidentFrontendServer.compilers.containsKey(executable4.path), true);
+    });
+  });
+
+  group('Resident Frontend Server: socket tests: ', () {
+    Directory d;
+    File serverInfo;
+
+    setUp(() {
+      d = Directory.systemTemp.createTempSync();
+      serverInfo = File(path.join(d.path, 'info.txt'));
+    });
+    tearDown(() {
+      d.deleteSync(recursive: true);
+    });
+
+    test('ServerSocket fails to bind', () async {
+      final result = await residentListenAndCompile(
+          InternetAddress.loopbackIPv4, -1, serverInfo);
+
+      expect(serverInfo.existsSync(), false);
+      expect(result, null);
+    });
+
+    test('socket passes messages properly and shutsdown properly', () async {
+      await residentListenAndCompile(
+          InternetAddress.loopbackIPv4, 0, serverInfo);
+
+      expect(serverInfo.existsSync(), true);
+      final info = serverInfo.readAsStringSync();
+      final address = InternetAddress(
+          info.substring(info.indexOf(':') + 1, info.indexOf(' ')));
+      final port = int.parse(info.substring(info.lastIndexOf(':') + 1));
+
+      final shutdownResult = await sendAndReceiveResponse(
+          address, port, ResidentFrontendServer.shutdownCommand);
+
+      expect(shutdownResult, equals(<String, dynamic>{"shutdown": true}));
+      expect(serverInfo.existsSync(), false);
+    });
+
+    test('resident server starter', () async {
+      final returnValue =
+          starter(['--resident-info-file-name=${serverInfo.path}']);
+      expect(await returnValue, 0);
+      expect(serverInfo.existsSync(), true);
+      final info = serverInfo.readAsStringSync();
+      final address = InternetAddress(
+          info.substring(info.indexOf(':') + 1, info.indexOf(' ')));
+      final port = int.parse(info.substring(info.lastIndexOf(':') + 1));
+
+      var result = await sendAndReceiveResponse(
+          address, port, ResidentFrontendServer.shutdownCommand);
+      expect(result, equals(<String, dynamic>{"shutdown": true}));
+      expect(serverInfo.existsSync(), false);
+
+      result = await sendAndReceiveResponse(
+          address, port, ResidentFrontendServer.shutdownCommand);
+      expect(result['errorMessage'], contains('SocketException'));
+    });
+  });
+}
diff --git a/pkg/nnbd_migration/lib/instrumentation.dart b/pkg/nnbd_migration/lib/instrumentation.dart
index 62ecd1f..2807b4b4 100644
--- a/pkg/nnbd_migration/lib/instrumentation.dart
+++ b/pkg/nnbd_migration/lib/instrumentation.dart
@@ -37,7 +37,7 @@
   factory CodeReference.fromElement(Element element) {
     var unitElement = element.thisOrAncestorOfType<CompilationUnitElement>();
     if (unitElement == null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is LibraryElement) {
         unitElement = enclosingElement.definingCompilationUnit;
       } else {
@@ -76,7 +76,7 @@
       if (elementName != null) {
         parts.add(elementName);
       }
-      element = element.enclosingElement2;
+      element = element.enclosingElement3;
     }
     if (parts.isEmpty) return null;
     return parts.reversed.join('.');
diff --git a/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart b/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
index 71c8a70..519bd12 100644
--- a/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
@@ -52,7 +52,7 @@
   /// because the relationship between a class and its superclass is not
   /// nullable.
   DecoratedType getDecoratedSupertype(
-      ClassElement class_, ClassElement superclass) {
+      ClassElement class_, InterfaceElement superclass) {
     assert(!(class_.library.isDartCore && class_.name == 'Null'));
     if (superclass.typeParameters.isEmpty) {
       return DecoratedType(
diff --git a/pkg/nnbd_migration/lib/src/decorated_type.dart b/pkg/nnbd_migration/lib/src/decorated_type.dart
index 33556b2..12b3f4d 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type.dart
@@ -184,8 +184,8 @@
     // We'll be storing the type parameter bounds in
     // [_decoratedTypeParameterBounds] so the type parameter needs to have an
     // enclosing element of `null`.
-    assert(parameter.enclosingElement2 == null,
-        '$parameter should not have parent ${parameter.enclosingElement2}');
+    assert(parameter.enclosingElement3 == null,
+        '$parameter should not have parent ${parameter.enclosingElement3}');
   }
 
   /// If `this` represents an interface type, returns the substitution necessary
@@ -415,7 +415,7 @@
             Map<TypeParameterElement, DecoratedType>.from(substitution);
         for (int i = 0; i < typeFormals.length; i++) {
           // Check if it's a fresh type variable.
-          if (undecoratedResult.typeFormals[i].enclosingElement2 == null) {
+          if (undecoratedResult.typeFormals[i].enclosingElement3 == null) {
             substitution[typeFormals[i]] =
                 DecoratedType._forTypeParameterSubstitution(
                     undecoratedResult.typeFormals[i]);
@@ -542,7 +542,7 @@
   final _parentedBounds = <TypeParameterElement, DecoratedType?>{};
 
   DecoratedType? get(TypeParameterElement element) {
-    if (element.enclosingElement2 == null) {
+    if (element.enclosingElement3 == null) {
       return _orphanBounds[element];
     } else {
       return _parentedBounds[element];
@@ -550,7 +550,7 @@
   }
 
   void put(TypeParameterElement element, DecoratedType? bounds) {
-    if (element.enclosingElement2 == null) {
+    if (element.enclosingElement3 == null) {
       _orphanBounds[element] = bounds;
     } else {
       _parentedBounds[element] = bounds;
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 6ce51d2..766c3fa 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/dart/element/type_system.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/member.dart';
@@ -279,7 +280,7 @@
     Map<TypeParameterElement, DecoratedType?>? substitution;
     Element? baseElement = element.declaration;
     if (targetType != null) {
-      var enclosingElement = baseElement!.enclosingElement2;
+      var enclosingElement = baseElement!.enclosingElement3;
       if (enclosingElement is ClassElement) {
         if (targetType.type.explicitBound is InterfaceType &&
             enclosingElement.typeParameters.isNotEmpty) {
@@ -473,8 +474,8 @@
       var assignee =
           getWriteOrReadElement(node.leftHandSide as SimpleIdentifier)!;
       var enclosingElementOfCurrentFunction =
-          _currentFunctionExpression!.declaredElement!.enclosingElement2;
-      if (enclosingElementOfCurrentFunction == assignee.enclosingElement2) {
+          _currentFunctionExpression!.declaredElement!.enclosingElement3;
+      if (enclosingElementOfCurrentFunction == assignee.enclosingElement3) {
         // [node]'s enclosing function is a function expression passed directly
         // to a call to the test package's `setUp` function, and [node] is an
         // assignment to a variable declared in the same scope as the call to
@@ -840,7 +841,7 @@
         // Nothing to do; assume the implicit default value of `null` will never
         // be reached.
       } else {
-        var enclosingElement = declaredElement.enclosingElement2;
+        var enclosingElement = declaredElement.enclosingElement3;
         if (enclosingElement is ConstructorElement &&
             enclosingElement.isFactory &&
             enclosingElement.redirectedConstructor != null) {
@@ -1206,7 +1207,7 @@
   DecoratedType visitInstanceCreationExpression(
       InstanceCreationExpression node) {
     var callee = node.constructorName.staticElement!;
-    var typeParameters = callee.enclosingElement2.typeParameters;
+    var typeParameters = callee.enclosingElement3.typeParameters;
     Iterable<DartType?> typeArgumentTypes;
     List<DecoratedType> decoratedTypeArguments;
     var typeArguments = node.constructorName.type.typeArguments;
@@ -1387,7 +1388,7 @@
       } else {
         targetType = _handleTarget(target, node.methodName.name, callee);
       }
-    } else if (target == null && callee!.enclosingElement2 is ClassElement) {
+    } else if (target == null && callee!.enclosingElement3 is ClassElement) {
       targetType = _thisOrSuper(node);
       _checkThisNotNull(targetType, node);
     }
@@ -1794,13 +1795,13 @@
     } else if (staticElement is FunctionElement ||
         staticElement is MethodElement ||
         staticElement is ConstructorElement) {
-      if (staticElement!.enclosingElement2 is ClassElement) {
+      if (staticElement!.enclosingElement3 is ClassElement) {
         targetType = _thisOrSuper(node);
       }
       result =
           getOrComputeElementType(node, staticElement, targetType: targetType);
     } else if (staticElement is PropertyAccessorElement) {
-      if (staticElement.enclosingElement2 is ClassElement) {
+      if (staticElement.enclosingElement3 is ClassElement) {
         targetType = _thisOrSuper(node);
       }
       var elementType =
@@ -1815,8 +1816,8 @@
     } else if (staticElement == null) {
       assert(node.toString() == 'void', "${node.toString()} != 'void'");
       result = _makeNullableVoidType(node);
-    } else if (staticElement.enclosingElement2 is ClassElement &&
-        (staticElement.enclosingElement2 as ClassElement).isEnum) {
+    } else if (staticElement.enclosingElement3 is ClassElement &&
+        staticElement.enclosingElement3 is EnumElement) {
       result = getOrComputeElementType(node, staticElement);
     } else {
       // TODO(paulberry)
@@ -1882,7 +1883,7 @@
     var nullabilityNode = NullabilityNode.forInferredType(target);
     var class_ = node.thisOrAncestorOfType<ClassDeclaration>()!;
     var decoratedSupertype = _decoratedClassHierarchy!.getDecoratedSupertype(
-        class_.declaredElement!, callee.enclosingElement2);
+        class_.declaredElement!, callee.enclosingElement3);
     var typeArguments = decoratedSupertype.typeArguments;
     Iterable<DartType?> typeArgumentTypes;
     typeArgumentTypes = typeArguments.map((t) => t!.type);
@@ -1890,7 +1891,7 @@
         typeArguments: typeArguments);
     var calleeType =
         getOrComputeElementType(node, callee, targetType: createdType);
-    var constructorTypeParameters = callee.enclosingElement2.typeParameters;
+    var constructorTypeParameters = callee.enclosingElement3.typeParameters;
 
     _handleInvocationArguments(
         node,
@@ -1998,7 +1999,7 @@
         }
       }
       var type = _variables!.decoratedElementType(declaredElement);
-      var enclosingElement = declaredElement.enclosingElement2;
+      var enclosingElement = declaredElement.enclosingElement3;
       if (!declaredElement.isStatic && enclosingElement is ClassElement) {
         var overriddenElements = _inheritanceManager.getOverridden2(
             enclosingElement,
@@ -2562,7 +2563,7 @@
   void _handleConstructorRedirection(
       FormalParameterList parameters, ConstructorName redirectedConstructor) {
     var callee = redirectedConstructor.staticElement!.declaration;
-    var redirectedClass = callee.enclosingElement2;
+    var redirectedClass = callee.enclosingElement3;
     var calleeType = _variables!.decoratedElementType(callee);
     var typeArguments = redirectedConstructor.type.typeArguments;
     var typeArgumentTypes =
@@ -2581,7 +2582,7 @@
     if (node.argumentList.arguments.isNotEmpty &&
         callee is ExecutableElement &&
         callee.isStatic) {
-      var enclosingElement = callee.enclosingElement2;
+      var enclosingElement = callee.enclosingElement3;
       if (enclosingElement is ClassElement) {
         if (callee.name == 'checkNotNull' &&
                 enclosingElement.name == 'ArgumentError' &&
@@ -2624,7 +2625,7 @@
     _addParametersToFlowAnalysis(parameters);
     // Push a scope of post-dominated declarations on the stack.
     _postDominatedLocals.pushScope(elements: declaredElement.parameters);
-    if (declaredElement.enclosingElement2 is ExtensionElement) {
+    if (declaredElement.enclosingElement3 is ExtensionElement) {
       _postDominatedLocals.add(_extensionThis);
     }
     try {
@@ -2639,7 +2640,7 @@
         _handleConstructorRedirection(parameters!, redirectedConstructor);
       }
       if (declaredElement is! ConstructorElement) {
-        var enclosingElement = declaredElement.enclosingElement2;
+        var enclosingElement = declaredElement.enclosingElement3;
         if (enclosingElement is ClassElement) {
           var overriddenElements = _inheritanceManager.getOverridden2(
               enclosingElement,
@@ -2725,7 +2726,7 @@
       ClassElement classElement,
       Element overriddenElement) {
     overriddenElement = overriddenElement.declaration!;
-    var overriddenClass = overriddenElement.enclosingElement2 as ClassElement;
+    var overriddenClass = overriddenElement.enclosingElement3 as ClassElement;
     var decoratedSupertype = _decoratedClassHierarchy!
         .getDecoratedSupertype(classElement, overriddenClass);
     var substitution = decoratedSupertype.asSubstitution;
@@ -2784,7 +2785,7 @@
           DecoratedType? currentParameterType;
           DecoratedType? overriddenParameterType;
           if (parameter.isNamed) {
-            var name = normalParameter.identifier!.name;
+            var name = normalParameter.name!.lexeme;
             currentParameterType = _currentFunctionType!.namedParameters![name];
             overriddenParameterType =
                 overriddenFunctionType.namedParameters![name];
@@ -2826,7 +2827,7 @@
       ClassElement classElement,
       Element overriddenElement) {
     overriddenElement = overriddenElement.declaration!;
-    var overriddenClass = overriddenElement.enclosingElement2 as ClassElement;
+    var overriddenClass = overriddenElement.enclosingElement3 as ClassElement;
     var decoratedSupertype = _decoratedClassHierarchy!
         .getDecoratedSupertype(classElement, overriddenClass);
     var substitution = decoratedSupertype.asSubstitution;
@@ -2958,13 +2959,13 @@
     Map<TypeParameterElement, DecoratedType?> getterSubstitution = const {};
     Map<TypeParameterElement, DecoratedType?> setterSubstitution = const {};
     if (class_ != null) {
-      var getterClass = getter.enclosingElement2 as ClassElement;
+      var getterClass = getter.enclosingElement3 as ClassElement;
       if (!identical(class_, getterClass)) {
         getterSubstitution = _decoratedClassHierarchy!
             .getDecoratedSupertype(class_, getterClass)
             .asSubstitution;
       }
-      var setterClass = setter.enclosingElement2 as ClassElement;
+      var setterClass = setter.enclosingElement3 as ClassElement;
       if (!identical(class_, setterClass)) {
         setterSubstitution = _decoratedClassHierarchy!
             .getDecoratedSupertype(class_, setterClass)
@@ -3062,9 +3063,10 @@
         expression = argument.expression;
       } else if (argument is FormalParameter) {
         if (argument.isNamed) {
-          name = argument.identifier!.name;
+          name = argument.name!.lexeme;
         }
-        expression = argument.identifier;
+        // TODO(scheglov) This is a hack.
+        expression = (argument as FormalParameterImpl).identifierForMigration;
       } else {
         expression = argument as Expression;
       }
@@ -3218,7 +3220,7 @@
     if (isDeclaredOnObject(name)) {
       return _dispatch(target);
     } else if ((callee is MethodElement || callee is PropertyAccessorElement) &&
-        callee!.enclosingElement2 is ExtensionElement) {
+        callee!.enclosingElement3 is ExtensionElement) {
       // Extension methods can be called on a `null` target, when the `on` type
       // of the extension is nullable.  Note: we don't need to check whether the
       // target type is assignable to the extended type; that is done in
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 14750b4..03b5fd2 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -1181,7 +1181,7 @@
           AtomicEditInfo(NullabilityFixDescription.addType(typeText), {});
       // Skip past the offset of any metadata, a potential `final` keyword, and
       // a potential `covariant` keyword.
-      var offset = node.type?.offset ?? node.identifier!.offset;
+      var offset = node.type?.offset ?? node.name!.offset;
       return aggregator.planner.passThrough(node, innerPlans: [
         aggregator.planner.insertText(node, offset,
             [AtomicEdit.insert(typeText, info: info), AtomicEdit.insert(' ')]),
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 05c8ff4..eff55d1 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -467,7 +467,7 @@
           return variable.typeInternal;
         }
         if (variable is ParameterElement) {
-          var enclosingElement = variable.enclosingElement2;
+          var enclosingElement = variable.enclosingElement3;
           if (enclosingElement is PropertyAccessorElement &&
               enclosingElement.isSynthetic) {
             // This is the parameter of a synthetic getter, so it has the same
@@ -503,7 +503,7 @@
   /// on a nullable type without introducing a null check).
   bool isNullableExtensionMember(Element? element) {
     if (element != null) {
-      var enclosingElement = element.enclosingElement2;
+      var enclosingElement = element.enclosingElement3;
       if (enclosingElement is ExtensionElement) {
         return _fixBuilder!._typeSystem
             .isPotentiallyNullable(enclosingElement.extendedType);
@@ -1223,7 +1223,7 @@
       var nullabilityNode =
           _fixBuilder._variables!.decoratedElementType(element!).node!;
       if (!nullabilityNode.isNullable) {
-        var enclosingElement = element.enclosingElement2;
+        var enclosingElement = element.enclosingElement3;
         if (enclosingElement is ConstructorElement &&
             enclosingElement.isFactory &&
             enclosingElement.redirectedConstructor != null &&
@@ -1336,8 +1336,8 @@
     // Change an existing `@required` annotation into a `required` keyword if
     // possible.
     final element = parameter.declaredElement!;
-    final method = element.enclosingElement2!;
-    final cls = method.enclosingElement2!;
+    final method = element.enclosingElement3!;
+    final cls = method.enclosingElement3!;
     var info = AtomicEditInfo(
         NullabilityFixDescription.addRequired(
             cls.name, method.name, element.name),
diff --git a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
index efef185..6e5e0e1 100644
--- a/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/info_builder.dart
@@ -560,7 +560,7 @@
         enclosingNode != null;
         enclosingNode = enclosingNode.parent) {
       if (enclosingNode is ConstructorDeclaration) {
-        if (enclosingNode.name == null) {
+        if (enclosingNode.name2 == null) {
           return _describeClassOrExtensionMember(
               enclosingNode.parent as CompilationUnitMember?,
               'the default constructor of',
@@ -569,10 +569,10 @@
           return _describeClassOrExtensionMember(
               enclosingNode.parent as CompilationUnitMember?,
               'the constructor',
-              enclosingNode.name!.name);
+              enclosingNode.name2!.lexeme);
         }
       } else if (enclosingNode is MethodDeclaration) {
-        var functionName = enclosingNode.name.name;
+        var functionName = enclosingNode.name2.lexeme;
         String baseDescription;
         if (enclosingNode.isGetter) {
           baseDescription = 'the getter';
@@ -590,7 +590,7 @@
             functionName);
       } else if (enclosingNode is FunctionDeclaration &&
           enclosingNode.parent is CompilationUnit) {
-        var functionName = enclosingNode.name.name;
+        var functionName = enclosingNode.name2.lexeme;
         String baseDescription;
         if (enclosingNode.isGetter) {
           baseDescription = 'the getter';
@@ -617,20 +617,20 @@
   static String _describeClassOrExtensionMember(CompilationUnitMember? parent,
       String baseDescription, String functionName) {
     if (parent is NamedCompilationUnitMember) {
-      var parentName = parent.name.name;
+      var parentName = parent.name2.lexeme;
       if (functionName.isEmpty) {
         return "$baseDescription '$parentName'";
       } else {
         return "$baseDescription '$parentName.$functionName'";
       }
     } else if (parent is ExtensionDeclaration) {
-      if (parent.name == null) {
+      if (parent.name2 == null) {
         var extendedTypeString = parent.extendedType.type!.getDisplayString(
           withNullability: false,
         );
         return "$baseDescription '$functionName' in unnamed extension on $extendedTypeString";
       } else {
-        return "$baseDescription '${parent.name!.name}.$functionName'";
+        return "$baseDescription '${parent.name2!.lexeme}.$functionName'";
       }
     } else {
       throw ArgumentError(
@@ -639,7 +639,7 @@
   }
 
   static String? _describeVariableDeclaration(VariableDeclaration node) {
-    var variableName = node.name.name;
+    var variableName = node.name2.lexeme;
     var parent = node.parent!;
     var grandParent = parent.parent;
     if (grandParent is FieldDeclaration) {
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 78e0b70..a41a5ed 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -128,7 +128,6 @@
   @override
   DecoratedType? visitClassDeclaration(ClassDeclaration node) {
     node.metadata.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.nativeClause?.accept(this);
     node.members.accept(this);
@@ -156,7 +155,6 @@
   @override
   DecoratedType? visitClassTypeAlias(ClassTypeAlias node) {
     node.metadata.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     var classElement = node.declaredElement!;
     _handleSupertypeClauses(node, classElement, node.superclass,
@@ -222,7 +220,7 @@
           _typeProvider, declaredElement.type, _graph, target);
       instrumentation?.implicitType(source, node, type);
     }
-    _variables!.recordDecoratedElementType(node.identifier.staticElement, type);
+    _variables!.recordDecoratedElementType(node.declaredElement, type);
     return type;
   }
 
@@ -250,7 +248,6 @@
   @override
   DecoratedType? visitEnumDeclaration(EnumDeclaration node) {
     node.metadata.accept(this);
-    node.name.accept(this);
     var classElement = node.declaredElement!;
     _variables!.recordDecoratedElementType(
         classElement, DecoratedType(classElement.thisType, _graph.never));
@@ -479,7 +476,6 @@
   @override
   DecoratedType? visitMixinDeclaration(MixinDeclaration node) {
     node.metadata.accept(this);
-    node.name.accept(this);
     node.typeParameters?.accept(this);
     node.members.accept(this);
     _handleSupertypeClauses(node, node.declaredElement!, null, null,
@@ -684,7 +680,7 @@
   }
 
   DecoratedType _createDecoratedTypeForClass(
-      ClassElement classElement, AstNode? node) {
+      InterfaceElement classElement, AstNode? node) {
     var typeArguments = classElement.typeParameters
         .map((t) => t.instantiate(nullabilitySuffix: NullabilitySuffix.star))
         .toList();
@@ -707,7 +703,7 @@
     for (var annotation in metadata) {
       var element = annotation.element;
       if (element is ConstructorElement) {
-        var name = element.enclosingElement2.name;
+        var name = element.enclosingElement3.name;
         if (_isAngularUri(element.librarySource.uri)) {
           if (name == 'ViewChild' || name == 'ContentChild') {
             return _AngularAnnotation.child;
@@ -749,7 +745,7 @@
         // Constructors have no explicit return type annotation, so use the
         // implicit return type.
         decoratedReturnType = _createDecoratedTypeForClass(
-            declaredElement.enclosingElement2, parameters!.parent);
+            declaredElement.enclosingElement3, parameters!.parent);
         instrumentation?.implicitReturnType(source, node, decoratedReturnType);
       } else {
         // Inferred return type.
@@ -850,7 +846,7 @@
     for (var annotation in node.metadata) {
       var element = annotation.element;
       if (element is ConstructorElement &&
-          element.enclosingElement2.name == 'Optional' &&
+          element.enclosingElement3.name == 'Optional' &&
           _isAngularUri(element.librarySource.uri)) {
         _graph.makeNullable(
             decoratedType!.node!, AngularAnnotationOrigin(source, node));
diff --git a/pkg/nnbd_migration/lib/src/nullability_node_target.dart b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
index 8f6eb6e..a69b7c4 100644
--- a/pkg/nnbd_migration/lib/src/nullability_node_target.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
@@ -15,7 +15,7 @@
     } else {
       parts.add(name);
     }
-    element = element.enclosingElement2;
+    element = element.enclosingElement3;
   }
   if (parts.isEmpty) {
     assert(false, 'Could not compute a name for $element');
diff --git a/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart
index 85a14aa..892c0b5 100644
--- a/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/built_value_transformer.dart
@@ -13,7 +13,7 @@
           var element = annotation.element;
           if (element is PropertyAccessorElement &&
               element.name == 'nullable') {
-            if (element.enclosingElement2 is CompilationUnitElement) {
+            if (element.enclosingElement3 is CompilationUnitElement) {
               if (element.library.source.uri.toString() ==
                   'package:built_value/built_value.dart') {
                 return annotation;
diff --git a/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart b/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
index 79d4edd..a6585e6 100644
--- a/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/hint_utils.dart
@@ -249,7 +249,7 @@
       } else if (parameter.returnType != null) {
         return parameter.returnType!.beginToken;
       } else {
-        return parameter.identifier.token;
+        return parameter.name;
       }
     } else if (parameter is SimpleFormalParameter) {
       if (parameter.covariantKeyword != null) {
@@ -259,7 +259,7 @@
       } else if (parameter.type != null) {
         return parameter.type!.beginToken;
       } else {
-        return parameter.identifier!.token;
+        return parameter.name;
       }
     }
     return null;
diff --git a/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
index 997bf46..e2bc4fd 100644
--- a/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
@@ -139,7 +139,7 @@
     if (element is MethodElement) {
       if (element.isStatic) return false;
       if (element.name != 'where') return false;
-      var enclosingElement = element.declaration.enclosingElement2;
+      var enclosingElement = element.declaration.enclosingElement3;
       if (enclosingElement is ClassElement) {
         // If the class is `Iterable` or a subtype of it, we consider the user
         // to be calling a transformable method.
diff --git a/pkg/nnbd_migration/lib/src/utilities/where_or_null_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/where_or_null_transformer.dart
index edf4027..162d544 100644
--- a/pkg/nnbd_migration/lib/src/utilities/where_or_null_transformer.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/where_or_null_transformer.dart
@@ -104,7 +104,7 @@
       if (element.isStatic) return null;
       var replacementName = _replacementNames[element.name];
       if (replacementName == null) return null;
-      var enclosingElement = element.declaration.enclosingElement2;
+      var enclosingElement = element.declaration.enclosingElement3;
       if (enclosingElement is ClassElement) {
         // If the class is `Iterable` or a subtype of it, we consider the user
         // to be calling a transformable method.
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index 4258fad..681852f 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -125,7 +125,7 @@
   /// nullabilities.
   DecoratedType? decoratedTypeParameterBound(TypeParameterElement typeParameter,
       {bool allowNullUnparentedBounds = false}) {
-    var enclosingElement = typeParameter.enclosingElement2;
+    var enclosingElement = typeParameter.enclosingElement3;
     var decoratedType =
         DecoratedTypeParameterBounds.current!.get(typeParameter);
     if (enclosingElement == null) {
@@ -431,7 +431,7 @@
   bool _isLoadLibraryElement(Element element) =>
       element.isSynthetic &&
       element is FunctionElement &&
-      element.enclosingElement2 is LibraryElement &&
+      element.enclosingElement3 is LibraryElement &&
       element.name == 'loadLibrary';
 
   /// Inverts the logic of [uniqueIdentifierForSpan], producing an (offset, end)
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index e1df28b..1f097a6 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -8296,7 +8296,7 @@
 
   @override
   DecoratedType getDecoratedSupertype(
-      ClassElement class_, ClassElement superclass) {
+      ClassElement class_, InterfaceElement superclass) {
     throw UnimplementedError('TODO(paulberry)');
   }
 }
diff --git a/pkg/nnbd_migration/test/node_builder_test.dart b/pkg/nnbd_migration/test/node_builder_test.dart
index 07fe1b9..737bb72 100644
--- a/pkg/nnbd_migration/test/node_builder_test.dart
+++ b/pkg/nnbd_migration/test/node_builder_test.dart
@@ -1033,7 +1033,7 @@
 }
 ''');
     var functionExpressionElement =
-        findNode.simpleParameter('int i').declaredElement!.enclosingElement2!;
+        findNode.simpleParameter('int i').declaredElement!.enclosingElement3!;
     var decoratedType =
         variables!.decoratedElementType(functionExpressionElement);
     expect(decoratedType.positionalParameters![0],
@@ -1050,7 +1050,7 @@
 }
 ''');
     var functionExpressionElement =
-        findNode.simpleParameter('int i').declaredElement!.enclosingElement2!;
+        findNode.simpleParameter('int i').declaredElement!.enclosingElement3!;
     var decoratedType =
         variables!.decoratedElementType(functionExpressionElement);
     expect(
diff --git a/pkg/nnbd_migration/tool/codegen/extract_resource.dart b/pkg/nnbd_migration/tool/codegen/extract_resource.dart
index 60b1719..bfc2490 100644
--- a/pkg/nnbd_migration/tool/codegen/extract_resource.dart
+++ b/pkg/nnbd_migration/tool/codegen/extract_resource.dart
@@ -38,7 +38,7 @@
     if (declaration is TopLevelVariableDeclaration) {
       for (var variable in declaration.variables.variables) {
         if (variable.initializer == null) continue;
-        var match = variableNameRegExp.matchAsPrefix(variable.name.name);
+        var match = variableNameRegExp.matchAsPrefix(variable.name2.lexeme);
         if (match == null) continue;
         var shortName = match.group(1);
         if (list) {
diff --git a/pkg/scrape/example/superclass_parameters.dart b/pkg/scrape/example/superclass_parameters.dart
index de5923e..b242525 100644
--- a/pkg/scrape/example/superclass_parameters.dart
+++ b/pkg/scrape/example/superclass_parameters.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:scrape/scrape.dart';
 
 enum ArgumentMatch {
@@ -76,12 +77,12 @@
     // See if any of them could use the feature.
     var positionalParamNames = node.parameters.parameters
         .where((param) => param.isPositional)
-        .map((param) => param.identifier!.name)
+        .map((param) => param.name!.lexeme)
         .toList();
 
     var namedParamNames = node.parameters.parameters
         .where((param) => param.isNamed)
-        .map((param) => param.identifier!.name)
+        .map((param) => param.name!.lexeme)
         .toSet();
 
     var matchedNamedArguments = 0;
@@ -290,8 +291,8 @@
     record('Insert super args', insert ? 'Yes' : 'No');
     record('Do not merge super args', noMerge ? 'Yes' : 'No');
 
-    var subName = _constructorName(node.name);
-    var superName = _constructorName(initializer.constructorName);
+    var subName = _constructorName(node.name2);
+    var superName = _constructorName(initializer.constructorName?.token);
 
     record('No explicit super(), call same name',
         (allParams && superName == subName) ? 'Yes' : 'No');
@@ -300,9 +301,9 @@
         (allParams && superName == '(unnamed)') ? 'Yes' : 'No');
   }
 
-  String _constructorName(SimpleIdentifier? name) {
+  String _constructorName(Token? name) {
     if (name == null) return '(unnamed)';
-    return name.name;
+    return name.lexeme;
   }
 
   SuperConstructorInvocation? _findSuper(ConstructorDeclaration node) {
diff --git a/pkg/scrape/lib/src/scrape_visitor.dart b/pkg/scrape/lib/src/scrape_visitor.dart
index 7869df9..789ed3a 100644
--- a/pkg/scrape/lib/src/scrape_visitor.dart
+++ b/pkg/scrape/lib/src/scrape_visitor.dart
@@ -46,8 +46,8 @@
   /// "BuildContext context".
   bool get isInFlutterBuildMethod => _inFlutterBuildMethods > 0;
 
-  bool _isBuildMethod(TypeAnnotation? returnType, SimpleIdentifier name,
-      FormalParameterList? parameters) {
+  bool _isBuildMethod(
+      TypeAnnotation? returnType, FormalParameterList? parameters) {
     var parameterString = parameters.toString();
 
     if (returnType.toString() == 'void') return false;
@@ -109,7 +109,7 @@
 
   @override
   void visitMethodDeclaration(MethodDeclaration node) {
-    var isBuild = _isBuildMethod(node.returnType, node.name, node.parameters);
+    var isBuild = _isBuildMethod(node.returnType, node.parameters);
     if (isBuild) _inFlutterBuildMethods++;
 
     try {
@@ -123,8 +123,8 @@
 
   @override
   void visitFunctionDeclaration(FunctionDeclaration node) {
-    var isBuild = _isBuildMethod(
-        node.returnType, node.name, node.functionExpression.parameters);
+    var isBuild =
+        _isBuildMethod(node.returnType, node.functionExpression.parameters);
     if (isBuild) _inFlutterBuildMethods++;
 
     try {
diff --git a/tools/VERSION b/tools/VERSION
index 5817f58..a27dd14 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 57
+PRERELEASE 58
 PRERELEASE_PATCH 0
\ No newline at end of file