[analyzer][cfe] Introduce parsing for null-aware elements

Part of https://github.com/dart-lang/sdk/issues/55949
Closes https://github.com/dart-lang/sdk/issues/55954

Change-Id: I885772f292f6d70425d6eba15bad8b0c6dc86a1f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/370240
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
index 2801ba2..e7bdfb1 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart
@@ -1649,8 +1649,11 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
-    listener?.handleLiteralMapEntry(colon, endToken);
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
+    listener?.handleLiteralMapEntry(colon, endToken,
+        nullAwareKeyToken: nullAwareKeyToken,
+        nullAwareValueToken: nullAwareValueToken);
   }
 
   @override
@@ -1910,6 +1913,11 @@
   }
 
   @override
+  void handleNullAwareElement(Token nullAwareToken) {
+    listener?.handleNullAwareElement(nullAwareToken);
+  }
+
+  @override
   void handleObjectPattern(
       Token firstIdentifier, Token? dot, Token? secondIdentifier) {
     listener?.handleObjectPattern(firstIdentifier, dot, secondIdentifier);
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
index 8889dbf..642824e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/listener.dart
@@ -1113,8 +1113,14 @@
     logEvent("LibraryName");
   }
 
+  /// Called after parsing a map entry. Either the key or the value or both can
+  /// start with the null-aware token `?`. In that case, [nullAwareKeyToken] and
+  /// [nullAwareValueToken] are set appropriately. Substructures:
+  /// - expression
+  /// - expression
   // TODO(jensj): Should this have a `beginToken`?
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     logEvent("LiteralMapEntry");
   }
 
@@ -1882,6 +1888,13 @@
     logEvent("SpreadExpression");
   }
 
+  /// Called after parsing a list or set element that starts with the null-aware
+  /// token `?`. Substructures:
+  /// - expression
+  void handleNullAwareElement(Token nullAwareToken) {
+    logEvent("NullAwareElement");
+  }
+
   /// Called after parsing an element of a list or map pattern that starts with
   /// `...`.  Substructures:
   /// - pattern (if hasSubPattern is `true`)
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info.dart
index 8b5b93a..9c81f25 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info.dart
@@ -63,6 +63,8 @@
     return new ForCondition();
   } else if (optional('...', next) || optional('...?', next)) {
     return spreadOperator;
+  } else if (optional('?', next)) {
+    return nullAwareEntry;
   }
   return simpleEntry;
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
index 02621b4..a8add65 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
@@ -15,6 +15,12 @@
 /// preceded by a '...' spread operator.
 const LiteralEntryInfo spreadOperator = const SpreadOperator();
 
+/// [nullAwareEntry] is for parsing a null-aware element in a literal list or
+/// set, preceded by the `?` null-aware marker, or a null-aware map entry in a
+/// map literal, where either the key or the value is preceded by the `?`
+/// null-aware marker.
+const NullAwareEntry nullAwareEntry = const NullAwareEntry();
+
 /// The first step when processing a `for` control flow collection entry.
 class ForCondition extends LiteralEntryInfo {
   bool _inStyle = false;
@@ -86,6 +92,9 @@
       );
     } else if (optional('...', next) || optional('...?', next)) {
       return _inStyle ? const ForInSpread() : const ForSpread();
+    } else if (optional('?', next)) {
+      return new Nested(nullAwareEntry,
+          _inStyle ? const ForInComplete() : const ForComplete());
     }
     return _inStyle ? const ForInEntry() : const ForEntry();
   }
@@ -180,6 +189,8 @@
       return new Nested(ifCondition, const IfComplete());
     } else if (optional('...', next) || optional('...?', next)) {
       return const IfSpread();
+    } else if (optional('?', next)) {
+      return new Nested(nullAwareEntry, const IfComplete());
     }
     return const IfEntry();
   }
@@ -308,3 +319,30 @@
     return nestedStep != null ? this : lastStep;
   }
 }
+
+class NullAwareEntry extends LiteralEntryInfo {
+  const NullAwareEntry() : super(false, 0);
+
+  @override
+  Token parse(Token token, Parser parser) {
+    final Token entryNullAwareToken = token.next!;
+    assert(optional('?', entryNullAwareToken));
+    token = parser.parseExpression(entryNullAwareToken);
+    if (optional(':', token.next!)) {
+      Token colon = token.next!;
+      Token next = colon.next!;
+      if (optional('?', next)) {
+        token = parser.parseExpression(next);
+        parser.listener.handleLiteralMapEntry(colon, token,
+            nullAwareKeyToken: entryNullAwareToken, nullAwareValueToken: next);
+      } else {
+        token = parser.parseExpression(colon);
+        parser.listener.handleLiteralMapEntry(colon, token,
+            nullAwareKeyToken: entryNullAwareToken, nullAwareValueToken: null);
+      }
+    } else {
+      parser.listener.handleNullAwareElement(entryNullAwareToken);
+    }
+    return token;
+  }
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 88c0fc6..f0fd748 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -6991,8 +6991,19 @@
         hasSetEntry ??= !isMapEntry;
         if (isMapEntry) {
           Token colon = token.next!;
-          token = parseExpression(colon);
-          listener.handleLiteralMapEntry(colon, token.next!);
+          Token next = colon.next!;
+          if (optional('?', next)) {
+            // Null-aware value. For example:
+            //   <int, String>{ x: ?y }
+            token = parseExpression(next);
+            listener.handleLiteralMapEntry(colon, token,
+                nullAwareKeyToken: null, nullAwareValueToken: next);
+          } else {
+            // Non null-aware entry. For example:
+            //   <bool, num>{ x: y }
+            token = parseExpression(colon);
+            listener.handleLiteralMapEntry(colon, token.next!);
+          }
         }
       } else {
         while (info != null) {
@@ -7000,8 +7011,19 @@
             token = parseExpression(token);
             if (optional(':', token.next!)) {
               Token colon = token.next!;
-              token = parseExpression(colon);
-              listener.handleLiteralMapEntry(colon, token.next!);
+              Token next = colon.next!;
+              if (optional('?', next)) {
+                token = parseExpression(next);
+                // Null-aware value. For example:
+                //   <double, Symbol>{ if (b) x: ?y }
+                listener.handleLiteralMapEntry(colon, token,
+                    nullAwareKeyToken: null, nullAwareValueToken: next);
+              } else {
+                // Non null-aware entry. For example:
+                //   <String, int>{ if (b) x : y }
+                token = parseExpression(colon);
+                listener.handleLiteralMapEntry(colon, token.next!);
+              }
             }
           } else {
             token = info.parse(token, this);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 29d41d1..bb98c10 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -147,6 +147,9 @@
   /// `true` if class-modifiers is enabled
   final bool enableClassModifiers;
 
+  /// `true` if null-aware elements is enabled
+  final bool enableNullAwareElements;
+
   final FeatureSet _featureSet;
 
   final LineInfo _lineInfo;
@@ -174,6 +177,8 @@
         enableInlineClass = _featureSet.isEnabled(Feature.inline_class),
         enableSealedClass = _featureSet.isEnabled(Feature.sealed_class),
         enableClassModifiers = _featureSet.isEnabled(Feature.class_modifiers),
+        enableNullAwareElements =
+            _featureSet.isEnabled(Feature.null_aware_elements),
         uri = uri ?? fileUri;
 
   @override
@@ -4746,10 +4751,20 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     assert(optional(':', colon));
     debugEvent("LiteralMapEntry");
 
+    // TODO(cstefantsova): Handle null-aware map entries.
+    if (!enableNullAwareElements &&
+        (nullAwareKeyToken != null || nullAwareValueToken != null)) {
+      _reportFeatureNotEnabled(
+        feature: ExperimentalFeatures.null_aware_elements,
+        startToken: nullAwareKeyToken ?? nullAwareValueToken!,
+      );
+    }
+
     var value = pop() as ExpressionImpl;
     var key = pop() as ExpressionImpl;
     push(
@@ -5037,6 +5052,18 @@
   }
 
   @override
+  void handleNullAwareElement(Token nullAwareElement) {
+    debugEvent('NullAwareElement');
+    // TODO(cstefantsova): Handle null-aware elements.
+    if (!enableNullAwareElements) {
+      _reportFeatureNotEnabled(
+        feature: ExperimentalFeatures.null_aware_elements,
+        startToken: nullAwareElement,
+      );
+    }
+  }
+
+  @override
   void handleNullCheckPattern(Token question) {
     debugEvent('NullCheckPattern');
     if (!_featureSet.isEnabled(Feature.patterns)) {
diff --git a/pkg/front_end/lib/src/kernel/body_builder.dart b/pkg/front_end/lib/src/kernel/body_builder.dart
index 394d848..3399d8e 100644
--- a/pkg/front_end/lib/src/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/kernel/body_builder.dart
@@ -4995,11 +4995,29 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     debugEvent("LiteralMapEntry");
     Expression value = popForValue();
     Expression key = popForValue();
-    push(forest.createMapEntry(offsetForToken(colon), key, value));
+    if (nullAwareKeyToken == null && nullAwareValueToken == null) {
+      push(forest.createMapEntry(offsetForToken(colon), key, value));
+    } else {
+      if (!libraryFeatures.nullAwareElements.isEnabled) {
+        addProblem(
+            templateExperimentNotEnabledOffByDefault
+                .withArguments(ExperimentalFlag.nullAwareElements.name),
+            (nullAwareKeyToken ?? nullAwareValueToken!).offset,
+            noLength);
+      }
+      // TODO(cstefantsova): Replace the following no-op with the node for
+      // handling null-aware elements.
+      push(forest.createSpreadElement(
+          offsetForToken(nullAwareKeyToken ?? nullAwareValueToken!),
+          forest.createNullLiteral(
+              offsetForToken(nullAwareKeyToken ?? nullAwareValueToken!)),
+          isNullAware: true));
+    }
   }
 
   String symbolPartToString(name) {
@@ -7130,6 +7148,24 @@
   }
 
   @override
+  void handleNullAwareElement(Token nullAwareElement) {
+    debugEvent("NullAwareElement");
+    // TODO(cstefantsova): Replace the following no-op with the node for
+    // handling null-aware elements.
+    if (!libraryFeatures.nullAwareElements.isEnabled) {
+      addProblem(
+          templateExperimentNotEnabledOffByDefault
+              .withArguments(ExperimentalFlag.nullAwareElements.name),
+          nullAwareElement.offset,
+          noLength);
+    }
+    pop(); // Expression.
+    push(forest.createSpreadElement(offsetForToken(nullAwareElement),
+        forest.createNullLiteral(offsetForToken(nullAwareElement)),
+        isNullAware: true));
+  }
+
+  @override
   void handleSpreadExpression(Token spreadToken) {
     debugEvent("SpreadExpression");
     Object? expression = pop();
diff --git a/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart b/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart
index dc7e7f6..0de7023 100644
--- a/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart
+++ b/pkg/front_end/lib/src/kernel/macro/annotation_parser.dart
@@ -1967,7 +1967,8 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     _unhandled('map entry');
   }
 
@@ -2189,6 +2190,11 @@
   }
 
   @override
+  void handleNullAwareElement(Token spreadToken) {
+    _unsupported();
+  }
+
+  @override
   void handleObjectPattern(
       Token firstIdentifier, Token? dot, Token? secondIdentifier) {
     _unsupported();
diff --git a/pkg/front_end/lib/src/util/parser_ast_helper.dart b/pkg/front_end/lib/src/util/parser_ast_helper.dart
index 58bb32f..b9e5d33 100644
--- a/pkg/front_end/lib/src/util/parser_ast_helper.dart
+++ b/pkg/front_end/lib/src/util/parser_ast_helper.dart
@@ -1449,9 +1449,13 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     LiteralMapEntryHandle data = new LiteralMapEntryHandle(ParserAstType.HANDLE,
-        colon: colon, endToken: endToken);
+        colon: colon,
+        endToken: endToken,
+        nullAwareKeyToken: nullAwareKeyToken,
+        nullAwareValueToken: nullAwareValueToken);
     seen(data);
   }
 
@@ -2454,6 +2458,14 @@
   }
 
   @override
