diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart
index 9c902e7..73c944b 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_deprecated_new_in_comment_reference.dart
@@ -40,18 +40,20 @@
       builder.addDeletion(range.startStart(newToken, newToken.next!));
     });
 
-    final identifier = comment.identifier;
-    final classElement = identifier.staticElement;
-    if (identifier is SimpleIdentifier && classElement is ConstructorElement) {
-      await builder.addDartFileEdit(file, (builder) {
-        builder.addSimpleInsertion(identifier.end, '.new');
-      });
-    } else {
-      if (classElement is ClassElement) {
-        if (classElement.unnamedConstructor != null) {
-          await builder.addDartFileEdit(file, (builder) {
-            builder.addSimpleInsertion(identifier.end, '.new');
-          });
+    final identifier = comment.expression;
+    if (identifier is Identifier) {
+      final element = identifier.staticElement;
+      if (identifier is SimpleIdentifier && element is ConstructorElement) {
+        await builder.addDartFileEdit(file, (builder) {
+          builder.addSimpleInsertion(identifier.end, '.new');
+        });
+      } else {
+        if (element is ClassElement) {
+          if (element.unnamedConstructor != null) {
+            await builder.addDartFileEdit(file, (builder) {
+              builder.addSimpleInsertion(identifier.end, '.new');
+            });
+          }
         }
       }
     }
diff --git a/pkg/analysis_server/tool/code_completion/code_metrics.dart b/pkg/analysis_server/tool/code_completion/code_metrics.dart
index 0ace057..da9d00b 100644
--- a/pkg/analysis_server/tool/code_completion/code_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/code_metrics.dart
@@ -343,7 +343,7 @@
   void visitCommentReference(CommentReference node) {
     _visitChildren(node, {
       'newKeyword': node.newKeyword,
-      'identifier': node.identifier,
+      'expression': node.expression,
     });
     super.visitCommentReference(node);
   }
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index a505521..e5ad8cc 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -478,7 +478,7 @@
       _recordTokenType(context, node);
     }
 
-    recordDataForCommentReference('CommentReference (name)', node.identifier);
+    recordDataForCommentReference('CommentReference (name)', node.expression);
     super.visitCommentReference(node);
   }
 
diff --git a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
index e3978af..30fd62f 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_table_generator.dart
@@ -479,7 +479,7 @@
 
   @override
   void visitCommentReference(CommentReference node) {
-    _recordDataForNode('CommentReference_identifier', node.identifier);
+    _recordDataForNode('CommentReference_expression', node.expression);
     super.visitCommentReference(node);
   }
 
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index b9efa0a..ba209b7 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -979,14 +979,33 @@
   List<Token> get tokens;
 }
 
+/// An interface for an [Expression] which can make up a [CommentReference].
+///
+///    commentReferableExpression ::=
+///        [ConstructorReference]
+///      | [FunctionReference]
+///      | [PrefixedIdentifier]
+///      | [PropertyAccess]
+///      | [SimpleIdentifier]
+///      | [TypeLiteral]
+///
+/// This interface should align closely with dartdoc's notion of
+/// comment-referable expressions at:
+/// https://github.com/dart-lang/dartdoc/blob/master/lib/src/comment_references/parser.dart
+abstract class CommentReferableExpression implements Expression {}
+
 /// A reference to a Dart element that is found within a documentation comment.
 ///
 ///    commentReference ::=
