diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 6c3f075..6f97840 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1478,10 +1478,13 @@
   @override
   final DartPatternImpl pattern;
 
-  CaseClauseImpl(
-      {required this.caseKeyword,
-      required this.pattern,
-      required this.whenClause});
+  CaseClauseImpl({
+    required this.caseKeyword,
+    required this.pattern,
+    required this.whenClause,
+  }) {
+    _becomeParentOf(pattern);
+  }
 
   @override
   Token get beginToken => caseKeyword;
@@ -2769,10 +2772,12 @@
   @override
   final Token? constKeyword;
 
-  @override
-  ExpressionImpl expression;
+  ExpressionImpl _expression;
 
-  ConstantPatternImpl({required this.constKeyword, required this.expression}) {
+  ConstantPatternImpl({
+    required this.constKeyword,
+    required ExpressionImpl expression,
+  }) : _expression = expression {
     _becomeParentOf(expression);
   }
 
@@ -2783,6 +2788,13 @@
   Token get endToken => expression.endToken;
 
   @override
+  ExpressionImpl get expression => _expression;
+
+  set expression(ExpressionImpl expression) {
+    _expression = _becomeParentOf(expression);
+  }
+
+  @override
   ChildEntities get _childEntities => super._childEntities
     ..addToken('const', constKeyword)
     ..addNode('expression', expression);
@@ -10606,6 +10618,7 @@
     required this.rightParenthesis,
     required this.question,
   }) {
+    _becomeParentOf(namedFields);
     this.positionalFields._initialize(this, positionalFields);
   }
 
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index ae02e70..85e583d 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -1510,6 +1510,25 @@
     }
   }
 
+  /// Check that the actual parent of [child] is [parent].
+  void _checkParentOfChild(AstNode parent, AstNode child) {
+    final actualParent = child.parent;
+    if (actualParent == null) {
+      fail('''
+No parent.
+Child: (${child.runtimeType}) $child
+Expected parent: (${parent.runtimeType}) $parent
+''');
+    } else if (actualParent != parent) {
+      fail('''
+Wrong parent.
+Child: (${child.runtimeType}) $child
+Actual parent: (${actualParent.runtimeType}) $actualParent
+Expected parent: (${parent.runtimeType}) $parent
+''');
+    }
+  }
+
   String _elementToReferenceString(Element element) {
     final enclosingElement = element.enclosingElement;
     final reference = (element as ElementImpl).reference;
@@ -1741,6 +1760,7 @@
       if (value is Token) {
         _writeToken(entity.name, value);
       } else if (value is AstNode) {
+        _checkParentOfChild(node, value);
         if (value is ArgumentList && skipArgumentList) {
         } else {
           _writeNode(entity.name, value);
@@ -1748,7 +1768,7 @@
       } else if (value is List<Token>) {
         _writeTokenList(entity.name, value);
       } else if (value is List<AstNode>) {
-        _writeNodeList(entity.name, value);
+        _writeNodeList(node, entity.name, value);
       } else {
         throw UnimplementedError('(${value.runtimeType}) $value');
       }
@@ -1763,11 +1783,12 @@
     }
   }
 
-  void _writeNodeList(String name, List<AstNode> nodeList) {
+  void _writeNodeList(AstNode parent, String name, List<AstNode> nodeList) {
     if (nodeList.isNotEmpty) {
       _writelnWithIndent(name);
       _withIndent(() {
         for (var node in nodeList) {
+          _checkParentOfChild(parent, node);
           _sink.write(_indent);
           node.accept(this);
         }