+  void handleNullAwareElement(Token nullAwareToken) {
+    NullAwareElementHandle data = new NullAwareElementHandle(
+        ParserAstType.HANDLE,
+        nullAwareToken: nullAwareToken);
+    seen(data);
+  }
+
+  @override
   void handleRestPattern(Token dots, {required bool hasSubPattern}) {
     RestPatternHandle data = new RestPatternHandle(ParserAstType.HANDLE,
         dots: dots, hasSubPattern: hasSubPattern);
@@ -6234,15 +6246,22 @@
 class LiteralMapEntryHandle extends ParserAstNode {
   final Token colon;
   final Token endToken;
+  final Token? nullAwareKeyToken;
+  final Token? nullAwareValueToken;
 
   LiteralMapEntryHandle(ParserAstType type,
-      {required this.colon, required this.endToken})
+      {required this.colon,
+      required this.endToken,
+      this.nullAwareKeyToken,
+      this.nullAwareValueToken})
       : super("LiteralMapEntry", type);
 
   @override
   Map<String, Object?> get deprecatedArguments => {
         "colon": colon,
         "endToken": endToken,
+        "nullAwareKeyToken": nullAwareKeyToken,
+        "nullAwareValueToken": nullAwareValueToken,
       };
 
   @override
@@ -8481,6 +8500,21 @@
   R accept<R>(ParserAstVisitor<R> v) => v.visitSpreadExpressionHandle(this);
 }
 
+class NullAwareElementHandle extends ParserAstNode {
+  final Token nullAwareToken;
+
+  NullAwareElementHandle(ParserAstType type, {required this.nullAwareToken})
+      : super("NullAwareElement", type);
+
+  @override
+  Map<String, Object?> get deprecatedArguments => {
+        "nullAwareToken": nullAwareToken,
+      };
+
+  @override
+  R accept<R>(ParserAstVisitor<R> v) => v.visitNullAwareElementHandle(this);
+}
+
 class RestPatternHandle extends ParserAstNode {
   final Token dots;
   final bool hasSubPattern;
@@ -10281,6 +10315,7 @@
   R visitIfControlFlowEnd(IfControlFlowEnd node);
   R visitIfElseControlFlowEnd(IfElseControlFlowEnd node);
   R visitSpreadExpressionHandle(SpreadExpressionHandle node);
+  R visitNullAwareElementHandle(NullAwareElementHandle node);
   R visitRestPatternHandle(RestPatternHandle node);
   R visitFunctionTypedFormalParameterBegin(
       FunctionTypedFormalParameterBegin node);
@@ -11443,6 +11478,10 @@
       node.visitChildren(this);
 
   @override
+  void visitNullAwareElementHandle(NullAwareElementHandle node) =>
+      node.visitChildren(this);
+
+  @override
   void visitRestPatternHandle(RestPatternHandle node) =>
       node.visitChildren(this);
 
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
index d67b321..4114b55 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.expect
@@ -207,7 +207,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -233,7 +233,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -269,7 +269,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -294,7 +294,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
index 84fc530..7ac869fd 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251.dart.intertwined.expect
@@ -330,7 +330,7 @@
                                           parsePrimary(:, expression, ConstantPatternContext.none)
                                             parseLiteralNull(:)
                                               listener: handleLiteralNull(null)
-                                    listener: handleLiteralMapEntry(:, })
+                                    listener: handleLiteralMapEntry(:, }, null, null)
                                     listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -386,7 +386,7 @@
                                         parsePrimary(:, expression, ConstantPatternContext.none)
                                           parseLiteralNull(:)
                                             listener: handleLiteralNull(null)
-                                  listener: handleLiteralMapEntry(:, })
+                                  listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -448,7 +448,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralNull(:)
                                         listener: handleLiteralNull(null)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -498,7 +498,7 @@
                                   parsePrimary(:, expression, ConstantPatternContext.none)
                                     parseLiteralNull(:)
                                       listener: handleLiteralNull(null)
-                            listener: handleLiteralMapEntry(:, })
+                            listener: handleLiteralMapEntry(:, }, null, null)
                             listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
index 66f0520..85fe115 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.expect
@@ -222,7 +222,7 @@
                 beginLiteralString("a")
                 endLiteralString(0, :)
                 handleLiteralNull(null)
-                handleLiteralMapEntry(:, })
+                handleLiteralMapEntry(:, }, null, null)
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
@@ -250,7 +250,7 @@
                 beginLiteralString("a")
                 endLiteralString(0, :)
                 handleLiteralNull(null)
-                handleLiteralMapEntry(:, })
+                handleLiteralMapEntry(:, }, null, null)
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
@@ -288,7 +288,7 @@
                 beginLiteralString("a")
                 endLiteralString(0, :)
                 handleLiteralNull(null)
-                handleLiteralMapEntry(:, })
+                handleLiteralMapEntry(:, }, null, null)
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
@@ -315,7 +315,7 @@
                 beginLiteralString("a")
                 endLiteralString(0, :)
                 handleLiteralNull(null)
-                handleLiteralMapEntry(:, })
+                handleLiteralMapEntry(:, }, null, null)
                 handleLiteralSetOrMap(1, {, const, }, false)
               endConstLiteral(})
             endFieldInitializer(=, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
index 96fe89b..b501898 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_const.dart.intertwined.expect
@@ -333,7 +333,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralNull(:)
                                           listener: handleLiteralNull(null)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
@@ -388,7 +388,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralNull(:)
                                         listener: handleLiteralNull(null)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
@@ -453,7 +453,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralNull(:)
                                           listener: handleLiteralNull(null)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
@@ -506,7 +506,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralNull(:)
                                         listener: handleLiteralNull(null)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, const, }, false)
                             listener: endConstLiteral(})
                   listener: endFieldInitializer(=, })
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
index 5ad1474..55c8bf1 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.expect
@@ -228,7 +228,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -254,7 +254,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -291,7 +291,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -317,7 +317,7 @@
               beginLiteralString("a")
               endLiteralString(0, :)
               handleLiteralNull(null)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endFieldInitializer(=, })
           endClassFields(null, null, null, null, null, null, final, 1, final, ;)
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
index 3903b5a..a284668 100644
--- a/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_45251_new.dart.intertwined.expect
@@ -338,7 +338,7 @@
                                         parsePrimary(:, expression, ConstantPatternContext.none)
                                           parseLiteralNull(:)
                                             listener: handleLiteralNull(null)
-                                  listener: handleLiteralMapEntry(:, })
+                                  listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -393,7 +393,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralNull(:)
                                           listener: handleLiteralNull(null)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -460,7 +460,7 @@
                                         parsePrimary(:, expression, ConstantPatternContext.none)
                                           parseLiteralNull(:)
                                             listener: handleLiteralNull(null)
-                                  listener: handleLiteralMapEntry(:, })
+                                  listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
@@ -515,7 +515,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralNull(:)
                                           listener: handleLiteralNull(null)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                   listener: endFieldInitializer(=, })
                 listener: endClassFields(null, null, null, null, null, null, final, 1, final, ;)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
index 63227f5..288192f 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
@@ -181,7 +181,7 @@
         endTypeArguments(2, <, >)
         handleTypeArgumentApplication(<)
         handleLiteralNull(null)
-        handleLiteralMapEntry(:, })
+        handleLiteralMapEntry(:, }, null, null)
         handleLiteralSetOrMap(1, {, null, }, false)
       endFieldInitializer(=, })
     endTopLevelFields(null, null, null, null, null, var, 1, var, ;)
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
index 82294b8..458ab58 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
@@ -202,7 +202,7 @@
                           parsePrimary(:, expression, ConstantPatternContext.none)
                             parseLiteralNull(:)
                               listener: handleLiteralNull(null)