-///        '[' 'new'? [Identifier] ']'
+///        '[' 'new'? [CommentReferableExpression] ']'
 ///
 /// Clients may not extend, implement or mix-in this class.
 abstract class CommentReference implements AstNode {
+  /// The comment-referable expression being referenced.
+  CommentReferableExpression get expression;
+
   /// Return the identifier being referenced.
+  @Deprecated('Use expression instead')
   Identifier get identifier;
 
   /// Return the token representing the 'new' keyword, or `null` if there was no
@@ -1331,7 +1350,8 @@
 /// produced at resolution time.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class ConstructorReference implements Expression {
+abstract class ConstructorReference
+    implements Expression, CommentReferableExpression {
   /// The constructor being referenced.
   ConstructorName get constructorName;
 }
@@ -2319,7 +2339,8 @@
 /// arguments applied to it, e.g. the expression `print` in `var x = print;`.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class FunctionReference implements Expression {
+abstract class FunctionReference
+    implements Expression, CommentReferableExpression {
   /// The function being referenced.
   ///
   /// In error-free code, this will be either a SimpleIdentifier (indicating a
@@ -2503,7 +2524,7 @@
 ///      | [PrefixedIdentifier]
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class Identifier implements Expression {
+abstract class Identifier implements Expression, CommentReferableExpression {
   /// Return the lexical representation of the identifier.
   String get name;
 
@@ -3588,7 +3609,8 @@
 ///        [Expression] '.' [SimpleIdentifier]
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class PropertyAccess implements NullShortableExpression {
+abstract class PropertyAccess
+    implements NullShortableExpression, CommentReferableExpression {
   /// Return `true` if this expression is cascaded.
   ///
   /// If it is, then the target of this expression is not stored locally but is
@@ -4289,7 +4311,7 @@
 /// use `.typeName.type`.
 ///
 /// Clients may not extend, implement or mix-in this class.
-abstract class TypeLiteral implements Expression {
+abstract class TypeLiteral implements Expression, CommentReferableExpression {
   /// The type represented by this literal.
   NamedType get type;
 
diff --git a/pkg/analyzer/lib/dart/ast/ast_factory.dart b/pkg/analyzer/lib/dart/ast/ast_factory.dart
index baa41a5..8a714a8 100644
--- a/pkg/analyzer/lib/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/dart/ast/ast_factory.dart
@@ -158,7 +158,8 @@
 
   /// Returns a newly created reference to a Dart element. The [newKeyword]
   /// can be `null` if the reference is not to a constructor.
-  CommentReference commentReference(Token? newKeyword, Identifier identifier);
+  CommentReference commentReference(
+      Token? newKeyword, CommentReferableExpression expression);
 
   /// Returns a newly created compilation unit to have the given directives and
   /// declarations.  The [scriptTag] can be `null` (or omitted) if there is no
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 5c8d8e7..e3b952f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -579,21 +579,26 @@
 
   @override
   visitCommentReference(CommentReference node) {
-    var identifier = node.identifier;
-    var element = identifier.staticElement;
-    if (element is ConstructorElement) {
-      if (identifier is PrefixedIdentifier) {
-        var offset = identifier.prefix.end;
-        var length = identifier.end - offset;
-        recordRelationOffset(
-            element, IndexRelationKind.IS_REFERENCED_BY, offset, length, true);
-        return;
-      } else {
-        var offset = identifier.end;
-        recordRelationOffset(
-            element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
-        return;
+    var expression = node.expression;
+    if (expression is Identifier) {
+      var element = expression.staticElement;
+      if (element is ConstructorElement) {
+        if (expression is PrefixedIdentifier) {
+          var offset = expression.prefix.end;
+          var length = expression.end - offset;
+          recordRelationOffset(element, IndexRelationKind.IS_REFERENCED_BY,
+              offset, length, true);
+          return;
+        } else {
+          var offset = expression.end;
+          recordRelationOffset(
+              element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
+          return;
+        }
       }
+    } else {
+      throw UnimplementedError('Unhandled CommentReference expression type: '
+          '${expression.runtimeType}');
     }
 
     return super.visitCommentReference(node);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index d9d000b..24e1241 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1856,6 +1856,9 @@
       CommentImpl(tokens, CommentType.END_OF_LINE, const <CommentReference>[]);
 }
 
+abstract class CommentReferableExpressionImpl extends ExpressionImpl
+    implements CommentReferableExpression {}
+
 /// A reference to a Dart element that is found within a documentation comment.
 ///
 ///    commentReference ::=
@@ -1866,31 +1869,40 @@
   @override
   Token? newKeyword;
 
-  /// The identifier being referenced.
-  IdentifierImpl _identifier;
+  /// The expression being referenced.
+  CommentReferableExpressionImpl _expression;
 
   /// Initialize a newly created reference to a Dart element. The [newKeyword]
   /// can be `null` if the reference is not to a constructor.
-  CommentReferenceImpl(this.newKeyword, this._identifier) {
-    _becomeParentOf(_identifier);
+  CommentReferenceImpl(this.newKeyword, this._expression) {
+    _becomeParentOf(_expression);
   }
 
   @override
-  Token get beginToken => newKeyword ?? _identifier.beginToken;
+  Token get beginToken => newKeyword ?? _expression.beginToken;
 
   @override
   Iterable<SyntacticEntity> get childEntities => ChildEntities()
     ..add(newKeyword)
-    ..add(_identifier);
+    ..add(_expression);
 
   @override
-  Token get endToken => _identifier.endToken;
+  Token get endToken => _expression.endToken;
 
   @override
-  IdentifierImpl get identifier => _identifier;
+  CommentReferableExpression get expression => _expression;
 
+  set expression(CommentReferableExpression expression) {
+    _expression = _becomeParentOf(expression as CommentReferableExpressionImpl);
+  }
+
+  @override
+  @Deprecated('Use expression instead')
+  IdentifierImpl get identifier => _expression as IdentifierImpl;
+
+  @Deprecated('Use expression= instead')
   set identifier(Identifier identifier) {
-    _identifier = _becomeParentOf(identifier as IdentifierImpl);
+    _expression = _becomeParentOf(identifier as CommentReferableExpressionImpl);
   }
 
   @override
@@ -1898,7 +1910,7 @@
 
   @override
   void visitChildren(AstVisitor visitor) {
-    _identifier.accept(visitor);
+    _expression.accept(visitor);
   }
 }
 
@@ -2669,7 +2681,7 @@
 /// Objects of this type are not produced directly by the parser (because the
 /// parser cannot tell whether an identifier refers to a type); they are
 /// produced at resolution time.
-class ConstructorReferenceImpl extends ExpressionImpl
+class ConstructorReferenceImpl extends CommentReferableExpressionImpl
     implements ConstructorReference {
   ConstructorNameImpl _constructorName;
 
@@ -5038,7 +5050,7 @@
 
 /// An expression representing a reference to a function, possibly with type
 /// arguments applied to it, e.g. the expression `print` in `var x = print;`.
-class FunctionReferenceImpl extends ExpressionImpl
+class FunctionReferenceImpl extends CommentReferableExpressionImpl
     implements FunctionReference {
   ExpressionImpl _function;
 
@@ -5573,7 +5585,8 @@
 ///    identifier ::=
 ///        [SimpleIdentifier]
 ///      | [PrefixedIdentifier]
-abstract class IdentifierImpl extends ExpressionImpl implements Identifier {
+abstract class IdentifierImpl extends CommentReferableExpressionImpl
+    implements Identifier {
   @override
   bool get isAssignable => true;
 }
@@ -8449,7 +8462,7 @@
 ///
 ///    propertyAccess ::=
 ///        [Expression] '.' [SimpleIdentifier]
-class PropertyAccessImpl extends ExpressionImpl
+class PropertyAccessImpl extends CommentReferableExpressionImpl
     with NullShortableExpressionImpl
     implements PropertyAccess {
   /// The expression computing the object defining the property being accessed.
@@ -10353,7 +10366,8 @@
 /// The `.staticType` getter returns the type of the expression (which will
 /// always be the type `Type`).  To see the type represented by the type literal
 /// use `.typeName.type`.
-class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral {
+class TypeLiteralImpl extends CommentReferableExpressionImpl
+    implements TypeLiteral {
   NamedTypeImpl _typeName;
 
   TypeLiteralImpl(this._typeName) {
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index f9e04f4..23b899cdf 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -206,8 +206,9 @@
 
   @override
   CommentReferenceImpl commentReference(
-          Token? newKeyword, Identifier identifier) =>
-      CommentReferenceImpl(newKeyword, identifier as IdentifierImpl);
+          Token? newKeyword, CommentReferableExpression expression) =>
+      CommentReferenceImpl(
+          newKeyword, expression as CommentReferableExpressionImpl);
 
   @override
   CompilationUnitImpl compilationUnit(
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index ec080e8..1b2249a 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -272,7 +272,7 @@
   bool visitCommentReference(CommentReference node) {
     CommentReference other = _other as CommentReference;
     return isEqualTokens(node.newKeyword, other.newKeyword) &&
-        isEqualNodes(node.identifier, other.identifier);
+        isEqualNodes(node.expression, other.expression);
   }
 
   @override
@@ -1796,8 +1796,8 @@
 
   @override
   bool visitCommentReference(covariant CommentReferenceImpl node) {
-    if (identical(node.identifier, _oldNode)) {
-      node.identifier = _newNode as Identifier;
+    if (identical(node.expression, _oldNode)) {
+      node.expression = _newNode as Identifier;
       return true;
     }
     return visitNode(node);
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index af56535..717940b 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -125,31 +125,31 @@
 
   @override
   void visitCommentReference(covariant CommentReferenceImpl node) {
-    var identifier = node.identifier;
-    if (identifier is SimpleIdentifierImpl) {
-      var element = _resolveSimpleIdentifier(identifier);
+    var expression = node.expression;
+    if (expression is SimpleIdentifierImpl) {
+      var element = _resolveSimpleIdentifier(expression);
       if (element == null) {
         return;
       }
-      identifier.staticElement = element;
+      expression.staticElement = element;
       if (node.newKeyword != null) {
         if (element is ClassElement) {
           var constructor = element.unnamedConstructor;
           if (constructor == null) {
             // TODO(brianwilkerson) Report this error.
           } else {
-            identifier.staticElement = constructor;
+            expression.staticElement = constructor;
           }
         } else {
           // TODO(brianwilkerson) Report this error.
         }
       }
-    } else if (identifier is PrefixedIdentifierImpl) {
-      var prefix = identifier.prefix;
+    } else if (expression is PrefixedIdentifierImpl) {
+      var prefix = expression.prefix;
       var prefixElement = _resolveSimpleIdentifier(prefix);
       prefix.staticElement = prefixElement;
 
-      var name = identifier.identifier;
+      var name = expression.identifier;
 
       if (prefixElement == null) {
         return;
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 7fbe061..bd35b65 100644
--- a/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
+++ b/pkg/analyzer/test/generated/new_as_identifier_parser_test.dart
@@ -259,7 +259,7 @@
   void test_constructor_tearoff_in_comment_reference() {
     createParser('');
     var commentReference = parseCommentReference('C.new', 5)!;
-    var identifier = commentReference.identifier as PrefixedIdentifier;
+    var identifier = commentReference.expression as PrefixedIdentifier;
     expect(identifier.prefix.name, 'C');
     expect(identifier.identifier.name, 'new');
   }
diff --git a/pkg/analyzer/test/generated/simple_parser_test.dart b/pkg/analyzer/test/generated/simple_parser_test.dart
index f96e112..e183e2a 100644
--- a/pkg/analyzer/test/generated/simple_parser_test.dart
+++ b/pkg/analyzer/test/generated/simple_parser_test.dart
@@ -574,8 +574,8 @@
     var reference = parseCommentReference('new a.b', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "a");
@@ -592,8 +592,8 @@
     var reference = parseCommentReference('new a', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 9);
@@ -604,8 +604,8 @@
     var reference = parseCommentReference('operator ==', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "==");
     expect(identifier.offset, 14);
@@ -616,8 +616,8 @@
     var reference = parseCommentReference('Object.operator==', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "Object");
@@ -634,8 +634,8 @@
     var reference = parseCommentReference('==', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "==");
     expect(identifier.offset, 5);
@@ -646,8 +646,8 @@
     var reference = parseCommentReference('Object.==', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "Object");
@@ -664,8 +664,8 @@
     var reference = parseCommentReference('a.b', 7)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isPrefixedIdentifier);
-    var prefixedIdentifier = reference.identifier as PrefixedIdentifier;
+    expect(reference.expression, isPrefixedIdentifier);
+    var prefixedIdentifier = reference.expression as PrefixedIdentifier;
     SimpleIdentifier prefix = prefixedIdentifier.prefix;
     expect(prefix.token, isNotNull);
     expect(prefix.name, "a");
@@ -682,8 +682,8 @@
     var reference = parseCommentReference('a', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 5);
@@ -694,8 +694,8 @@
     var reference = parseCommentReference('', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    expect(reference.identifier, isSimpleIdentifier);
-    var identifier = reference.identifier as SimpleIdentifier;
+    expect(reference.expression, isSimpleIdentifier);
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier, isNotNull);
     expect(identifier.isSynthetic, isTrue);
     expect(identifier.token, isNotNull);
@@ -715,7 +715,7 @@
     var reference = parseCommentReference('this', 5)!;
     expectNotNullIfNoErrors(reference);
     assertNoErrors();
-    var identifier = reference.identifier as SimpleIdentifier;
+    var identifier = reference.expression as SimpleIdentifier;
     expect(identifier.token, isNotNull);
     expect(identifier.name, "a");
     expect(identifier.offset, 5);
@@ -731,7 +731,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 5);
   }
 
@@ -750,7 +750,8 @@
 
     expectReference(int index, String expectedText, int expectedOffset) {
       CommentReference reference = references[index];
-      expect(reference.identifier.name, expectedText);
+      var identifier = reference.expression as Identifier;
+      expect(identifier.name, expectedText);
       expect(reference.offset, expectedOffset);
     }
 
@@ -780,7 +781,8 @@
 
     expectReference(int index, String expectedText, int expectedOffset) {
       CommentReference reference = references[index];
-      expect(reference.identifier.name, expectedText);
+      var identifier = reference.expression as Identifier;
+      expect(identifier.name, expectedText);
       expect(reference.offset, expectedOffset);
     }
 
@@ -802,18 +804,18 @@
     {
       CommentReference reference = references[0];
       expect(reference, isNotNull);
-      expect(reference.identifier, isNotNull);
+      expect(reference.expression, isNotNull);
       expect(reference.offset, 12);
-      Token referenceToken = reference.identifier.beginToken;
+      Token referenceToken = reference.expression.beginToken;
       expect(referenceToken.offset, 12);
       expect(referenceToken.lexeme, 'a');
     }
     {
       CommentReference reference = references[1];
       expect(reference, isNotNull);
-      expect(reference.identifier, isNotNull);
+      expect(reference.expression, isNotNull);
       expect(reference.offset, 20);
-      Token referenceToken = reference.identifier.beginToken;
+      Token referenceToken = reference.expression.beginToken;
       expect(referenceToken.offset, 20);
       expect(referenceToken.lexeme, 'bb');
     }
@@ -829,11 +831,12 @@
     assertNoErrors();
     expect(references, hasLength(1));
     CommentReference reference = references[0];
-    Token referenceToken = reference.identifier.beginToken;
+    Token referenceToken = reference.expression.beginToken;
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
-    expect(reference.identifier.isSynthetic, isTrue);
-    expect(reference.identifier.name, "");
+    expect(reference.expression, isNotNull);
+    var identifier = reference.expression as Identifier;
+    expect(identifier.isSynthetic, isTrue);
+    expect(identifier.name, "");
     // Should end with EOF token.
     Token nextToken = referenceToken.next!;
     expect(nextToken, isNotNull);
@@ -850,12 +853,13 @@
     assertNoErrors();
     expect(references, hasLength(1));
     CommentReference reference = references[0];
-    Token referenceToken = reference.identifier.beginToken;
+    Token referenceToken = reference.expression.beginToken;
     expect(reference, isNotNull);
     expect(referenceToken, same(reference.beginToken));
-    expect(reference.identifier, isNotNull);
-    expect(reference.identifier.isSynthetic, isFalse);
-    expect(reference.identifier.name, "namePrefix");
+    expect(reference.expression, isNotNull);
+    var identifier = reference.expression as Identifier;
+    expect(identifier.isSynthetic, isFalse);
+    expect(identifier.name, "namePrefix");
     // Should end with EOF token.
     Token nextToken = referenceToken.next!;
     expect(nextToken, isNotNull);
@@ -875,15 +879,15 @@
     expect(references, hasLength(3));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 12);
     reference = references[1];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 20);
     reference = references[2];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 35);
   }
 
@@ -925,7 +929,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 24);
   }
 
@@ -941,7 +945,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 16);
   }
 
@@ -1011,7 +1015,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 27);
   }
 
@@ -1035,7 +1039,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 74);
   }
 
@@ -1051,7 +1055,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 35);
   }
 
@@ -1075,7 +1079,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 54);
   }
 
@@ -1091,7 +1095,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 15);
   }
 
@@ -1107,7 +1111,7 @@
     expect(references, hasLength(1));
     CommentReference reference = references[0];
     expect(reference, isNotNull);
-    expect(reference.identifier, isNotNull);
+    expect(reference.expression, isNotNull);
     expect(reference.offset, 44);
   }
 
diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart
index 0cbba91c..95aa605 100644
--- a/pkg/analyzer/test/generated/utilities_test.dart
+++ b/pkg/analyzer/test/generated/utilities_test.dart
@@ -294,9 +294,10 @@
 }
 
 class Getter_NodeReplacerTest_test_commentReference
-    implements NodeReplacerTest_Getter<CommentReference, Identifier> {
+    implements
+        NodeReplacerTest_Getter<CommentReference, CommentReferableExpression> {
   @override
-  Identifier get(CommentReference node) => node.identifier;
+  CommentReferableExpression get(CommentReference node) => node.expression;
 }
 
 class Getter_NodeReplacerTest_test_compilationUnit
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 93fa507..fb6d6b1f 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -120,7 +120,7 @@
 mixin M {}
 ''');
 
-    var aRef = findNode.commentReference('a]').identifier;
+    var aRef = findNode.commentReference('a]').expression;
     assertElement(aRef, findElement.topGet('a'));
     assertTypeNull(aRef);
   }