-                    listener: handleLiteralMapEntry(:, })
+                    listener: handleLiteralMapEntry(:, }, null, null)
                     listener: handleLiteralSetOrMap(1, {, null, }, false)
           listener: endFieldInitializer(=, })
         listener: endTopLevelFields(null, null, null, null, null, var, 1, var, ;)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
index c1189bd..379d9a0 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.expect
@@ -115,7 +115,7 @@
                   endLiteralString(0, :)
                   beginLiteralString("b")
                   endLiteralString(0, })
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                   handleConditionalExpressionColon()
                   handleNoTypeArguments([)
@@ -226,7 +226,7 @@
                   endLiteralString(0, :)
                   beginLiteralString("b")
                   endLiteralString(0, })
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                   handleConditionalExpressionColon()
                   handleNoTypeArguments([)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
index 1798655..4ec4fe5 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49132_not_nullable.dart.intertwined.expect
@@ -302,7 +302,7 @@
                                                     parseSingleLiteralString(:)
                                                       listener: beginLiteralString("b")
                                                       listener: endLiteralString(0, })
-                                          listener: handleLiteralMapEntry(:, })
+                                          listener: handleLiteralMapEntry(:, }, null, null)
                                           listener: handleLiteralSetOrMap(1, {, null, }, false)
                                 ensureColon(})
                                 listener: handleConditionalExpressionColon()
@@ -603,7 +603,7 @@
                                                     parseSingleLiteralString(:)
                                                       listener: beginLiteralString("b")
                                                       listener: endLiteralString(0, })
-                                          listener: handleLiteralMapEntry(:, })
+                                          listener: handleLiteralMapEntry(:, }, null, null)
                                           listener: handleLiteralSetOrMap(1, {, null, }, false)
                                 ensureColon(})
                                 listener: handleConditionalExpressionColon()
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.expect
index 0f14de8..1fb8045 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.expect
@@ -40,7 +40,7 @@
               handleNoTypeArguments({)
               handleLiteralInt(0)
               handleLiteralInt(1)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endVariableInitializer(=)
           endInitializedIdentifier(m)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
index c963c6f..295f06d 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678.dart.intertwined.expect
@@ -83,7 +83,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(1)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(m)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.expect
index 05488be..a6680ef 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.expect
@@ -40,7 +40,7 @@
               handleNoTypeArguments({)
               handleLiteralInt(0)
               handleLiteralInt(1)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endVariableInitializer(=)
           endInitializedIdentifier(m)
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
index 2016417..24e4922 100644
--- a/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/nnbd/issue_49678_prime.dart.intertwined.expect
@@ -83,7 +83,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(1)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endVariableInitializer(=)
                     listener: endInitializedIdentifier(m)
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart
new file mode 100644
index 0000000..28d9df0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart
@@ -0,0 +1,11 @@
+foo1(int? x) => <int>[?x];
+foo2(String? x) => <String>{?x};
+foo3(bool? x, num y) => <bool, num>{?x: y};
+bar1(int? x) => <int>[?x];
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+bar5(int? x, num y) => <int, num>{?x: y};
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.expect b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.expect
new file mode 100644
index 0000000..5776664
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.expect
@@ -0,0 +1,529 @@
+beginCompilationUnit(foo1)
+  beginMetadataStar(foo1)
+  endMetadataStar(0)
+  beginTopLevelMember(foo1)
+    beginTopLevelMethod(, null, null)
+      handleNoType()
+      handleIdentifier(foo1, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(])
+      handleNoArguments(])
+      handleSend(x, ])
+      handleNullAwareElement(?)
+      handleLiteralList(1, [, null, ])
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(foo1, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(foo2)
+  endMetadataStar(0)
+  beginTopLevelMember(foo2)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(foo2, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(?)
+          handleType(String, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(String, typeReference)
+        handleNoTypeArguments(>)
+        handleType(String, null)
+      endTypeArguments(1, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(})
+      handleNoArguments(})
+      handleSend(x, })
+      handleNullAwareElement(?)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(foo2, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(foo3)
+  endMetadataStar(0)
+  beginTopLevelMember(foo3)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(foo3, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(?)
+          handleType(bool, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(num)
+        endMetadataStar(0)
+        beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(y)
+          handleType(num, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(bool, typeReference)
+        handleNoTypeArguments(,)
+        handleType(bool, null)
+        handleIdentifier(num, typeReference)
+        handleNoTypeArguments(>)
+        handleType(num, null)
+      endTypeArguments(2, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(:)
+      handleNoArguments(:)
+      handleSend(x, :)
+      handleIdentifier(y, expression)
+      handleNoTypeArguments(})
+      handleNoArguments(})
+      handleSend(y, })
+      handleLiteralMapEntry(:, y, ?, null)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(foo3, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar1)
+  endMetadataStar(0)
+  beginTopLevelMember(bar1)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar1, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(])
+      handleNoArguments(])
+      handleSend(x, ])
+      handleNullAwareElement(?)
+      handleLiteralList(1, [, null, ])
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar1, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar2)
+  endMetadataStar(0)
+  beginTopLevelMember(bar2)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar2, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b)
+          handleType(bool, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      beginIfControlFlow(if)
+        handleIdentifier(b, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(b, ))
+        handleParenthesizedCondition((, null, null)
+        handleThenControlFlow())
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(})
+        handleNoArguments(})
+        handleSend(x, })
+        handleNullAwareElement(?)
+      endIfControlFlow(x)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar2, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar3)
+  endMetadataStar(0)
+  beginTopLevelMember(bar3)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar3, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(>)
+        handleType(int, null)
+      endTypeArguments(1, <, >)
+      beginForControlFlow(null, for)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration(_, null, var)
+          handleIdentifier(_, localVariableDeclaration)
+          beginInitializedIdentifier(_)
+            handleNoVariableInitializer(_)
+          endInitializedIdentifier(_)
+        endVariablesDeclaration(1, null)
+        handleForInitializerLocalVariableDeclaration(_, true)
+        beginForInExpression([])
+          handleNoTypeArguments([])
+          handleLiteralList(0, [, null, ])
+        endForInExpression())
+        handleForInLoopParts(null, for, (, null, in)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(})
+        handleNoArguments(})
+        handleSend(x, })
+        handleNullAwareElement(?)
+      endForInControlFlow(x)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar3, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar4)
+  endMetadataStar(0)
+  beginTopLevelMember(bar4)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar4, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(String)
+        endMetadataStar(0)
+        beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(String, typeReference)
+          handleNoTypeArguments(x)
+          handleType(String, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(?)
+          handleType(bool, ?)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(String, typeReference)
+        handleNoTypeArguments(,)
+        handleType(String, null)
+        handleIdentifier(bool, typeReference)
+        handleNoTypeArguments(>)
+        handleType(bool, null)
+      endTypeArguments(2, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(:)
+      handleNoArguments(:)
+      handleSend(x, :)
+      handleIdentifier(y, expression)
+      handleNoTypeArguments(})
+      handleNoArguments(})
+      handleSend(y, })
+      handleLiteralMapEntry(:, y, null, ?)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar4, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar5)
+  endMetadataStar(0)
+  beginTopLevelMember(bar5)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar5, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(num)
+        endMetadataStar(0)
+        beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(y)
+          handleType(num, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(int, typeReference)
+        handleNoTypeArguments(,)
+        handleType(int, null)
+        handleIdentifier(num, typeReference)
+        handleNoTypeArguments(>)
+        handleType(num, null)
+      endTypeArguments(2, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(:)
+      handleNoArguments(:)
+      handleSend(x, :)
+      handleIdentifier(y, expression)
+      handleNoTypeArguments(})
+      handleNoArguments(})
+      handleSend(y, })
+      handleLiteralMapEntry(:, y, ?, null)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar5, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar6)
+  endMetadataStar(0)
+  beginTopLevelMember(bar6)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar6, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(double)
+        endMetadataStar(0)
+        beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(double, typeReference)
+          handleNoTypeArguments(?)
+          handleType(double, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(Symbol)
+        endMetadataStar(0)
+        beginFormalParameter(Symbol, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Symbol, typeReference)
+          handleNoTypeArguments(?)
+          handleType(Symbol, ?)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(double, typeReference)
+        handleNoTypeArguments(,)
+        handleType(double, null)
+        handleIdentifier(Symbol, typeReference)
+        handleNoTypeArguments(>)
+        handleType(Symbol, null)
+      endTypeArguments(2, <, >)
+      handleIdentifier(x, expression)
+      handleNoTypeArguments(:)
+      handleNoArguments(:)
+      handleSend(x, :)
+      handleIdentifier(y, expression)
+      handleNoTypeArguments(})
+      handleNoArguments(})
+      handleSend(y, })
+      handleLiteralMapEntry(:, y, ?, ?)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar6, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar7)
+  endMetadataStar(0)
+  beginTopLevelMember(bar7)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar7, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(num)
+        endMetadataStar(0)
+        beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(?)
+          handleType(num, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(double)
+        endMetadataStar(0)
+        beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(double, typeReference)
+          handleNoTypeArguments(?)
+          handleType(double, ?)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b)
+          handleType(bool, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(num, typeReference)
+        handleNoTypeArguments(,)
+        handleType(num, null)
+        handleIdentifier(double, typeReference)
+        handleNoTypeArguments(>)
+        handleType(double, null)
+      endTypeArguments(2, <, >)
+      beginIfControlFlow(if)
+        handleIdentifier(b, expression)
+        handleNoTypeArguments())
+        handleNoArguments())
+        handleSend(b, ))
+        handleParenthesizedCondition((, null, null)
+        handleThenControlFlow())
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(:)
+        handleNoArguments(:)
+        handleSend(x, :)
+        handleIdentifier(y, expression)
+        handleNoTypeArguments(})
+        handleNoArguments(})
+        handleSend(y, })
+        handleLiteralMapEntry(:, y, ?, ?)
+      endIfControlFlow(y)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar7, null, ;)
+  endTopLevelDeclaration(;)
+  beginMetadataStar(bar8)
+  endMetadataStar(0)
+  beginTopLevelMember(bar8)
+    beginTopLevelMethod(;, null, null)
+      handleNoType(;)
+      handleIdentifier(bar8, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(num)
+        endMetadataStar(0)
+        beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(num, typeReference)
+          handleNoTypeArguments(?)
+          handleType(num, ?)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(double)
+        endMetadataStar(0)
+        beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(double, typeReference)
+          handleNoTypeArguments(?)
+          handleType(double, ?)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginTypeArguments(<)
+        handleIdentifier(num, typeReference)
+        handleNoTypeArguments(,)
+        handleType(num, null)
+        handleIdentifier(double, typeReference)
+        handleNoTypeArguments(>)
+        handleType(double, null)
+      endTypeArguments(2, <, >)
+      beginForControlFlow(null, for)
+        beginMetadataStar(var)
+        endMetadataStar(0)
+        handleNoType(var)
+        beginVariablesDeclaration(_, null, var)
+          handleIdentifier(_, localVariableDeclaration)
+          beginInitializedIdentifier(_)
+            handleNoVariableInitializer(_)
+          endInitializedIdentifier(_)
+        endVariablesDeclaration(1, null)
+        handleForInitializerLocalVariableDeclaration(_, true)
+        beginForInExpression([])
+          handleNoTypeArguments([])
+          handleLiteralList(0, [, null, ])
+        endForInExpression())
+        handleForInLoopParts(null, for, (, null, in)
+        handleIdentifier(x, expression)
+        handleNoTypeArguments(:)
+        handleNoArguments(:)
+        handleSend(x, :)
+        handleIdentifier(y, expression)
+        handleNoTypeArguments(})
+        handleNoArguments(})
+        handleSend(y, })
+        handleLiteralMapEntry(:, y, ?, ?)
+      endForInControlFlow(y)
+      handleLiteralSetOrMap(1, {, null, }, false)
+      handleExpressionFunctionBody(=>, ;)
+    endTopLevelMethod(bar8, null, ;)
+  endTopLevelDeclaration(;)
+endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect
new file mode 100644
index 0000000..a937d85
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.intertwined.expect
@@ -0,0 +1,1045 @@
+parseUnit(foo1)
+  skipErrorTokens(foo1)
+  listener: beginCompilationUnit(foo1)
+  syntheticPreviousToken(foo1)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(foo1)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(foo1)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , NoType(), null, foo1, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(foo1, topLevelFunctionDeclaration)
+        parseMethodTypeVar(foo1)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(foo1, foo1, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(foo1, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(int, null)
+                      listener: endTypeArguments(1, <, >)
+                      parseLiteralListSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(])
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(])
+                                    listener: handleSend(x, ])
+                        listener: handleNullAwareElement(?)
+                        listener: handleLiteralList(1, [, null, ])
+            ensureSemicolon(])
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(foo1, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(foo2)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(foo2)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, foo2, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(foo2, topLevelFunctionDeclaration)
+        parseMethodTypeVar(foo2)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(foo2, foo2, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(foo2, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(String)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(String, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(String, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(String, null)
+                      listener: endTypeArguments(1, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(x, })
+                        listener: handleNullAwareElement(?)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(foo2, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(foo3)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(foo3)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, foo3, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(foo3, topLevelFunctionDeclaration)
+        parseMethodTypeVar(foo3)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(foo3, foo3, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(foo3, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(bool, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(num)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(num, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(num, null)
+                ensureIdentifier(num, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(bool, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(bool, null)
+                      listener: handleIdentifier(num, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(num, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(:)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, ?, null)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(foo3, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar1)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar1)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar1, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar1, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar1)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar1, bar1, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar1, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(int, null)
+                      listener: endTypeArguments(1, <, >)
+                      parseLiteralListSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(])
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(])
+                                    listener: handleSend(x, ])
+                        listener: handleNullAwareElement(?)
+                        listener: handleLiteralList(1, [, null, ])
+            ensureSemicolon(])
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar1, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar2)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar2)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar2, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar2, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar2)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar2, bar2, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar2, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(int, null)
+                      listener: endTypeArguments(1, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        listener: beginIfControlFlow(if)
+                        ensureParenthesizedCondition(if, allowCase: false)
+                          parseExpressionInParenthesisRest((, allowCase: false)
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(b, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(b)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(b, ))
+                            ensureCloseParen(b, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: handleThenControlFlow())
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(x, })
+                        listener: handleNullAwareElement(?)
+                        listener: endIfControlFlow(x)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar2, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar3)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar3)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar3, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar3, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar3)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar3, bar3, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar3, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(int, null)
+                      listener: endTypeArguments(1, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        listener: beginForControlFlow(null, for)
+                        parseForLoopPartsStart(null, for, ForPartsContext(null))
+                          parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                            parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                              listener: beginMetadataStar(var)
+                              listener: endMetadataStar(0)
+                              listener: handleNoType(var)
+                              listener: beginVariablesDeclaration(_, null, var)
+                        parseForLoopPartsMid(var, null, for)
+                          parseVariablesDeclarationRest(var, false)
+                            parseOptionallyInitializedIdentifier(var)
+                              ensureIdentifier(var, localVariableDeclaration)
+                                listener: handleIdentifier(_, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(_)
+                              parseVariableInitializerOpt(_)
+                                listener: handleNoVariableInitializer(_)
+                              listener: endInitializedIdentifier(_)
+                            listener: endVariablesDeclaration(1, null)
+                          listener: handleForInitializerLocalVariableDeclaration(_, true)
+                        parseForInLoopPartsRest(_, null, for, null, _)
+                          listener: beginForInExpression([])
+                          parseExpression(in)
+                            parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                parsePrimary(in, expression, ConstantPatternContext.none)
+                                  listener: handleNoTypeArguments([])
+                                  parseLiteralListSuffix(in, null)
+                                    rewriteSquareBrackets(in)
+                                      link([, ])
+                                      rewriter()
+                                    listener: handleLiteralList(0, [, null, ])
+                          ensureCloseParen(], ()
+                          listener: endForInExpression())
+                          listener: handleForInLoopParts(null, for, (, null, in)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(x, })
+                        listener: handleNullAwareElement(?)
+                        listener: endForInControlFlow(x)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar3, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar4)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar4)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar4, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar4, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar4)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar4, bar4, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar4, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(String)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(String, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(String, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(String, null)
+                ensureIdentifier(String, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(bool, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(String, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(String, null)
+                      listener: handleIdentifier(bool, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(bool, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        parseExpression({)
+                          parsePrecedenceExpression({, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression({, true, ConstantPatternContext.none)
+                              parsePrimary({, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral({, expression, ConstantPatternContext.none)
+                                  parseSend({, expression, ConstantPatternContext.none)
+                                    isNextIdentifier({)
+                                    ensureIdentifier({, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, null, ?)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar4, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar5)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar5)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar5, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar5, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar5)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar5, bar5, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar5, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(num)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(num, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(num, null)
+                ensureIdentifier(num, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(int, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(int, null)
+                      listener: handleIdentifier(num, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(num, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(:)
+                          parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(:, true, ConstantPatternContext.none)
+                              parsePrimary(:, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(:, expression, ConstantPatternContext.none)
+                                  parseSend(:, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(:)
+                                    ensureIdentifier(:, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, ?, null)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar5, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar6)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar6)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar6, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar6, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar6)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar6, bar6, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar6, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(double)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(double, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(double, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Symbol)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Symbol, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Symbol, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(Symbol, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(double, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(double, null)
+                      listener: handleIdentifier(Symbol, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(Symbol, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, ?, ?)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar6, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar7)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar7)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar7, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar7, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar7)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar7, bar7, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar7, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(num)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(num, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(num, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(double)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(double, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(double, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(num, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(num, null)
+                      listener: handleIdentifier(double, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(double, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        listener: beginIfControlFlow(if)
+                        ensureParenthesizedCondition(if, allowCase: false)
+                          parseExpressionInParenthesisRest((, allowCase: false)
+                            parseExpression(()
+                              parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression((, true, ConstantPatternContext.none)
+                                  parsePrimary((, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                      parseSend((, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(()
+                                        ensureIdentifier((, expression)
+                                          listener: handleIdentifier(b, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(b)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(b, ))
+                            ensureCloseParen(b, ()
+                            listener: handleParenthesizedCondition((, null, null)
+                        listener: handleThenControlFlow())
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, ?, ?)
+                        listener: endIfControlFlow(y)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar7, null, ;)
+  listener: endTopLevelDeclaration(;)
+  parseTopLevelDeclarationImpl(;, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(;)
+      listener: beginMetadataStar(bar8)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(;)
+      listener: beginTopLevelMember(bar8)
+      isReservedKeyword(()
+      parseTopLevelMethod(;, null, null, ;, NoType(), null, bar8, false)
+        listener: beginTopLevelMethod(;, null, null)
+        listener: handleNoType(;)
+        ensureIdentifierPotentiallyRecovered(;, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(bar8, topLevelFunctionDeclaration)
+        parseMethodTypeVar(bar8)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(bar8, bar8, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(bar8, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(num)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(num, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(num, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(num, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(double)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(double, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(double, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(double, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, y, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          parseExpressionFunctionBody(=>, false)
+            parseExpression(=>)
+              parsePrecedenceExpression(=>, 1, true, ConstantPatternContext.none)
+                parseUnaryExpression(=>, true, ConstantPatternContext.none)
+                  parsePrimary(=>, expression, ConstantPatternContext.none)
+                    parseLiteralListSetMapOrFunction(=>, null)
+                      listener: beginTypeArguments(<)
+                      listener: handleIdentifier(num, typeReference)
+                      listener: handleNoTypeArguments(,)
+                      listener: handleType(num, null)
+                      listener: handleIdentifier(double, typeReference)
+                      listener: handleNoTypeArguments(>)
+                      listener: handleType(double, null)
+                      listener: endTypeArguments(2, <, >)
+                      parseLiteralSetOrMapSuffix(>, null)
+                        listener: beginForControlFlow(null, for)
+                        parseForLoopPartsStart(null, for, ForPartsContext(null))
+                          parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                            parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                              listener: beginMetadataStar(var)
+                              listener: endMetadataStar(0)
+                              listener: handleNoType(var)
+                              listener: beginVariablesDeclaration(_, null, var)
+                        parseForLoopPartsMid(var, null, for)
+                          parseVariablesDeclarationRest(var, false)
+                            parseOptionallyInitializedIdentifier(var)
+                              ensureIdentifier(var, localVariableDeclaration)
+                                listener: handleIdentifier(_, localVariableDeclaration)
+                              listener: beginInitializedIdentifier(_)
+                              parseVariableInitializerOpt(_)
+                                listener: handleNoVariableInitializer(_)
+                              listener: endInitializedIdentifier(_)
+                            listener: endVariablesDeclaration(1, null)
+                          listener: handleForInitializerLocalVariableDeclaration(_, true)
+                        parseForInLoopPartsRest(_, null, for, null, _)
+                          listener: beginForInExpression([])
+                          parseExpression(in)
+                            parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                parsePrimary(in, expression, ConstantPatternContext.none)
+                                  listener: handleNoTypeArguments([])
+                                  parseLiteralListSuffix(in, null)
+                                    rewriteSquareBrackets(in)
+                                      link([, ])
+                                      rewriter()
+                                    listener: handleLiteralList(0, [, null, ])
+                          ensureCloseParen(], ()
+                          listener: endForInExpression())
+                          listener: handleForInLoopParts(null, for, (, null, in)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(x, expression)
+                                    listener: handleNoTypeArguments(:)
+                                    parseArgumentsOpt(x)
+                                      listener: handleNoArguments(:)
+                                    listener: handleSend(x, :)
+                        parseExpression(?)
+                          parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                            parseUnaryExpression(?, true, ConstantPatternContext.none)
+                              parsePrimary(?, expression, ConstantPatternContext.none)
+                                parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                  parseSend(?, expression, ConstantPatternContext.none)
+                                    isNextIdentifier(?)
+                                    ensureIdentifier(?, expression)
+                                      listener: handleIdentifier(y, expression)
+                                    listener: handleNoTypeArguments(})
+                                    parseArgumentsOpt(y)
+                                      listener: handleNoArguments(})
+                                    listener: handleSend(y, })
+                        listener: handleLiteralMapEntry(:, y, ?, ?)
+                        listener: endForInControlFlow(y)
+                        listener: handleLiteralSetOrMap(1, {, null, }, false)
+            ensureSemicolon(})
+            listener: handleExpressionFunctionBody(=>, ;)
+            inGenerator()
+        listener: endTopLevelMethod(bar8, null, ;)
+  listener: endTopLevelDeclaration(;)
+  reportAllErrorTokens(foo1)
+  listener: endCompilationUnit(11, )
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.parser.expect b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.parser.expect
new file mode 100644
index 0000000..c1a1abd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.parser.expect
@@ -0,0 +1,27 @@
+NOTICE: Stream was rewritten by parser!
+
+foo1(int? x) => <int>[?x];
+foo2(String? x) => <String>{?x};
+foo3(bool? x, num y) => <bool, num>{?x: y};
+bar1(int? x) => <int>[?x];
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+bar5(int? x, num y) => <int, num>{?x: y};
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
+
+
+foo1[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken][[BeginToken]?[SimpleToken]x[StringToken]][SimpleToken];[SimpleToken]
+foo2[StringToken]([BeginToken]String[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]String[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]}[SimpleToken];[SimpleToken]
+foo3[StringToken]([BeginToken]bool[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] num[StringToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]bool[StringToken],[SimpleToken] num[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] y[StringToken]}[SimpleToken];[SimpleToken]
+bar1[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken][[BeginToken]?[SimpleToken]x[StringToken]][SimpleToken];[SimpleToken]
+bar2[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] bool[StringToken] b[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken]{[BeginToken] if[KeywordToken] ([BeginToken]b[StringToken])[SimpleToken] ?[SimpleToken]x[StringToken] }[SimpleToken];[SimpleToken]
+bar3[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken]{[BeginToken] for[KeywordToken] ([BeginToken]var[KeywordToken] _[StringToken] in[KeywordToken] [[BeginToken]][SimpleToken])[SimpleToken] ?[SimpleToken]x[StringToken] }[SimpleToken];[SimpleToken]
+bar4[StringToken]([BeginToken]String[StringToken] x[StringToken],[SimpleToken] bool[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]String[StringToken],[SimpleToken] bool[StringToken]>[SimpleToken]{[BeginToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken]}[SimpleToken];[SimpleToken]
+bar5[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] num[StringToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken],[SimpleToken] num[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] y[StringToken]}[SimpleToken];[SimpleToken]
+bar6[StringToken]([BeginToken]double[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] Symbol[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]double[StringToken],[SimpleToken] Symbol[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken]}[SimpleToken];[SimpleToken]
+bar7[StringToken]([BeginToken]num[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] double[StringToken]?[SimpleToken] y[StringToken],[SimpleToken] bool[StringToken] b[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]num[StringToken],[SimpleToken] double[StringToken]>[SimpleToken]{[BeginToken] if[KeywordToken] ([BeginToken]b[StringToken])[SimpleToken] ?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken] }[SimpleToken];[SimpleToken]
+bar8[StringToken]([BeginToken]num[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] double[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]num[StringToken],[SimpleToken] double[StringToken]>[SimpleToken]{[BeginToken] for[KeywordToken] ([BeginToken]var[KeywordToken] _[StringToken] in[KeywordToken] [[BeginToken]][SimpleToken])[SimpleToken] ?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken] }[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.scanner.expect b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.scanner.expect
new file mode 100644
index 0000000..57d6ae8
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/simple_positive.dart.scanner.expect
@@ -0,0 +1,25 @@
+foo1(int? x) => <int>[?x];
+foo2(String? x) => <String>{?x};
+foo3(bool? x, num y) => <bool, num>{?x: y};
+bar1(int? x) => <int>[?x];
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+bar5(int? x, num y) => <int, num>{?x: y};
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
+
+
+foo1[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken][[BeginToken]?[SimpleToken]x[StringToken]][SimpleToken];[SimpleToken]
+foo2[StringToken]([BeginToken]String[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]String[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]}[SimpleToken];[SimpleToken]
+foo3[StringToken]([BeginToken]bool[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] num[StringToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]bool[StringToken],[SimpleToken] num[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] y[StringToken]}[SimpleToken];[SimpleToken]
+bar1[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken][[BeginToken]?[SimpleToken]x[StringToken]][SimpleToken];[SimpleToken]
+bar2[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] bool[StringToken] b[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken]{[BeginToken] if[KeywordToken] ([BeginToken]b[StringToken])[SimpleToken] ?[SimpleToken]x[StringToken] }[SimpleToken];[SimpleToken]
+bar3[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken]>[SimpleToken]{[BeginToken] for[KeywordToken] ([BeginToken]var[KeywordToken] _[StringToken] in[KeywordToken] [][SimpleToken])[SimpleToken] ?[SimpleToken]x[StringToken] }[SimpleToken];[SimpleToken]
+bar4[StringToken]([BeginToken]String[StringToken] x[StringToken],[SimpleToken] bool[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]String[StringToken],[SimpleToken] bool[StringToken]>[SimpleToken]{[BeginToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken]}[SimpleToken];[SimpleToken]
+bar5[StringToken]([BeginToken]int[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] num[StringToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]int[StringToken],[SimpleToken] num[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] y[StringToken]}[SimpleToken];[SimpleToken]
+bar6[StringToken]([BeginToken]double[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] Symbol[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]double[StringToken],[SimpleToken] Symbol[StringToken]>[SimpleToken]{[BeginToken]?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken]}[SimpleToken];[SimpleToken]
+bar7[StringToken]([BeginToken]num[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] double[StringToken]?[SimpleToken] y[StringToken],[SimpleToken] bool[StringToken] b[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]num[StringToken],[SimpleToken] double[StringToken]>[SimpleToken]{[BeginToken] if[KeywordToken] ([BeginToken]b[StringToken])[SimpleToken] ?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken] }[SimpleToken];[SimpleToken]
+bar8[StringToken]([BeginToken]num[StringToken]?[SimpleToken] x[StringToken],[SimpleToken] double[StringToken]?[SimpleToken] y[StringToken])[SimpleToken] =>[SimpleToken] <[BeginToken]num[StringToken],[SimpleToken] double[StringToken]>[SimpleToken]{[BeginToken] for[KeywordToken] ([BeginToken]var[KeywordToken] _[StringToken] in[KeywordToken] [][SimpleToken])[SimpleToken] ?[SimpleToken]x[StringToken]:[SimpleToken] ?[SimpleToken]y[StringToken] }[SimpleToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.expect
index 5069152..c0dbd6c 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.expect
@@ -39,7 +39,7 @@
                   endTypeArguments(2, <, >)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
               endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
index 8865451..471814e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCase.dart.intertwined.expect
@@ -102,7 +102,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(2)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.expect
index 1c09586..7017a27 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.expect
@@ -39,7 +39,7 @@
                   endTypeArguments(2, <, >)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 beginAsOperatorType(as)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
index 3db49f8..104ceea 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideCast.dart.intertwined.expect
@@ -102,7 +102,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(2)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: beginAsOperatorType(as)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.expect
index 210ac8c..84f360e 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.expect
@@ -36,7 +36,7 @@
               endTypeArguments(2, <, >)
               handleLiteralInt(1)
               handleLiteralInt(2)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endConstantPattern(const)
           endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
index e1ad065..c504325 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideIfCase.dart.intertwined.expect
@@ -94,7 +94,7 @@
                                         parsePrimary(:, expression, ConstantPatternContext.none)
                                           parseLiteralInt(:)
                                             listener: handleLiteralInt(2)
-                                  listener: handleLiteralMapEntry(:, })
+                                  listener: handleLiteralMapEntry(:, }, null, null)
                                   listener: handleLiteralSetOrMap(1, {, null, }, false)
                         listener: endConstantPattern(const)
                       listener: endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.expect
index 6271408..433fb22 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.expect
@@ -39,7 +39,7 @@
                   endTypeArguments(2, <, >)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 handleNullAssertPattern(!)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
index 1568696..82b3142 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullAssert.dart.intertwined.expect
@@ -102,7 +102,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(2)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: handleNullAssertPattern(!)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.expect
index 850ac54..94fb165 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.expect
@@ -39,7 +39,7 @@
                   endTypeArguments(2, <, >)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 handleNullCheckPattern(?)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
index 1749691..8645c4b 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_typed_insideNullCheck.dart.intertwined.expect
@@ -102,7 +102,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(2)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: handleNullCheckPattern(?)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.expect
index 1a87322..ff87c2d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.expect
@@ -32,7 +32,7 @@
                   handleNoTypeArguments({)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
               endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
index f6be17d..9a970ba 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCase.dart.intertwined.expect
@@ -94,7 +94,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralInt(:)
                                         listener: handleLiteralInt(2)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.expect
index a042c0b..9f16f79 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.expect
@@ -32,7 +32,7 @@
                   handleNoTypeArguments({)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 beginAsOperatorType(as)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
index eead9ff..73cd2c9 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideCast.dart.intertwined.expect
@@ -94,7 +94,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralInt(:)
                                         listener: handleLiteralInt(2)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: beginAsOperatorType(as)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.expect
index 6ddf3aa..34f0da0 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.expect
@@ -29,7 +29,7 @@
               handleNoTypeArguments({)
               handleLiteralInt(1)
               handleLiteralInt(2)
-              handleLiteralMapEntry(:, })
+              handleLiteralMapEntry(:, }, null, null)
               handleLiteralSetOrMap(1, {, null, }, false)
             endConstantPattern(const)
           endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
index faba811..9cc807d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideIfCase.dart.intertwined.expect
@@ -86,7 +86,7 @@
                                       parsePrimary(:, expression, ConstantPatternContext.none)
                                         parseLiteralInt(:)
                                           listener: handleLiteralInt(2)
-                                listener: handleLiteralMapEntry(:, })
+                                listener: handleLiteralMapEntry(:, }, null, null)
                                 listener: handleLiteralSetOrMap(1, {, null, }, false)
                         listener: endConstantPattern(const)
                       listener: endPattern(})
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.expect
index b67114c..afbc9d1 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.expect
@@ -32,7 +32,7 @@
                   handleNoTypeArguments({)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 handleNullAssertPattern(!)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
index ff359ae..e016a2d 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullAssert.dart.intertwined.expect
@@ -94,7 +94,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralInt(:)
                                         listener: handleLiteralInt(2)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: handleNullAssertPattern(!)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.expect
index ddb519b..1eddc22 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.expect
@@ -32,7 +32,7 @@
                   handleNoTypeArguments({)
                   handleLiteralInt(1)
                   handleLiteralInt(2)
-                  handleLiteralMapEntry(:, })
+                  handleLiteralMapEntry(:, }, null, null)
                   handleLiteralSetOrMap(1, {, null, }, false)
                 endConstantPattern(const)
                 handleNullCheckPattern(?)
diff --git a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
index 7a03d17..e43b3e1 100644
--- a/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/patterns/constant_map_untyped_insideNullCheck.dart.intertwined.expect
@@ -94,7 +94,7 @@
                                     parsePrimary(:, expression, ConstantPatternContext.none)
                                       parseLiteralInt(:)
                                         listener: handleLiteralInt(2)
-                              listener: handleLiteralMapEntry(:, })
+                              listener: handleLiteralMapEntry(:, }, null, null)
                               listener: handleLiteralSetOrMap(1, {, null, }, false)
                       listener: endConstantPattern(const)
                     listener: handleNullCheckPattern(?)
diff --git a/pkg/front_end/test/coverage_suite_expected.dart b/pkg/front_end/test/coverage_suite_expected.dart
index 681bb9c..78466ff 100644
--- a/pkg/front_end/test/coverage_suite_expected.dart
+++ b/pkg/front_end/test/coverage_suite_expected.dart
@@ -458,10 +458,10 @@
     hitCount: 0,
     missCount: 128,
   ),
-  // 92.1639300493926%.
+  // 92.06539074960128%.
   "package:front_end/src/kernel/body_builder.dart": (
-    hitCount: 6904,
-    missCount: 587,
+    hitCount: 6927,
+    missCount: 597,
   ),
   // 91.26984126984127%.
   "package:front_end/src/kernel/body_builder_context.dart": (
@@ -488,10 +488,10 @@
     hitCount: 205,
     missCount: 89,
   ),
-  // 85.85694379934975%.
+  // 85.16024152345565%.
   "package:front_end/src/kernel/constant_evaluator.dart": (
-    hitCount: 3697,
-    missCount: 609,
+    hitCount: 3667,
+    missCount: 639,
   ),
   // 97.59036144578313%.
   "package:front_end/src/kernel/constant_int_folder.dart": (
@@ -618,10 +618,10 @@
     hitCount: 43,
     missCount: 5,
   ),
-  // 0.1984126984126984%.
+  // 0.19801980198019803%.
   "package:front_end/src/kernel/macro/annotation_parser.dart": (
     hitCount: 2,
-    missCount: 1006,
+    missCount: 1008,
   ),
   // 0.0%.
   "package:front_end/src/kernel/macro/identifiers.dart": (
@@ -799,14 +799,14 @@
     hitCount: 295,
     missCount: 35,
   ),
-  // 85.1680467608378%.
+  // 85.15720204728248%.
   "package:front_end/src/source/source_library_builder.dart": (
-    hitCount: 3497,
+    hitCount: 3494,
     missCount: 609,
   ),
-  // 81.87472234562416%.
+  // 81.82628062360801%.
   "package:front_end/src/source/source_loader.dart": (
-    hitCount: 1843,
+    hitCount: 1837,
     missCount: 408,
   ),
   // 50.0%.
@@ -949,9 +949,9 @@
     hitCount: 78,
     missCount: 1312,
   ),
-  // 86.54205607476636%.
+  // 85.79439252336448%.
   "package:front_end/src/util/textual_outline.dart": (
-    hitCount: 463,
-    missCount: 72,
+    hitCount: 459,
+    missCount: 76,
   ),
 };
diff --git a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
index 84196e7..0f61019 100644
--- a/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
+++ b/pkg/front_end/test/fasta/parser/literal_entry_info_test.dart
@@ -1046,7 +1046,8 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     calls.add('handleLiteralMapEntry $colon, $endToken');
   }
 
diff --git a/pkg/front_end/test/parser_test_listener.dart b/pkg/front_end/test/parser_test_listener.dart
index 0b5c61f..0b39db8 100644
--- a/pkg/front_end/test/parser_test_listener.dart
+++ b/pkg/front_end/test/parser_test_listener.dart
@@ -1587,10 +1587,17 @@
   }
 
   @override
-  void handleLiteralMapEntry(Token colon, Token endToken) {
+  void handleLiteralMapEntry(Token colon, Token endToken,
+      {Token? nullAwareKeyToken, Token? nullAwareValueToken}) {
     seen(colon);
     seen(endToken);
-    doPrint('handleLiteralMapEntry(' '$colon, ' '$endToken)');
+    seen(nullAwareKeyToken);
+    seen(nullAwareValueToken);
+    doPrint('handleLiteralMapEntry('
+        '$colon, '
+        '$endToken, '
+        '$nullAwareKeyToken, '
+        '$nullAwareValueToken)');
   }
 
   @override
@@ -2647,6 +2654,12 @@
   }
 
   @override
+  void handleNullAwareElement(Token nullAwareToken) {
+    seen(nullAwareToken);
+    doPrint('handleNullAwareElement(' '$nullAwareToken)');
+  }
+
+  @override
   void handleRestPattern(Token dots, {required bool hasSubPattern}) {
     seen(dots);
     doPrint('handleRestPattern(' '$dots, ' '$hasSubPattern)');
diff --git a/pkg/front_end/testcases/null_aware_elements/folder.options b/pkg/front_end/testcases/null_aware_elements/folder.options
new file mode 100644
index 0000000..3e22d5c
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/folder.options
@@ -0,0 +1 @@
+--enable-experiment=null-aware-elements
\ No newline at end of file
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart
new file mode 100644
index 0000000..bfab11b
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+foo1(int? x) => <int>[?x];
+foo2(String? x) => <String>{?x};
+foo3(bool? x, num y) => <bool, num>{?x: y};
+
+bar1(int? x) => <int>[?x];
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+bar5(int? x, num y) => <int, num>{?x: y};
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.expect
new file mode 100644
index 0000000..d005c46
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.expect
@@ -0,0 +1,90 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t2 = null;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t1;
+static method foo2(core::String? x) → dynamic
+  return block {
+    final core::Set<core::String> #t3 = col::LinkedHashSet::•<core::String>();
+    final has-declared-initializer core::Iterable<core::String>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+static method foo3(core::bool? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::bool, core::num> #t5 = <core::bool, core::num>{};
+    final has-declared-initializer core::Map<core::bool, core::num>? #t6 = null;
+    if(!(#t6 == null))
+      #t5.{core::Map::addAll}{Invariant}(#t6{core::Map<core::bool, core::num>}){(core::Map<core::bool, core::num>) → void};
+  } =>#t5;
+static method bar1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t7 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t7;
+static method bar2(core::int? x, core::bool b) → dynamic
+  return block {
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    if(b) {
+      final has-declared-initializer core::Iterable<core::int>? #t10 = null;
+      if(!(#t10 == null))
+        #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t9;
+static method bar3(core::int? x) → dynamic
+  return block {
+    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Iterable<core::int>? #t12 = null;
+      if(!(#t12 == null))
+        #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t11;
+static method bar4(core::String x, core::bool? y) → dynamic
+  return block {
+    final core::Map<core::String, core::bool> #t13 = <core::String, core::bool>{};
+    final has-declared-initializer core::Map<core::String, core::bool>? #t14 = null;
+    if(!(#t14 == null))
+      #t13.{core::Map::addAll}{Invariant}(#t14{core::Map<core::String, core::bool>}){(core::Map<core::String, core::bool>) → void};
+  } =>#t13;
+static method bar5(core::int? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::int, core::num> #t15 = <core::int, core::num>{};
+    final has-declared-initializer core::Map<core::int, core::num>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Map::addAll}{Invariant}(#t16{core::Map<core::int, core::num>}){(core::Map<core::int, core::num>) → void};
+  } =>#t15;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  return block {
+    final core::Map<core::double, core::Symbol> #t17 = <core::double, core::Symbol>{};
+    final has-declared-initializer core::Map<core::double, core::Symbol>? #t18 = null;
+    if(!(#t18 == null))
+      #t17.{core::Map::addAll}{Invariant}(#t18{core::Map<core::double, core::Symbol>}){(core::Map<core::double, core::Symbol>) → void};
+  } =>#t17;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t19 = <core::num, core::double>{};
+    if(b) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t20 = null;
+      if(!(#t20 == null))
+        #t19.{core::Map::addAll}{Invariant}(#t20{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t19;
+static method bar8(core::num? x, core::double? y) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t21 = <core::num, core::double>{};
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t22 = null;
+      if(!(#t22 == null))
+        #t21.{core::Map::addAll}{Invariant}(#t22{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t21;
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.modular.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.modular.expect
new file mode 100644
index 0000000..d005c46
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.modular.expect
@@ -0,0 +1,90 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t2 = null;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t1;
+static method foo2(core::String? x) → dynamic
+  return block {
+    final core::Set<core::String> #t3 = col::LinkedHashSet::•<core::String>();
+    final has-declared-initializer core::Iterable<core::String>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+static method foo3(core::bool? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::bool, core::num> #t5 = <core::bool, core::num>{};
+    final has-declared-initializer core::Map<core::bool, core::num>? #t6 = null;
+    if(!(#t6 == null))
+      #t5.{core::Map::addAll}{Invariant}(#t6{core::Map<core::bool, core::num>}){(core::Map<core::bool, core::num>) → void};
+  } =>#t5;
+static method bar1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t7 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t7;
+static method bar2(core::int? x, core::bool b) → dynamic
+  return block {
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    if(b) {
+      final has-declared-initializer core::Iterable<core::int>? #t10 = null;
+      if(!(#t10 == null))
+        #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t9;
+static method bar3(core::int? x) → dynamic
+  return block {
+    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Iterable<core::int>? #t12 = null;
+      if(!(#t12 == null))
+        #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t11;
+static method bar4(core::String x, core::bool? y) → dynamic
+  return block {
+    final core::Map<core::String, core::bool> #t13 = <core::String, core::bool>{};
+    final has-declared-initializer core::Map<core::String, core::bool>? #t14 = null;
+    if(!(#t14 == null))
+      #t13.{core::Map::addAll}{Invariant}(#t14{core::Map<core::String, core::bool>}){(core::Map<core::String, core::bool>) → void};
+  } =>#t13;
+static method bar5(core::int? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::int, core::num> #t15 = <core::int, core::num>{};
+    final has-declared-initializer core::Map<core::int, core::num>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Map::addAll}{Invariant}(#t16{core::Map<core::int, core::num>}){(core::Map<core::int, core::num>) → void};
+  } =>#t15;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  return block {
+    final core::Map<core::double, core::Symbol> #t17 = <core::double, core::Symbol>{};
+    final has-declared-initializer core::Map<core::double, core::Symbol>? #t18 = null;
+    if(!(#t18 == null))
+      #t17.{core::Map::addAll}{Invariant}(#t18{core::Map<core::double, core::Symbol>}){(core::Map<core::double, core::Symbol>) → void};
+  } =>#t17;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t19 = <core::num, core::double>{};
+    if(b) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t20 = null;
+      if(!(#t20 == null))
+        #t19.{core::Map::addAll}{Invariant}(#t20{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t19;
+static method bar8(core::num? x, core::double? y) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t21 = <core::num, core::double>{};
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t22 = null;
+      if(!(#t22 == null))
+        #t21.{core::Map::addAll}{Invariant}(#t22{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t21;
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.outline.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.outline.expect
new file mode 100644
index 0000000..56120d6
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method foo1(core::int? x) → dynamic
+  ;
+static method foo2(core::String? x) → dynamic
+  ;
+static method foo3(core::bool? x, core::num y) → dynamic
+  ;
+static method bar1(core::int? x) → dynamic
+  ;
+static method bar2(core::int? x, core::bool b) → dynamic
+  ;
+static method bar3(core::int? x) → dynamic
+  ;
+static method bar4(core::String x, core::bool? y) → dynamic
+  ;
+static method bar5(core::int? x, core::num y) → dynamic
+  ;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  ;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  ;
+static method bar8(core::num? x, core::double? y) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.transformed.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.transformed.expect
new file mode 100644
index 0000000..be10d65
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.strong.transformed.expect
@@ -0,0 +1,102 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    final has-declared-initializer core::Iterable<core::int>? #t2 = null;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t1;
+static method foo2(core::String? x) → dynamic
+  return block {
+    final core::Set<core::String> #t3 = new col::_Set::•<core::String>();
+    final has-declared-initializer core::Iterable<core::String>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+static method foo3(core::bool? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::bool, core::num> #t5 = <core::bool, core::num>{};
+    final has-declared-initializer core::Map<core::bool, core::num>? #t6 = null;
+    if(!(#t6 == null))
+      #t5.{core::Map::addAll}{Invariant}(#t6{core::Map<core::bool, core::num>}){(core::Map<core::bool, core::num>) → void};
+  } =>#t5;
+static method bar1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t7 = core::_GrowableList::•<core::int>(0);
+    final has-declared-initializer core::Iterable<core::int>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t7;
+static method bar2(core::int? x, core::bool b) → dynamic
+  return block {
+    final core::Set<core::int> #t9 = new col::_Set::•<core::int>();
+    if(b) {
+      final has-declared-initializer core::Iterable<core::int>? #t10 = null;
+      if(!(#t10 == null))
+        #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t9;
+static method bar3(core::int? x) → dynamic
+  return block {
+    final core::Set<core::int> #t11 = new col::_Set::•<core::int>();
+    {
+      synthesized core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic _ = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final has-declared-initializer core::Iterable<core::int>? #t12 = null;
+          if(!(#t12 == null))
+            #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+        }
+      }
+    }
+  } =>#t11;
+static method bar4(core::String x, core::bool? y) → dynamic
+  return block {
+    final core::Map<core::String, core::bool> #t13 = <core::String, core::bool>{};
+    final has-declared-initializer core::Map<core::String, core::bool>? #t14 = null;
+    if(!(#t14 == null))
+      #t13.{core::Map::addAll}{Invariant}(#t14{core::Map<core::String, core::bool>}){(core::Map<core::String, core::bool>) → void};
+  } =>#t13;
+static method bar5(core::int? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::int, core::num> #t15 = <core::int, core::num>{};
+    final has-declared-initializer core::Map<core::int, core::num>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Map::addAll}{Invariant}(#t16{core::Map<core::int, core::num>}){(core::Map<core::int, core::num>) → void};
+  } =>#t15;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  return block {
+    final core::Map<core::double, core::Symbol> #t17 = <core::double, core::Symbol>{};
+    final has-declared-initializer core::Map<core::double, core::Symbol>? #t18 = null;
+    if(!(#t18 == null))
+      #t17.{core::Map::addAll}{Invariant}(#t18{core::Map<core::double, core::Symbol>}){(core::Map<core::double, core::Symbol>) → void};
+  } =>#t17;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t19 = <core::num, core::double>{};
+    if(b) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t20 = null;
+      if(!(#t20 == null))
+        #t19.{core::Map::addAll}{Invariant}(#t20{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t19;
+static method bar8(core::num? x, core::double? y) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t21 = <core::num, core::double>{};
+    {
+      synthesized core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic _ = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final has-declared-initializer core::Map<core::num, core::double>? #t22 = null;
+          if(!(#t22 == null))
+            #t21.{core::Map::addAll}{Invariant}(#t22{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+        }
+      }
+    }
+  } =>#t21;
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline.expect
new file mode 100644
index 0000000..bdd9a79
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline.expect
@@ -0,0 +1,21 @@
+foo1(int? x) => <int>[?x];
+
+foo2(String? x) => <String>{?x};
+
+foo3(bool? x, num y) => <bool, num>{?x: y};
+
+bar1(int? x) => <int>[?x];
+
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+
+bar5(int? x, num y) => <int, num>{?x: y};
+
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..59ed5df
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.textual_outline_modelled.expect
@@ -0,0 +1,21 @@
+bar1(int? x) => <int>[?x];
+
+bar2(int? x, bool b) => <int>{ if (b) ?x };
+
+bar3(int? x) => <int>{ for (var _ in []) ?x };
+
+bar4(String x, bool? y) => <String, bool>{x: ?y};
+
+bar5(int? x, num y) => <int, num>{?x: y};
+
+bar6(double? x, Symbol? y) => <double, Symbol>{?x: ?y};
+
+bar7(num? x, double? y, bool b) => <num, double>{ if (b) ?x: ?y };
+
+bar8(num? x, double? y) => <num, double>{ for (var _ in []) ?x: ?y };
+
+foo1(int? x) => <int>[?x];
+
+foo2(String? x) => <String>{?x};
+
+foo3(bool? x, num y) => <bool, num>{?x: y};
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.expect
new file mode 100644
index 0000000..96a7bfe
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.expect
@@ -0,0 +1,127 @@
+//
+// Problems in component:
+//
+// sdk/lib/core/core.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/async/async.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/collection/collection.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/convert/convert.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/developer/developer.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/ffi/ffi.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/internal/internal.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/isolate/isolate.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/math/math.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/mirrors/mirrors.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/typed_data/typed_data.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/_internal/vm/bin/vmservice_io.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/vmservice/vmservice.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/_internal/vm/bin/builtin.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/html/dartium/nativewrappers.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/io/io.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/cli/cli.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t1 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t2 = null;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t1;
+static method foo2(core::String? x) → dynamic
+  return block {
+    final core::Set<core::String> #t3 = col::LinkedHashSet::•<core::String>();
+    final has-declared-initializer core::Iterable<core::String>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+static method foo3(core::bool? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::bool, core::num> #t5 = <core::bool, core::num>{};
+    final has-declared-initializer core::Map<core::bool, core::num>? #t6 = null;
+    if(!(#t6 == null))
+      #t5.{core::Map::addAll}{Invariant}(#t6{core::Map<core::bool, core::num>}){(core::Map<core::bool, core::num>) → void};
+  } =>#t5;
+static method bar1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t7 = <core::int>[];
+    final has-declared-initializer core::Iterable<core::int>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t7;
+static method bar2(core::int? x, core::bool b) → dynamic
+  return block {
+    final core::Set<core::int> #t9 = col::LinkedHashSet::•<core::int>();
+    if(b) {
+      final has-declared-initializer core::Iterable<core::int>? #t10 = null;
+      if(!(#t10 == null))
+        #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t9;
+static method bar3(core::int? x) → dynamic
+  return block {
+    final core::Set<core::int> #t11 = col::LinkedHashSet::•<core::int>();
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Iterable<core::int>? #t12 = null;
+      if(!(#t12 == null))
+        #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t11;
+static method bar4(core::String x, core::bool? y) → dynamic
+  return block {
+    final core::Map<core::String, core::bool> #t13 = <core::String, core::bool>{};
+    final has-declared-initializer core::Map<core::String, core::bool>? #t14 = null;
+    if(!(#t14 == null))
+      #t13.{core::Map::addAll}{Invariant}(#t14{core::Map<core::String, core::bool>}){(core::Map<core::String, core::bool>) → void};
+  } =>#t13;
+static method bar5(core::int? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::int, core::num> #t15 = <core::int, core::num>{};
+    final has-declared-initializer core::Map<core::int, core::num>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Map::addAll}{Invariant}(#t16{core::Map<core::int, core::num>}){(core::Map<core::int, core::num>) → void};
+  } =>#t15;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  return block {
+    final core::Map<core::double, core::Symbol> #t17 = <core::double, core::Symbol>{};
+    final has-declared-initializer core::Map<core::double, core::Symbol>? #t18 = null;
+    if(!(#t18 == null))
+      #t17.{core::Map::addAll}{Invariant}(#t18{core::Map<core::double, core::Symbol>}){(core::Map<core::double, core::Symbol>) → void};
+  } =>#t17;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t19 = <core::num, core::double>{};
+    if(b) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t20 = null;
+      if(!(#t20 == null))
+        #t19.{core::Map::addAll}{Invariant}(#t20{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t19;
+static method bar8(core::num? x, core::double? y) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t21 = <core::num, core::double>{};
+    for (dynamic _ in <dynamic>[]) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t22 = null;
+      if(!(#t22 == null))
+        #t21.{core::Map::addAll}{Invariant}(#t22{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t21;
diff --git a/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.transformed.expect b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.transformed.expect
new file mode 100644
index 0000000..0c53463
--- /dev/null
+++ b/pkg/front_end/testcases/null_aware_elements/simple_positive.dart.weak.transformed.expect
@@ -0,0 +1,139 @@
+//
+// Problems in component:
+//
+// sdk/lib/core/core.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/async/async.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/collection/collection.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/convert/convert.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/developer/developer.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/ffi/ffi.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/internal/internal.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/isolate/isolate.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/math/math.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/mirrors/mirrors.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/typed_data/typed_data.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/_internal/vm/bin/vmservice_io.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/vmservice/vmservice.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/_internal/vm/bin/builtin.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/html/dartium/nativewrappers.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/io/io.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+// sdk/lib/cli/cli.dart: Error: Loaded library is compiled with sound null safety and cannot be used in compilation for unsound null safety.
+//
+library;
+import self as self;
+import "dart:core" as core;
+import "dart:collection" as col;
+
+static method foo1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t1 = core::_GrowableList::•<core::int>(0);
+    final has-declared-initializer core::Iterable<core::int>? #t2 = null;
+    if(!(#t2 == null))
+      #t1.{core::List::addAll}{Invariant}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t1;
+static method foo2(core::String? x) → dynamic
+  return block {
+    final core::Set<core::String> #t3 = new col::_Set::•<core::String>();
+    final has-declared-initializer core::Iterable<core::String>? #t4 = null;
+    if(!(#t4 == null))
+      #t3.{core::Set::addAll}{Invariant}(#t4{core::Iterable<core::String>}){(core::Iterable<core::String>) → void};
+  } =>#t3;
+static method foo3(core::bool? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::bool, core::num> #t5 = <core::bool, core::num>{};
+    final has-declared-initializer core::Map<core::bool, core::num>? #t6 = null;
+    if(!(#t6 == null))
+      #t5.{core::Map::addAll}{Invariant}(#t6{core::Map<core::bool, core::num>}){(core::Map<core::bool, core::num>) → void};
+  } =>#t5;
+static method bar1(core::int? x) → dynamic
+  return block {
+    final core::List<core::int> #t7 = core::_GrowableList::•<core::int>(0);
+    final has-declared-initializer core::Iterable<core::int>? #t8 = null;
+    if(!(#t8 == null))
+      #t7.{core::List::addAll}{Invariant}(#t8{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+  } =>#t7;
+static method bar2(core::int? x, core::bool b) → dynamic
+  return block {
+    final core::Set<core::int> #t9 = new col::_Set::•<core::int>();
+    if(b) {
+      final has-declared-initializer core::Iterable<core::int>? #t10 = null;
+      if(!(#t10 == null))
+        #t9.{core::Set::addAll}{Invariant}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+    }
+  } =>#t9;
+static method bar3(core::int? x) → dynamic
+  return block {
+    final core::Set<core::int> #t11 = new col::_Set::•<core::int>();
+    {
+      synthesized core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic _ = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final has-declared-initializer core::Iterable<core::int>? #t12 = null;
+          if(!(#t12 == null))
+            #t11.{core::Set::addAll}{Invariant}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
+        }
+      }
+    }
+  } =>#t11;
+static method bar4(core::String x, core::bool? y) → dynamic
+  return block {
+    final core::Map<core::String, core::bool> #t13 = <core::String, core::bool>{};
+    final has-declared-initializer core::Map<core::String, core::bool>? #t14 = null;
+    if(!(#t14 == null))
+      #t13.{core::Map::addAll}{Invariant}(#t14{core::Map<core::String, core::bool>}){(core::Map<core::String, core::bool>) → void};
+  } =>#t13;
+static method bar5(core::int? x, core::num y) → dynamic
+  return block {
+    final core::Map<core::int, core::num> #t15 = <core::int, core::num>{};
+    final has-declared-initializer core::Map<core::int, core::num>? #t16 = null;
+    if(!(#t16 == null))
+      #t15.{core::Map::addAll}{Invariant}(#t16{core::Map<core::int, core::num>}){(core::Map<core::int, core::num>) → void};
+  } =>#t15;
+static method bar6(core::double? x, core::Symbol? y) → dynamic
+  return block {
+    final core::Map<core::double, core::Symbol> #t17 = <core::double, core::Symbol>{};
+    final has-declared-initializer core::Map<core::double, core::Symbol>? #t18 = null;
+    if(!(#t18 == null))
+      #t17.{core::Map::addAll}{Invariant}(#t18{core::Map<core::double, core::Symbol>}){(core::Map<core::double, core::Symbol>) → void};
+  } =>#t17;
+static method bar7(core::num? x, core::double? y, core::bool b) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t19 = <core::num, core::double>{};
+    if(b) {
+      final has-declared-initializer core::Map<core::num, core::double>? #t20 = null;
+      if(!(#t20 == null))
+        #t19.{core::Map::addAll}{Invariant}(#t20{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+    }
+  } =>#t19;
+static method bar8(core::num? x, core::double? y) → dynamic
+  return block {
+    final core::Map<core::num, core::double> #t21 = <core::num, core::double>{};
+    {
+      synthesized core::Iterator<dynamic> :sync-for-iterator = core::_GrowableList::•<dynamic>(0).{core::Iterable::iterator}{core::Iterator<dynamic>};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+        dynamic _ = :sync-for-iterator.{core::Iterator::current}{dynamic};
+        {
+          final has-declared-initializer core::Map<core::num, core::double>? #t22 = null;
+          if(!(#t22 == null))
+            #t21.{core::Map::addAll}{Invariant}(#t22{core::Map<core::num, core::double>}){(core::Map<core::num, core::double>) → void};
+        }
+      }
+    }
+  } =>#t21;