Add visitor methods for new AST nodes

Change-Id: Ifa8ce25f4da6580acddf76502c0c84b38eed555a
Reviewed-on: https://dart-review.googlesource.com/c/90121
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 74a295b..c7ed7de 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 
+
+* Added support in the AST structure for the control_flow_collections and
+  spread_collections experiments. This includes adding new visitor methods to
+  `AstVisitor`, which will need to be implemented by any classes that implement
+  `AstVisitor` directly. Concrete implementations were added to other visitor
+  classes (such as `RecursiveAstVisitor`) so that clients that extend those
+  other classes will not be impacted.
+
 ## 0.34.2
 * Removed support for the `@checked` annotation.  Please use the `covariant`
   keyword instead (#28797).
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index fdb49c8..d053754 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -620,6 +620,10 @@
 
   R visitClassTypeAlias(ClassTypeAlias node);
 
+  R visitCollectionForElement(CollectionForElement node);
+
+  R visitCollectionIfElement(CollectionIfElement node);
+
   R visitComment(Comment node);
 
   R visitCommentReference(CommentReference node);
@@ -668,12 +672,22 @@
 
   R visitFieldFormalParameter(FieldFormalParameter node);
 
+  R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node);
+
+  R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node);
+
   R visitForEachStatement(ForEachStatement node);
 
   R visitFormalParameterList(FormalParameterList node);
 
+  R visitForPartsWithDeclarations(ForPartsWithDeclarations node);
+
+  R visitForPartsWithExpression(ForPartsWithExpression node);
+
   R visitForStatement(ForStatement node);
 
+  R visitForStatement2(ForStatement2 node);
+
   R visitFunctionDeclaration(FunctionDeclaration node);
 
   R visitFunctionDeclarationStatement(FunctionDeclarationStatement node);
@@ -720,8 +734,16 @@
 
   R visitListLiteral(ListLiteral node);
 
+  R visitListLiteral2(ListLiteral2 node);
+
+  R visitMapForElement(MapForElement node);
+
+  R visitMapIfElement(MapIfElement node);
+
   R visitMapLiteral(MapLiteral node);
 
+  R visitMapLiteral2(MapLiteral2 node);
+
   R visitMapLiteralEntry(MapLiteralEntry node);
 
   R visitMethodDeclaration(MethodDeclaration node);
@@ -765,6 +787,8 @@
 
   R visitSetLiteral(SetLiteral node);
 
+  R visitSetLiteral2(SetLiteral2 node);
+
   R visitShowCombinator(ShowCombinator node);
 
   R visitSimpleFormalParameter(SimpleFormalParameter node);
@@ -773,6 +797,8 @@
 
   R visitSimpleStringLiteral(SimpleStringLiteral node);
 
+  R visitSpreadElement(SpreadElement node);
+
   R visitStringInterpolation(StringInterpolation node);
 
   R visitSuperConstructorInvocation(SuperConstructorInvocation node);
diff --git a/pkg/analyzer/lib/dart/ast/visitor.dart b/pkg/analyzer/lib/dart/ast/visitor.dart
index 8812091..e1c77f4 100644
--- a/pkg/analyzer/lib/dart/ast/visitor.dart
+++ b/pkg/analyzer/lib/dart/ast/visitor.dart
@@ -205,11 +205,11 @@
   @override
   R visitClassTypeAlias(ClassTypeAlias node) => visitTypeAlias(node);
 
-//  @override
+  @override
   R visitCollectionForElement(CollectionForElement node) =>
       visitForElement<CollectionElement>(node);
 
-//  @override
+  @override
   R visitCollectionIfElement(CollectionIfElement node) =>
       visitIfElement<CollectionElement>(node);
 
@@ -308,11 +308,11 @@
 
   R visitForEachParts(ForEachParts node) => visitNode(node);
 
-//  @override
+  @override
   R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) =>
       visitForEachParts(node);
 
-//  @override
+  @override
   R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) =>
       visitForEachParts(node);
 
@@ -328,18 +328,18 @@
 
   R visitForParts(ForParts node) => visitNode(node);
 
-//  @override
+  @override
   R visitForPartsWithDeclarations(ForPartsWithDeclarations node) =>
       visitForParts(node);
 
-//  @override
+  @override
   R visitForPartsWithExpression(ForPartsWithExpression node) =>
       visitForParts(node);
 
   @override
   R visitForStatement(ForStatement node) => visitStatement(node);
 
-//  @override
+  @override
   R visitForStatement2(ForStatement2 node) => visitStatement(node);
 
   R visitFunctionBody(FunctionBody node) => visitNode(node);
@@ -430,21 +430,21 @@
   @override
   R visitListLiteral(ListLiteral node) => visitTypedLiteral(node);
 
-//  @override
+  @override
   R visitListLiteral2(ListLiteral2 node) => visitTypedLiteral(node);
 
   R visitLiteral(Literal node) => visitExpression(node);
 
-//  @override
+  @override
   R visitMapForElement(MapForElement node) => visitForElement<MapElement>(node);
 
-//  @override
+  @override
   R visitMapIfElement(MapIfElement node) => visitIfElement<MapElement>(node);
 
   @override
   R visitMapLiteral(MapLiteral node) => visitTypedLiteral(node);
 
-//  @override
+  @override
   R visitMapLiteral2(MapLiteral2 node) => visitTypedLiteral(node);
 
   @override
@@ -529,7 +529,7 @@
   @override
   R visitSetLiteral(SetLiteral node) => visitTypedLiteral(node);
 
-//  @override
+  @override
   R visitSetLiteral2(SetLiteral2 node) => visitTypedLiteral(node);
 
   @override
@@ -549,7 +549,7 @@
   R visitSingleStringLiteral(SingleStringLiteral node) =>
       visitStringLiteral(node);
 
-//  @override
+  @override
   R visitSpreadElement(SpreadElement node) => visitNode(node);
 
   R visitStatement(Statement node) => visitNode(node);
@@ -751,13 +751,13 @@
     return null;
   }
 
-//  @override
+  @override
   R visitCollectionForElement(CollectionForElement node) {
     node.visitChildren(this);
     return null;
   }
 
-//  @override
+  @override
   R visitCollectionIfElement(CollectionIfElement node) {
     node.visitChildren(this);
     return null;
@@ -907,13 +907,13 @@
     return null;
   }
 
-//  @override
+  @override
   R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     node.visitChildren(this);
     return null;
   }
 
-//  @override
+  @override
   R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     node.visitChildren(this);
     return null;
@@ -931,13 +931,13 @@
     return null;
   }
 
-//  @override
+  @override
   R visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     node.visitChildren(this);
     return null;
   }
 
-//  @override
+  @override
   R visitForPartsWithExpression(ForPartsWithExpression node) {
     node.visitChildren(this);
     return null;
@@ -949,7 +949,7 @@
     return null;
   }
 
-//  @override
+  @override
   R visitForStatement2(ForStatement2 node) {
     node.visitChildren(this);
     return null;
@@ -1093,19 +1093,19 @@
     return null;
   }
 
-//  @override
+  @override
   R visitListLiteral2(ListLiteral2 node) {
     node.visitChildren(this);
     return null;
   }
 
-//  @override
+  @override
   R visitMapForElement(MapForElement node) {
     node.visitChildren(this);
     return null;
   }
 
-//  @override
+  @override
   R visitMapIfElement(MapIfElement node) {
     node.visitChildren(this);
     return null;
@@ -1117,7 +1117,7 @@
     return null;
   }
 
-//  @override
+  @override
   R visitMapLiteral2(MapLiteral2 node) {
     node.visitChildren(this);
     return null;
@@ -1250,7 +1250,7 @@
     return null;
   }
 
-//  @override
+  @override
   R visitSetLiteral2(SetLiteral2 node) {
     node.visitChildren(this);
     return null;
@@ -1280,7 +1280,7 @@
     return null;
   }
 
-//  @override
+  @override
   R visitSpreadElement(SpreadElement node) {
     node.visitChildren(this);
     return null;
@@ -1473,10 +1473,10 @@
   @override
   R visitClassTypeAlias(ClassTypeAlias node) => null;
 
-//  @override
+  @override
   R visitCollectionForElement(CollectionForElement node) => null;
 
-//  @override
+  @override
   R visitCollectionIfElement(CollectionIfElement node) => null;
 
   @override
@@ -1551,10 +1551,10 @@
   @override
   R visitFieldFormalParameter(FieldFormalParameter node) => null;
 
-//  @override
+  @override
   R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) => null;
 
-//  @override
+  @override
   R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) => null;
 
   @override
@@ -1563,16 +1563,16 @@
   @override
   R visitFormalParameterList(FormalParameterList node) => null;
 
-//  @override
+  @override
   R visitForPartsWithDeclarations(ForPartsWithDeclarations node) => null;
 
-//  @override
+  @override
   R visitForPartsWithExpression(ForPartsWithExpression node) => null;
 
   @override
   R visitForStatement(ForStatement node) => null;
 
-//  @override
+  @override
   R visitForStatement2(ForStatement2 node) => null;
 
   @override
@@ -1647,19 +1647,19 @@
   @override
   R visitListLiteral(ListLiteral node) => null;
 
-//  @override
+  @override
   R visitListLiteral2(ListLiteral2 node) => null;
 
-//  @override
+  @override
   R visitMapForElement(MapForElement node) => null;
 
-//  @override
+  @override
   R visitMapIfElement(MapIfElement node) => null;
 
   @override
   R visitMapLiteral(MapLiteral node) => null;
 
-//  @override
+  @override
   R visitMapLiteral2(MapLiteral2 node) => null;
 
   @override
@@ -1727,7 +1727,7 @@
   @override
   R visitSetLiteral(SetLiteral node) => null;
 
-//  @override
+  @override
   R visitSetLiteral2(SetLiteral2 node) => null;
 
   @override
@@ -1742,7 +1742,7 @@
   @override
   R visitSimpleStringLiteral(SimpleStringLiteral node) => null;
 
-//  @override
+  @override
   R visitSpreadElement(SpreadElement node) => null;
 
   @override
@@ -1871,10 +1871,10 @@
   @override
   R visitClassTypeAlias(ClassTypeAlias node) => _throw(node);
 
-//  @override
+  @override
   R visitCollectionForElement(CollectionForElement node) => _throw(node);
 
-//  @override
+  @override
   R visitCollectionIfElement(CollectionIfElement node) => _throw(node);
 
   @override
@@ -1950,11 +1950,11 @@
   @override
   R visitFieldFormalParameter(FieldFormalParameter node) => _throw(node);
 
-//  @override
+  @override
   R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) =>
       _throw(node);
 
-//  @override
+  @override
   R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) =>
       _throw(node);
 
@@ -1964,17 +1964,17 @@
   @override
   R visitFormalParameterList(FormalParameterList node) => _throw(node);
 
-//  @override
+  @override
   R visitForPartsWithDeclarations(ForPartsWithDeclarations node) =>
       _throw(node);
 
-//  @override
+  @override
   R visitForPartsWithExpression(ForPartsWithExpression node) => _throw(node);
 
   @override
   R visitForStatement(ForStatement node) => _throw(node);
 
-//  @override
+  @override
   R visitForStatement2(ForStatement2 node) => _throw(node);
 
   @override
@@ -2050,19 +2050,19 @@
   @override
   R visitListLiteral(ListLiteral node) => _throw(node);
 
-//  @override
+  @override
   R visitListLiteral2(ListLiteral2 node) => _throw(node);
 
-//  @override
+  @override
   R visitMapForElement(MapForElement node) => _throw(node);
 
-//  @override
+  @override
   R visitMapIfElement(MapIfElement node) => _throw(node);
 
   @override
   R visitMapLiteral(MapLiteral node) => _throw(node);
 
-//  @override
+  @override
   R visitMapLiteral2(MapLiteral2 node) => _throw(node);
 
   @override
@@ -2130,7 +2130,7 @@
   @override
   R visitSetLiteral(SetLiteral node) => _throw(node);
 
-//  @override
+  @override
   R visitSetLiteral2(SetLiteral2 node) => _throw(node);
 
   @override
@@ -2145,7 +2145,7 @@
   @override
   R visitSimpleStringLiteral(SimpleStringLiteral node) => _throw(node);
 
-//  @override
+  @override
   R visitSpreadElement(SpreadElement node) => _throw(node);
 
   @override
@@ -2378,6 +2378,22 @@
   }
 
   @override
+  T visitCollectionForElement(CollectionForElement node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitCollectionForElement(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitCollectionIfElement(CollectionIfElement node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitCollectionIfElement(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitComment(Comment node) {
     stopwatch.start();
     T result = _baseVisitor.visitComment(node);
@@ -2570,6 +2586,22 @@
   }
 
   @override
+  T visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitForEachPartsWithDeclaration(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitForEachPartsWithIdentifier(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitForEachStatement(ForEachStatement node) {
     stopwatch.start();
     T result = _baseVisitor.visitForEachStatement(node);
@@ -2586,6 +2618,22 @@
   }
 
   @override
+  T visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitForPartsWithDeclarations(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitForPartsWithExpression(ForPartsWithExpression node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitForPartsWithExpression(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitForStatement(ForStatement node) {
     stopwatch.start();
     T result = _baseVisitor.visitForStatement(node);
@@ -2594,6 +2642,14 @@
   }
 
   @override
+  T visitForStatement2(ForStatement2 node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitForStatement2(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitFunctionDeclaration(FunctionDeclaration node) {
     stopwatch.start();
     T result = _baseVisitor.visitFunctionDeclaration(node);
@@ -2778,6 +2834,30 @@
   }
 
   @override
+  T visitListLiteral2(ListLiteral2 node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitListLiteral2(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitMapForElement(MapForElement node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitMapForElement(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
+  T visitMapIfElement(MapIfElement node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitMapIfElement(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitMapLiteral(MapLiteral node) {
     stopwatch.start();
     T result = _baseVisitor.visitMapLiteral(node);
@@ -2786,6 +2866,14 @@
   }
 
   @override
+  T visitMapLiteral2(MapLiteral2 node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitMapLiteral2(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitMapLiteralEntry(MapLiteralEntry node) {
     stopwatch.start();
     T result = _baseVisitor.visitMapLiteralEntry(node);
@@ -2955,6 +3043,14 @@
   }
 
   @override
+  T visitSetLiteral2(SetLiteral2 node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitSetLiteral2(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitShowCombinator(ShowCombinator node) {
     stopwatch.start();
     T result = _baseVisitor.visitShowCombinator(node);
@@ -2987,6 +3083,14 @@
   }
 
   @override
+  T visitSpreadElement(SpreadElement node) {
+    stopwatch.start();
+    T result = _baseVisitor.visitSpreadElement(node);
+    stopwatch.stop();
+    return result;
+  }
+
+  @override
   T visitStringInterpolation(StringInterpolation node) {
     stopwatch.start();
     T result = _baseVisitor.visitStringInterpolation(node);
@@ -3219,10 +3323,10 @@
   @override
   R visitClassTypeAlias(ClassTypeAlias node) => visitNode(node);
 
-//  @override
+  @override
   R visitCollectionForElement(CollectionForElement node) => visitNode(node);
 
-//  @override
+  @override
   R visitCollectionIfElement(CollectionIfElement node) => visitNode(node);
 
   @override
@@ -3299,11 +3403,11 @@
   @override
   R visitFieldFormalParameter(FieldFormalParameter node) => visitNode(node);
 
-//  @override
+  @override
   R visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) =>
       visitNode(node);
 
-//  @override
+  @override
   R visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) =>
       visitNode(node);
 
@@ -3313,17 +3417,17 @@
   @override
   R visitFormalParameterList(FormalParameterList node) => visitNode(node);
 
-//  @override
+  @override
   R visitForPartsWithDeclarations(ForPartsWithDeclarations node) =>
       visitNode(node);
 
-//  @override
+  @override
   R visitForPartsWithExpression(ForPartsWithExpression node) => visitNode(node);
 
   @override
   R visitForStatement(ForStatement node) => visitNode(node);
 
-//  @override
+  @override
   R visitForStatement2(ForStatement2 node) => visitNode(node);
 
   @override
@@ -3400,19 +3504,19 @@
   @override
   R visitListLiteral(ListLiteral node) => visitNode(node);
 
-//  @override
+  @override
   R visitListLiteral2(ListLiteral2 node) => visitNode(node);
 
-//  @override
+  @override
   R visitMapForElement(MapForElement node) => visitNode(node);
 
-//  @override
+  @override
   R visitMapIfElement(MapIfElement node) => visitNode(node);
 
   @override
   R visitMapLiteral(MapLiteral node) => visitNode(node);
 
-//  @override
+  @override
   R visitMapLiteral2(MapLiteral2 node) => visitNode(node);
 
   @override
@@ -3486,7 +3590,7 @@
   @override
   R visitSetLiteral(SetLiteral node) => visitNode(node);
 
-//  @override
+  @override
   R visitSetLiteral2(SetLiteral2 node) => visitNode(node);
 
   @override
@@ -3501,7 +3605,7 @@
   @override
   R visitSimpleStringLiteral(SimpleStringLiteral node) => visitNode(node);
 
-//  @override
+  @override
   R visitSpreadElement(SpreadElement node) => visitNode(node);
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 75fcb2e..3528de3 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -2101,8 +2101,7 @@
   Token get endToken => _body.endToken;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitCollectionForElement(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitCollectionForElement(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -2169,8 +2168,7 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitCollectionIfElement(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitCollectionIfElement(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -4749,9 +4747,8 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) =>
-//      visitor.visitForEachPartsWithDeclaration(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitForEachPartsWithDeclaration(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -4793,9 +4790,8 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) =>
-//      visitor.visitForEachPartsWithIdentifier(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitForEachPartsWithIdentifier(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -5260,9 +5256,8 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) =>
-//      visitor.visitForPartsWithDeclarations(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitForPartsWithDeclarations(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -5307,9 +5302,8 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) =>
-//      visitor.visitForPartsWithExpression(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) =>
+      visitor.visitForPartsWithExpression(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -5360,8 +5354,7 @@
   Token get endToken => _body.endToken;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitForStatement2(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitForStatement2(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -7868,8 +7861,7 @@
   Token get endToken => rightBracket;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitListLiteral2(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitListLiteral2(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -8034,8 +8026,7 @@
   Token get endToken => _body.endToken;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapForElement(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapForElement(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -8102,8 +8093,7 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapIfElement(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapIfElement(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -8173,8 +8163,7 @@
   NodeList<MapElement> get entries => _entries;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapLiteral2(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitMapLiteral2(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10365,8 +10354,7 @@
   Token get endToken => rightBracket;
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) => visitor.visitSetLiteral2(this);
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) => visitor.visitSetLiteral2(this);
 
   @override
   void visitChildren(AstVisitor visitor) {
@@ -10904,10 +10892,9 @@
   }
 
   @override
-//  E accept<E>(AstVisitor<E> visitor) {
-//    return visitor.visitSpreadElement(this);
-//  }
-  E accept<E>(AstVisitor<E> visitor) => throw new UnsupportedError('');
+  E accept<E>(AstVisitor<E> visitor) {
+    return visitor.visitSpreadElement(this);
+  }
 
   @override
   void visitChildren(AstVisitor visitor) {
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 1334a20..5d53fc0 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -247,7 +247,7 @@
         cloneToken(node.semicolon));
   }
 
-//  @override
+  @override
   CollectionForElement visitCollectionForElement(CollectionForElement node) =>
       astFactory.collectionForElement(
           forKeyword: cloneToken(node.forKeyword),
@@ -256,7 +256,7 @@
           rightParenthesis: cloneToken(node.rightParenthesis),
           body: cloneNode(node.body));
 
-//  @override
+  @override
   CollectionIfElement visitCollectionIfElement(CollectionIfElement node) =>
       astFactory.collectionIfElement(
           ifKeyword: cloneToken(node.ifKeyword),
@@ -489,7 +489,7 @@
           typeParameters: cloneNode(node.typeParameters),
           parameters: cloneNode(node.parameters));
 
-//  @override
+  @override
   ForEachPartsWithDeclaration visitForEachPartsWithDeclaration(
           ForEachPartsWithDeclaration node) =>
       astFactory.forEachPartsWithDeclaration(
@@ -497,7 +497,7 @@
           inKeyword: cloneToken(node.inKeyword),
           iterable: cloneNode(node.iterable));
 
-//  @override
+  @override
   ForEachPartsWithIdentifier visitForEachPartsWithIdentifier(
           ForEachPartsWithIdentifier node) =>
       astFactory.forEachPartsWithIdentifier(
@@ -539,7 +539,7 @@
           cloneToken(node.rightDelimiter),
           cloneToken(node.rightParenthesis));
 
-//  @override
+  @override
   ForPartsWithDeclarations visitForPartsWithDeclarations(
           ForPartsWithDeclarations node) =>
       astFactory.forPartsWithDeclarations(
@@ -549,7 +549,7 @@
           rightSeparator: cloneToken(node.rightSeparator),
           updaters: cloneNodeList(node.updaters));
 
-//  @override
+  @override
   ForPartsWithExpression visitForPartsWithExpression(
           ForPartsWithExpression node) =>
       astFactory.forPartsWithExpression(
@@ -572,7 +572,7 @@
       cloneToken(node.rightParenthesis),
       cloneNode(node.body));
 
-//  @override
+  @override
   ForStatement2 visitForStatement2(ForStatement2 node) =>
       astFactory.forStatement2(
           forKeyword: cloneToken(node.forKeyword),
@@ -768,7 +768,7 @@
       cloneNodeList(node.elements),
       cloneToken(node.rightBracket));
 
-//  @override
+  @override
   ListLiteral2 visitListLiteral2(ListLiteral2 node) => astFactory.listLiteral2(
       constKeyword: cloneToken(node.constKeyword),
       typeArguments: cloneNode(node.typeArguments),
@@ -776,7 +776,7 @@
       elements: cloneNodeList(node.elements),
       rightBracket: cloneToken(node.rightBracket));
 
-//  @override
+  @override
   MapForElement visitMapForElement(MapForElement node) =>
       astFactory.mapForElement(
           forKeyword: cloneToken(node.forKeyword),
@@ -785,7 +785,7 @@
           rightParenthesis: cloneToken(node.rightParenthesis),
           body: cloneNode(node.body));
 
-//  @override
+  @override
   MapIfElement visitMapIfElement(MapIfElement node) => astFactory.mapIfElement(
       ifKeyword: cloneToken(node.ifKeyword),
       leftParenthesis: cloneToken(node.leftParenthesis),
@@ -803,7 +803,7 @@
       cloneNodeList(node.entries),
       cloneToken(node.rightBracket));
 
-//  @override
+  @override
   MapLiteral2 visitMapLiteral2(MapLiteral2 node) => astFactory.mapLiteral2(
       constKeyword: cloneToken(node.constKeyword),
       typeArguments: cloneNode(node.typeArguments),
@@ -953,7 +953,7 @@
       cloneNodeList(node.elements),
       cloneToken(node.rightBracket));
 
-//  @override
+  @override
   SetLiteral2 visitSetLiteral2(SetLiteral2 node) => astFactory.setLiteral2(
       constKeyword: cloneToken(node.constKeyword),
       typeArguments: cloneNode(node.typeArguments),
@@ -985,7 +985,7 @@
   SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) =>
       astFactory.simpleStringLiteral(cloneToken(node.literal), node.value);
 
-//  @override
+  @override
   SpreadElement visitSpreadElement(SpreadElement node) =>
       astFactory.spreadElement(
           spreadOperator: cloneToken(node.spreadOperator),
@@ -1448,7 +1448,7 @@
         isEqualTokens(node.semicolon, other.semicolon);
   }
 
-//  @override
+  @override
   bool visitCollectionForElement(CollectionForElement node) {
     CollectionForElement other = _other as CollectionForElement;
     return isEqualTokens(node.forKeyword, other.forKeyword) &&
@@ -1458,7 +1458,7 @@
         isEqualNodes(node.body, other.body);
   }
 
-//  @override
+  @override
   bool visitCollectionIfElement(CollectionIfElement node) {
     CollectionIfElement other = _other as CollectionIfElement;
     return isEqualTokens(node.ifKeyword, other.ifKeyword) &&
@@ -1698,7 +1698,7 @@
         isEqualNodes(node.identifier, other.identifier);
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     ForEachPartsWithDeclaration other = _other as ForEachPartsWithDeclaration;
     return isEqualNodes(node.loopVariable, other.loopVariable) &&
@@ -1706,7 +1706,7 @@
         isEqualNodes(node.iterable, other.iterable);
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     ForEachPartsWithIdentifier other = _other as ForEachPartsWithIdentifier;
     return isEqualNodes(node.identifier, other.identifier) &&
@@ -1736,7 +1736,7 @@
         isEqualTokens(node.rightParenthesis, other.rightParenthesis);
   }
 
-//  @override
+  @override
   bool visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     ForPartsWithDeclarations other = _other as ForPartsWithDeclarations;
     return isEqualNodes(node.variables, other.variables) &&
@@ -1746,7 +1746,7 @@
         _isEqualNodeLists(node.updaters, other.updaters);
   }
 
-//  @override
+  @override
   bool visitForPartsWithExpression(ForPartsWithExpression node) {
     ForPartsWithExpression other = _other as ForPartsWithExpression;
     return isEqualNodes(node.initialization, other.initialization) &&
@@ -1771,7 +1771,7 @@
         isEqualNodes(node.body, other.body);
   }
 
-//  @override
+  @override
   bool visitForStatement2(ForStatement2 node) {
     ForStatement2 other = _other as ForStatement2;
     return isEqualTokens(node.forKeyword, other.forKeyword) &&
@@ -1993,7 +1993,7 @@
         isEqualTokens(node.rightBracket, other.rightBracket);
   }
 
-//  @override
+  @override
   bool visitListLiteral2(ListLiteral2 node) {
     ListLiteral2 other = _other as ListLiteral2;
     return isEqualTokens(node.constKeyword, other.constKeyword) &&
@@ -2003,7 +2003,7 @@
         isEqualTokens(node.rightBracket, other.rightBracket);
   }
 
-//  @override
+  @override
   bool visitMapForElement(MapForElement node) {
     MapForElement other = _other as MapForElement;
     return isEqualTokens(node.forKeyword, other.forKeyword) &&
@@ -2013,7 +2013,7 @@
         isEqualNodes(node.body, other.body);
   }
 
-//  @override
+  @override
   bool visitMapIfElement(MapIfElement node) {
     MapIfElement other = _other as MapIfElement;
     return isEqualTokens(node.ifKeyword, other.ifKeyword) &&
@@ -2035,7 +2035,7 @@
         isEqualTokens(node.rightBracket, other.rightBracket);
   }
 
-//  @override
+  @override
   bool visitMapLiteral2(MapLiteral2 node) {
     MapLiteral2 other = _other as MapLiteral2;
     return isEqualTokens(node.constKeyword, other.constKeyword) &&
@@ -2232,7 +2232,7 @@
         isEqualTokens(node.rightBracket, other.rightBracket);
   }
 
-//  @override
+  @override
   bool visitSetLiteral2(SetLiteral2 node) {
     SetLiteral2 other = _other as SetLiteral2;
     return isEqualTokens(node.constKeyword, other.constKeyword) &&
@@ -2273,7 +2273,7 @@
         failIfNotEqual(node, node.value, other, other.value);
   }
 
-//  @override
+  @override
   bool visitSpreadElement(SpreadElement node) {
     SpreadElement other = _other as SpreadElement;
     return isEqualTokens(node.spreadOperator, other.spreadOperator) &&
@@ -3298,7 +3298,7 @@
           _cloneNode(node.implementsClause),
           _mapToken(node.semicolon));
 
-//  @override
+  @override
   CollectionForElement visitCollectionForElement(CollectionForElement node) =>
       astFactory.collectionForElement(
           forKeyword: _mapToken(node.forKeyword),
@@ -3307,7 +3307,7 @@
           rightParenthesis: _mapToken(node.rightParenthesis),
           body: _cloneNode(node.body));
 
-//  @override
+  @override
   CollectionIfElement visitCollectionIfElement(CollectionIfElement node) =>
       astFactory.collectionIfElement(
           ifKeyword: _mapToken(node.ifKeyword),
@@ -3532,7 +3532,7 @@
           typeParameters: _cloneNode(node.typeParameters),
           parameters: _cloneNode(node.parameters));
 
-//  @override
+  @override
   ForEachPartsWithDeclaration visitForEachPartsWithDeclaration(
           ForEachPartsWithDeclaration node) =>
       astFactory.forEachPartsWithDeclaration(
@@ -3540,7 +3540,7 @@
           inKeyword: _mapToken(node.inKeyword),
           iterable: _cloneNode(node.iterable));
 
-//  @override
+  @override
   ForEachPartsWithIdentifier visitForEachPartsWithIdentifier(
           ForEachPartsWithIdentifier node) =>
       astFactory.forEachPartsWithIdentifier(
@@ -3582,7 +3582,7 @@
           _mapToken(node.rightDelimiter),
           _mapToken(node.rightParenthesis));
 
-//  @override
+  @override
   ForPartsWithDeclarations visitForPartsWithDeclarations(
           ForPartsWithDeclarations node) =>
       astFactory.forPartsWithDeclarations(
@@ -3592,7 +3592,7 @@
           rightSeparator: _mapToken(node.rightSeparator),
           updaters: _cloneNodeList(node.updaters));
 
-//  @override
+  @override
   ForPartsWithExpression visitForPartsWithExpression(
           ForPartsWithExpression node) =>
       astFactory.forPartsWithExpression(
@@ -3615,7 +3615,7 @@
       _mapToken(node.rightParenthesis),
       _cloneNode(node.body));
 
-//  @override
+  @override
   ForStatement2 visitForStatement2(ForStatement2 node) =>
       astFactory.forStatement2(
           forKeyword: _mapToken(node.forKeyword),
@@ -3851,7 +3851,7 @@
     return copy;
   }
 
-//  @override
+  @override
   ListLiteral2 visitListLiteral2(ListLiteral2 node) => astFactory.listLiteral2(
       constKeyword: _mapToken(node.constKeyword),
       typeArguments: _cloneNode(node.typeArguments),
@@ -3859,7 +3859,7 @@
       elements: _cloneNodeList(node.elements),
       rightBracket: _mapToken(node.rightBracket));
 
-//  @override
+  @override
   MapForElement visitMapForElement(MapForElement node) =>
       astFactory.mapForElement(
           forKeyword: _mapToken(node.forKeyword),
@@ -3868,7 +3868,7 @@
           rightParenthesis: _mapToken(node.rightParenthesis),
           body: _cloneNode(node.body));
 
-//  @override
+  @override
   MapIfElement visitMapIfElement(MapIfElement node) => astFactory.mapIfElement(
       ifKeyword: _mapToken(node.ifKeyword),
       leftParenthesis: _mapToken(node.leftParenthesis),
@@ -3890,7 +3890,7 @@
     return copy;
   }
 
-//  @override
+  @override
   MapLiteral2 visitMapLiteral2(MapLiteral2 node) => astFactory.mapLiteral2(
       constKeyword: _mapToken(node.constKeyword),
       typeArguments: _cloneNode(node.typeArguments),
@@ -4087,7 +4087,7 @@
     return copy;
   }
 
-//  @override
+  @override
   SetLiteral2 visitSetLiteral2(SetLiteral2 node) => astFactory.setLiteral2(
       constKeyword: _mapToken(node.constKeyword),
       typeArguments: _cloneNode(node.typeArguments),
@@ -4137,7 +4137,7 @@
     return copy;
   }
 
-//  @override
+  @override
   SpreadElement visitSpreadElement(SpreadElement node) =>
       astFactory.spreadElement(
           spreadOperator: _mapToken(node.spreadOperator),
@@ -4776,7 +4776,7 @@
     return visitAnnotatedNode(node);
   }
 
-//  @override
+  @override
   bool visitCollectionForElement(CollectionForElement node) {
     if (identical(node.forLoopParts, _oldNode)) {
       (node as CollectionForElementImpl).forLoopParts =
@@ -4789,7 +4789,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitCollectionIfElement(CollectionIfElement node) {
     if (identical(node.condition, _oldNode)) {
       (node as CollectionIfElementImpl).condition = _newNode as Expression;
@@ -5047,7 +5047,7 @@
     return visitNormalFormalParameter(node);
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     if (identical(node.loopVariable, _oldNode)) {
       (node as ForEachPartsWithDeclarationImpl).loopVariable =
@@ -5061,7 +5061,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     if (identical(node.identifier, _oldNode)) {
       (node as ForEachPartsWithIdentifierImpl).identifier =
@@ -5101,7 +5101,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     if (identical(node.variables, _oldNode)) {
       (node as ForPartsWithDeclarationsImpl).variables =
@@ -5116,7 +5116,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitForPartsWithExpression(ForPartsWithExpression node) {
     if (identical(node.initialization, _oldNode)) {
       (node as ForPartsWithExpressionImpl).initialization =
@@ -5151,7 +5151,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitForStatement2(ForStatement2 node) {
     if (identical(node.forLoopParts, _oldNode)) {
       (node as ForStatement2Impl).forLoopParts = _newNode as ForLoopParts;
@@ -5409,7 +5409,7 @@
     return visitTypedLiteral(node);
   }
 
-//  @override
+  @override
   bool visitListLiteral2(ListLiteral2 node) {
     if (identical(node.typeArguments, _oldNode)) {
       (node as ListLiteral2Impl).typeArguments = _newNode as TypeArgumentList;
@@ -5420,7 +5420,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitMapForElement(MapForElement node) {
     if (identical(node.forLoopParts, _oldNode)) {
       (node as MapForElementImpl).forLoopParts = _newNode as ForLoopParts;
@@ -5432,7 +5432,7 @@
     return visitNode(node);
   }
 
-//  @override
+  @override
   bool visitMapIfElement(MapIfElement node) {
     if (identical(node.condition, _oldNode)) {
       (node as MapIfElementImpl).condition = _newNode as Expression;
@@ -5455,7 +5455,7 @@
     return visitTypedLiteral(node);
   }
 
-//  @override
+  @override
   bool visitMapLiteral2(MapLiteral2 node) {
     if (identical(node.typeArguments, _oldNode)) {
       (node as MapLiteral2Impl).typeArguments = _newNode as TypeArgumentList;
@@ -5702,7 +5702,7 @@
     return visitTypedLiteral(node);
   }
 
-//  @override
+  @override
   bool visitSetLiteral2(SetLiteral2 node) {
     if (identical(node.typeArguments, _oldNode)) {
       (node as SetLiteral2Impl).typeArguments = _newNode as TypeArgumentList;
@@ -5736,7 +5736,7 @@
   @override
   bool visitSimpleStringLiteral(SimpleStringLiteral node) => visitNode(node);
 
-//  @override
+  @override
   bool visitSpreadElement(SpreadElement node) {
     if (identical(node.expression, _oldNode)) {
       (node as SpreadElementImpl).expression = _newNode as Expression;
@@ -6212,7 +6212,7 @@
         _isEqualTokens(node.semicolon, toNode.semicolon));
   }
 
-//  @override
+  @override
   bool visitCollectionForElement(CollectionForElement node) {
     CollectionForElement toNode = this._toNode as CollectionForElement;
     return _and(
@@ -6223,7 +6223,7 @@
         _isEqualNodes(node.body, toNode.body));
   }
 
-//  @override
+  @override
   bool visitCollectionIfElement(CollectionIfElement node) {
     CollectionIfElement toNode = this._toNode as CollectionIfElement;
     return _and(
@@ -6505,7 +6505,7 @@
         _isEqualNodes(node.identifier, toNode.identifier));
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     ForEachPartsWithDeclaration toNode =
         this._toNode as ForEachPartsWithDeclaration;
@@ -6515,7 +6515,7 @@
         _isEqualNodes(node.iterable, toNode.iterable));
   }
 
-//  @override
+  @override
   bool visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     ForEachPartsWithIdentifier toNode =
         this._toNode as ForEachPartsWithIdentifier;
@@ -6525,7 +6525,7 @@
         _isEqualNodes(node.iterable, toNode.iterable));
   }
 
-//  @override
+  @override
   bool visitForEachStatement(ForEachStatement node) {
     ForEachStatement toNode = this._toNode as ForEachStatement;
     return _and(
@@ -6550,7 +6550,7 @@
         _isEqualTokens(node.rightParenthesis, toNode.rightParenthesis));
   }
 
-//  @override
+  @override
   bool visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     ForPartsWithDeclarations toNode = this._toNode as ForPartsWithDeclarations;
     return _and(
@@ -6561,7 +6561,7 @@
         _isEqualNodeLists(node.updaters, toNode.updaters));
   }
 
-//  @override
+  @override
   bool visitForPartsWithExpression(ForPartsWithExpression node) {
     ForPartsWithExpression toNode = this._toNode as ForPartsWithExpression;
     return _and(
@@ -6588,7 +6588,7 @@
         _isEqualNodes(node.body, toNode.body));
   }
 
-//  @override
+  @override
   bool visitForStatement2(ForStatement2 node) {
     ForStatement2 toNode = this._toNode as ForStatement2;
     return _and(
@@ -6877,7 +6877,7 @@
     return false;
   }
 
-//  @override
+  @override
   bool visitListLiteral2(ListLiteral2 node) {
     ListLiteral2 toNode = this._toNode as ListLiteral2;
     if (_and(
@@ -6892,7 +6892,7 @@
     return false;
   }
 
-//  @override
+  @override
   bool visitMapForElement(MapForElement node) {
     MapForElement toNode = this._toNode as MapForElement;
     return _and(
@@ -6903,7 +6903,7 @@
         _isEqualNodes(node.body, toNode.body));
   }
 
-//  @override
+  @override
   bool visitMapIfElement(MapIfElement node) {
     MapIfElement toNode = this._toNode as MapIfElement;
     return _and(
@@ -6931,7 +6931,7 @@
     return false;
   }
 
-//  @override
+  @override
   bool visitMapLiteral2(MapLiteral2 node) {
     MapLiteral2 toNode = this._toNode as MapLiteral2;
     if (_and(
@@ -7199,7 +7199,7 @@
     return false;
   }
 
-//  @override
+  @override
   bool visitSetLiteral2(SetLiteral2 node) {
     SetLiteral2 toNode = this._toNode as SetLiteral2;
     if (_and(
@@ -7260,7 +7260,7 @@
     return false;
   }
 
-//  @override
+  @override
   bool visitSpreadElement(SpreadElement node) {
     SpreadElement toNode = this._toNode as SpreadElement;
     return _and(_isEqualTokens(node.spreadOperator, toNode.spreadOperator),
@@ -7981,7 +7981,7 @@
     _writer.print(";");
   }
 
-//  @override
+  @override
   void visitCollectionForElement(CollectionForElement node) {
     _writer.print('for (');
     _visitNode(node.forLoopParts);
@@ -7989,7 +7989,7 @@
     _visitNode(node.body);
   }
 
-//  @override
+  @override
   void visitCollectionIfElement(CollectionIfElement node) {
     _writer.print('if (');
     _visitNode(node.condition);
@@ -8188,14 +8188,14 @@
     _visitNode(node.parameters);
   }
 
-//  @override
+  @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     _visitNode(node.loopVariable);
     _writer.print(' in ');
     _visitNode(node.iterable);
   }
 
-//  @override
+  @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     _visitNode(node.identifier);
     _writer.print(' in ');
@@ -8248,7 +8248,7 @@
     _writer.print(')');
   }
 
-//  @override
+  @override
   void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     _visitNode(node.variables);
     _writer.print(';');
@@ -8257,7 +8257,7 @@
     _visitNodeListWithSeparatorAndPrefix(' ', node.updaters, ', ');
   }
 
-//  @override
+  @override
   void visitForPartsWithExpression(ForPartsWithExpression node) {
     _visitNode(node.initialization);
     _writer.print(';');
@@ -8283,7 +8283,7 @@
     _visitNode(node.body);
   }
 
-//  @override
+  @override
   void visitForStatement2(ForStatement2 node) {
     _writer.print('for (');
     _visitNode(node.forLoopParts);
@@ -8488,7 +8488,7 @@
     _writer.print("]");
   }
 
-//  @override
+  @override
   void visitListLiteral2(ListLiteral2 node) {
     _visitTokenWithSuffix(node.constKeyword, ' ');
     _visitNode(node.typeArguments);
@@ -8497,7 +8497,7 @@
     _writer.print(']');
   }
 
-//  @override
+  @override
   void visitMapForElement(MapForElement node) {
     _writer.print('for (');
     _visitNode(node.forLoopParts);
@@ -8505,7 +8505,7 @@
     _visitNode(node.body);
   }
 
-//  @override
+  @override
   void visitMapIfElement(MapIfElement node) {
     _writer.print('if (');
     _visitNode(node.condition);
@@ -8526,7 +8526,7 @@
     _writer.print("}");
   }
 
-//  @override
+  @override
   void visitMapLiteral2(MapLiteral2 node) {
     _visitTokenWithSuffix(node.constKeyword, ' ');
     _visitNode(node.typeArguments);
@@ -8711,7 +8711,7 @@
     _writer.print("}");
   }
 
-//  @override
+  @override
   void visitSetLiteral2(SetLiteral2 node) {
     _visitTokenWithSuffix(node.constKeyword, ' ');
     _visitNode(node.typeArguments);
@@ -8748,7 +8748,7 @@
     _writer.print(node.literal.lexeme);
   }
 
-//  @override
+  @override
   void visitSpreadElement(SpreadElement node) {
     _writer.print(node.spreadOperator.lexeme);
     _visitNode(node.expression);
@@ -9325,7 +9325,7 @@
     sink.write(";");
   }
 
-//  @override
+  @override
   void visitCollectionForElement(CollectionForElement node) {
     sink.write('for (');
     safelyVisitNode(node.forLoopParts);
@@ -9333,7 +9333,7 @@
     safelyVisitNode(node.body);
   }
 
-//  @override
+  @override
   void visitCollectionIfElement(CollectionIfElement node) {
     sink.write('if (');
     safelyVisitNode(node.condition);
@@ -9532,14 +9532,14 @@
     safelyVisitNode(node.parameters);
   }
 
-//  @override
+  @override
   void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
     safelyVisitNode(node.loopVariable);
     sink.write(' in ');
     safelyVisitNode(node.iterable);
   }
 
-//  @override
+  @override
   void visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) {
     safelyVisitNode(node.identifier);
     sink.write(' in ');
@@ -9592,7 +9592,7 @@
     sink.write(')');
   }
 
-//  @override
+  @override
   void visitForPartsWithDeclarations(ForPartsWithDeclarations node) {
     safelyVisitNode(node.variables);
     sink.write(';');
@@ -9601,7 +9601,7 @@
     safelyVisitNodeListWithSeparatorAndPrefix(' ', node.updaters, ', ');
   }
 
-//  @override
+  @override
   void visitForPartsWithExpression(ForPartsWithExpression node) {
     safelyVisitNode(node.initialization);
     sink.write(';');
@@ -9627,7 +9627,7 @@
     safelyVisitNode(node.body);
   }
 
-//  @override
+  @override
   void visitForStatement2(ForStatement2 node) {
     sink.write('for (');
     safelyVisitNode(node.forLoopParts);
@@ -9829,7 +9829,7 @@
     sink.write("]");
   }
 
-//  @override
+  @override
   void visitListLiteral2(ListLiteral2 node) {
     safelyVisitTokenWithSuffix(node.constKeyword, ' ');
     safelyVisitNode(node.typeArguments);
@@ -9838,7 +9838,7 @@
     sink.write(']');
   }
 
-//  @override
+  @override
   void visitMapForElement(MapForElement node) {
     sink.write('for (');
     safelyVisitNode(node.forLoopParts);
@@ -9846,7 +9846,7 @@
     safelyVisitNode(node.body);
   }
 
-//  @override
+  @override
   void visitMapIfElement(MapIfElement node) {
     sink.write('if (');
     safelyVisitNode(node.condition);
@@ -9864,7 +9864,7 @@
     sink.write("}");
   }
 
-//  @override
+  @override
   void visitMapLiteral2(MapLiteral2 node) {
     safelyVisitTokenWithSuffix(node.constKeyword, ' ');
     safelyVisitNode(node.typeArguments);
@@ -10046,7 +10046,7 @@
     sink.write("}");
   }
 
-//  @override
+  @override
   void visitSetLiteral2(SetLiteral2 node) {
     safelyVisitTokenWithSuffix(node.constKeyword, ' ');
     safelyVisitNode(node.typeArguments);
@@ -10083,7 +10083,7 @@
     sink.write(node.literal.lexeme);
   }
 
-//  @override
+  @override
   void visitSpreadElement(SpreadElement node) {
     sink.write(node.spreadOperator.lexeme);
     safelyVisitNode(node.expression);
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 91184d1..053be37 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.34.2
+version: 0.35.0-dev
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
diff --git a/pkg/analyzer/test/src/dart/ast/utilities_test.dart b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
index 8ce134b..34e5ffe 100644
--- a/pkg/analyzer/test/src/dart/ast/utilities_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/utilities_test.dart
@@ -543,6 +543,45 @@
     expect(toNode.staticType, same(staticType));
   }
 
+  void test_visitCollectionForElement() {
+    CollectionForElement createNode() => astFactory.collectionForElement(
+        forLoopParts: astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('a'),
+            iterable: AstTestFactory.identifier3('b')),
+        body: AstTestFactory.identifier3('c'));
+
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    CollectionForElement fromNode = createNode();
+    (fromNode.body as SimpleIdentifier).staticType = typeC;
+
+    CollectionForElement toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.body as SimpleIdentifier).staticType, same(typeC));
+  }
+
+  void test_visitCollectionIfElement() {
+    CollectionIfElement createNode() => astFactory.collectionIfElement(
+        condition: AstTestFactory.identifier3('a'),
+        thenElement: AstTestFactory.identifier3('b'),
+        elseElement: AstTestFactory.identifier3('c'));
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    CollectionIfElement fromNode = createNode();
+    (fromNode.condition as SimpleIdentifier).staticType = typeA;
+    (fromNode.thenElement as SimpleIdentifier).staticType = typeB;
+    (fromNode.elseElement as SimpleIdentifier).staticType = typeC;
+
+    CollectionIfElement toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect(toNode.condition.staticType, same(typeA));
+    expect((toNode.thenElement as SimpleIdentifier).staticType, same(typeB));
+    expect((toNode.elseElement as SimpleIdentifier).staticType, same(typeC));
+  }
+
   void test_visitCompilationUnit() {
     CompilationUnit fromNode = AstTestFactory.compilationUnit();
     CompilationUnitElement element = new CompilationUnitElementImpl();
@@ -617,6 +656,115 @@
     expect(toNode.element, same(element));
   }
 
+  void test_visitForEachPartsWithDeclaration() {
+    ForEachPartsWithDeclaration createNode() =>
+        astFactory.forEachPartsWithDeclaration(
+            loopVariable: AstTestFactory.declaredIdentifier3('a'),
+            iterable: AstTestFactory.identifier3('b'));
+
+    DartType typeB = ElementFactory.classElement2("B").type;
+
+    ForEachPartsWithDeclaration fromNode = createNode();
+    (fromNode.iterable as SimpleIdentifier).staticType = typeB;
+
+    ForEachPartsWithDeclaration toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.iterable as SimpleIdentifier).staticType, same(typeB));
+  }
+
+  void test_visitForEachPartsWithIdentifier() {
+    ForEachPartsWithIdentifier createNode() =>
+        astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('a'),
+            iterable: AstTestFactory.identifier3('b'));
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+
+    ForEachPartsWithIdentifier fromNode = createNode();
+    fromNode.identifier.staticType = typeA;
+    (fromNode.iterable as SimpleIdentifier).staticType = typeB;
+
+    ForEachPartsWithIdentifier toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect(toNode.identifier.staticType, same(typeA));
+    expect((toNode.iterable as SimpleIdentifier).staticType, same(typeB));
+  }
+
+  void test_visitForPartsWithDeclarations() {
+    ForPartsWithDeclarations createNode() =>
+        astFactory.forPartsWithDeclarations(
+            variables: AstTestFactory.variableDeclarationList2(
+                Keyword.VAR, [AstTestFactory.variableDeclaration('a')]),
+            condition: AstTestFactory.identifier3('b'),
+            updaters: [AstTestFactory.identifier3('c')]);
+
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    ForPartsWithDeclarations fromNode = createNode();
+    (fromNode.condition as SimpleIdentifier).staticType = typeB;
+    (fromNode.updaters[0] as SimpleIdentifier).staticType = typeC;
+
+    ForPartsWithDeclarations toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.condition as SimpleIdentifier).staticType, same(typeB));
+    expect((toNode.updaters[0] as SimpleIdentifier).staticType, same(typeC));
+  }
+
+  void test_visitForPartsWithExpression() {
+    ForPartsWithExpression createNode() => astFactory.forPartsWithExpression(
+        initialization: AstTestFactory.identifier3('a'),
+        condition: AstTestFactory.identifier3('b'),
+        updaters: [AstTestFactory.identifier3('c')]);
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    ForPartsWithExpression fromNode = createNode();
+    (fromNode.initialization as SimpleIdentifier).staticType = typeA;
+    (fromNode.condition as SimpleIdentifier).staticType = typeB;
+    (fromNode.updaters[0] as SimpleIdentifier).staticType = typeC;
+
+    ForPartsWithExpression toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.initialization as SimpleIdentifier).staticType, same(typeA));
+    expect((toNode.condition as SimpleIdentifier).staticType, same(typeB));
+    expect((toNode.updaters[0] as SimpleIdentifier).staticType, same(typeC));
+  }
+
+  void test_visitForStatement2() {
+    ForStatement2 createNode() => astFactory.forStatement2(
+        forLoopParts: astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('a'),
+            iterable: AstTestFactory.identifier3('b')),
+        body: AstTestFactory.expressionStatement(
+            AstTestFactory.identifier3('c')));
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    ForStatement2 fromNode = createNode();
+    ForEachPartsWithIdentifier fromForLoopParts = fromNode.forLoopParts;
+    fromForLoopParts.identifier.staticType = typeA;
+    (fromForLoopParts.iterable as SimpleIdentifier).staticType = typeB;
+    ((fromNode.body as ExpressionStatement).expression as SimpleIdentifier)
+        .staticType = typeC;
+
+    ForStatement2 toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    ForEachPartsWithIdentifier toForLoopParts = fromNode.forLoopParts;
+    expect(toForLoopParts.identifier.staticType, same(typeA));
+    expect(
+        (toForLoopParts.iterable as SimpleIdentifier).staticType, same(typeB));
+    expect(
+        ((toNode.body as ExpressionStatement).expression as SimpleIdentifier)
+            .staticType,
+        same(typeC));
+  }
+
   void test_visitFunctionExpression() {
     FunctionExpressionImpl fromNode = AstTestFactory.functionExpression2(
         AstTestFactory.formalParameterList(),
@@ -741,6 +889,74 @@
     expect(toNode.staticType, same(staticType));
   }
 
+  void test_visitListLiteral2() {
+    ListLiteral2 createNode() => astFactory.listLiteral2(
+        typeArguments:
+            AstTestFactory.typeArgumentList([AstTestFactory.typeName4('A')]),
+        elements: [AstTestFactory.identifier3('b')]);
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+
+    ListLiteral2 fromNode = createNode();
+    (fromNode.typeArguments.arguments[0] as TypeName).type = typeA;
+    (fromNode.elements[0] as SimpleIdentifier).staticType = typeB;
+
+    ListLiteral2 toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.typeArguments.arguments[0] as TypeName).type, same(typeA));
+    expect((toNode.elements[0] as SimpleIdentifier).staticType, same(typeB));
+  }
+
+  void test_visitMapForElement() {
+    MapForElement createNode() => astFactory.mapForElement(
+        forLoopParts: astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('a'),
+            iterable: AstTestFactory.identifier3('b')),
+        body: AstTestFactory.mapLiteralEntry3('c', 'd'));
+
+    DartType typeC = ElementFactory.classElement2("C").type;
+
+    MapForElement fromNode = createNode();
+    (fromNode.body as MapLiteralEntry).key.staticType = typeC;
+
+    MapForElement toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.body as MapLiteralEntry).key.staticType, same(typeC));
+  }
+
+  void test_visitMapIfElement() {
+    MapIfElement createNode() => astFactory.mapIfElement(
+        condition: AstTestFactory.identifier3('a'),
+        thenElement: AstTestFactory.mapLiteralEntry3('b', 'c'),
+        elseElement: AstTestFactory.mapLiteralEntry3('d', 'e'));
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+    DartType typeD = ElementFactory.classElement2("D").type;
+    DartType typeE = ElementFactory.classElement2("E").type;
+
+    MapIfElement fromNode = createNode();
+    MapLiteralEntry fromThen = fromNode.thenElement as MapLiteralEntry;
+    MapLiteralEntry fromElse = fromNode.elseElement as MapLiteralEntry;
+    (fromNode.condition as SimpleIdentifier).staticType = typeA;
+    (fromThen.key as SimpleStringLiteral).staticType = typeB;
+    (fromThen.value as SimpleStringLiteral).staticType = typeC;
+    (fromElse.key as SimpleStringLiteral).staticType = typeD;
+    (fromElse.value as SimpleStringLiteral).staticType = typeE;
+
+    MapIfElement toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    MapLiteralEntry toThen = toNode.thenElement as MapLiteralEntry;
+    MapLiteralEntry toElse = toNode.elseElement as MapLiteralEntry;
+    expect(toNode.condition.staticType, same(typeA));
+    expect((toThen.key as SimpleStringLiteral).staticType, same(typeB));
+    expect((toThen.value as SimpleStringLiteral).staticType, same(typeC));
+    expect((toElse.key as SimpleStringLiteral).staticType, same(typeD));
+    expect((toElse.value as SimpleStringLiteral).staticType, same(typeE));
+  }
+
   void test_visitMapLiteral() {
     MapLiteral fromNode = AstTestFactory.mapLiteral2();
     DartType staticType = ElementFactory.classElement2("C").type;
@@ -750,6 +966,33 @@
     expect(toNode.staticType, same(staticType));
   }
 
+  void test_visitMapLiteral2() {
+    MapLiteral2 createNode() => astFactory.mapLiteral2(
+        typeArguments: AstTestFactory.typeArgumentList(
+            [AstTestFactory.typeName4('A'), AstTestFactory.typeName4('B')]),
+        entries: [AstTestFactory.mapLiteralEntry3('c', 'd')]);
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+    DartType typeC = ElementFactory.classElement2("C").type;
+    DartType typeD = ElementFactory.classElement2("D").type;
+
+    MapLiteral2 fromNode = createNode();
+    (fromNode.typeArguments.arguments[0] as TypeName).type = typeA;
+    (fromNode.typeArguments.arguments[1] as TypeName).type = typeB;
+    MapLiteralEntry fromEntry = fromNode.entries[0] as MapLiteralEntry;
+    (fromEntry.key as SimpleStringLiteral).staticType = typeC;
+    (fromEntry.value as SimpleStringLiteral).staticType = typeD;
+
+    MapLiteral2 toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.typeArguments.arguments[0] as TypeName).type, same(typeA));
+    expect((toNode.typeArguments.arguments[1] as TypeName).type, same(typeB));
+    MapLiteralEntry toEntry = fromNode.entries[0] as MapLiteralEntry;
+    expect((toEntry.key as SimpleStringLiteral).staticType, same(typeC));
+    expect((toEntry.value as SimpleStringLiteral).staticType, same(typeD));
+  }
+
   void test_visitMethodInvocation() {
     MethodInvocation fromNode = AstTestFactory.methodInvocation2("m");
     MethodInvocation toNode = AstTestFactory.methodInvocation2("m");
@@ -886,6 +1129,25 @@
     expect(toNode.staticType, same(staticType));
   }
 
+  void test_visitSetLiteral2() {
+    SetLiteral2 createNode() => astFactory.setLiteral2(
+        typeArguments:
+            AstTestFactory.typeArgumentList([AstTestFactory.typeName4('A')]),
+        elements: [AstTestFactory.identifier3('b')]);
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+    DartType typeB = ElementFactory.classElement2("B").type;
+
+    SetLiteral2 fromNode = createNode();
+    (fromNode.typeArguments.arguments[0] as TypeName).type = typeA;
+    (fromNode.elements[0] as SimpleIdentifier).staticType = typeB;
+
+    SetLiteral2 toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect((toNode.typeArguments.arguments[0] as TypeName).type, same(typeA));
+    expect((toNode.elements[0] as SimpleIdentifier).staticType, same(typeB));
+  }
+
   void test_visitSimpleIdentifier() {
     SimpleIdentifier fromNode = AstTestFactory.identifier3("x");
     MethodElement staticElement = ElementFactory.methodElement(
@@ -912,6 +1174,27 @@
     expect(toNode.staticType, same(staticType));
   }
 
+  void test_visitSpreadElement() {
+    SpreadElement createNode() => astFactory.spreadElement(
+        spreadOperator:
+            TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD_PERIOD),
+        expression: astFactory
+            .listLiteral2(elements: [AstTestFactory.identifier3('a')]));
+
+    DartType typeA = ElementFactory.classElement2("A").type;
+
+    SpreadElement fromNode = createNode();
+    ((fromNode.expression as ListLiteral2).elements[0] as SimpleIdentifier)
+        .staticType = typeA;
+
+    SpreadElement toNode = createNode();
+    ResolutionCopier.copyResolutionData(fromNode, toNode);
+    expect(
+        ((toNode.expression as ListLiteral2).elements[0] as SimpleIdentifier)
+            .staticType,
+        same(typeA));
+  }
+
   void test_visitStringInterpolation() {
     StringInterpolation fromNode =
         AstTestFactory.string([AstTestFactory.interpolationString("a", "'a'")]);
@@ -1449,6 +1732,33 @@
     _assertSource("@deprecated class C = S with M1;", declaration);
   }
 
+  void test_visitCollectionForElement() {
+    _assertSource(
+        'for (e in l) 0',
+        astFactory.collectionForElement(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.integer(0)));
+  }
+
+  void test_visitCollectionIfElement_else() {
+    _assertSource(
+        'if (b) 1 else 0',
+        astFactory.collectionIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.integer(1),
+            elseElement: AstTestFactory.integer(0)));
+  }
+
+  void test_visitCollectionIfElement_then() {
+    _assertSource(
+        'if (b) 1',
+        astFactory.collectionIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.integer(1)));
+  }
+
   void test_visitComment() {
     _assertSource(
         "",
@@ -1881,6 +2191,22 @@
     _assertSource("covariant A this.a", expected);
   }
 
+  void test_visitForEachPartsWithDeclaration() {
+    _assertSource(
+        'var e in l',
+        astFactory.forEachPartsWithDeclaration(
+            loopVariable: AstTestFactory.declaredIdentifier3('e'),
+            iterable: AstTestFactory.identifier3('l')));
+  }
+
+  void test_visitForEachPartsWithIdentifier() {
+    _assertSource(
+        'e in l',
+        astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('e'),
+            iterable: AstTestFactory.identifier3('l')));
+  }
+
   void test_visitForEachStatement_declared() {
     _assertSource(
         "for (var a in b) {}",
@@ -2086,6 +2412,36 @@
         ]));
   }
 
+  void test_visitForPartsWithDeclarations() {
+    _assertSource(
+        'var v; b; u',
+        astFactory.forPartsWithDeclarations(
+            variables: AstTestFactory.variableDeclarationList2(
+                Keyword.VAR, [AstTestFactory.variableDeclaration('v')]),
+            condition: AstTestFactory.identifier3('b'),
+            updaters: [AstTestFactory.identifier3('u')]));
+  }
+
+  void test_visitForPartsWithExpression() {
+    _assertSource(
+        'v; b; u',
+        astFactory.forPartsWithExpression(
+            initialization: AstTestFactory.identifier3('v'),
+            condition: AstTestFactory.identifier3('b'),
+            updaters: [AstTestFactory.identifier3('u')]));
+  }
+
+  void test_visitForStatement2() {
+    _assertSource(
+        'for (e in l) s;',
+        astFactory.forStatement2(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.expressionStatement(
+                AstTestFactory.identifier3('s'))));
+  }
+
   void test_visitForStatement_c() {
     _assertSource(
         "for (; c;) {}",
@@ -2638,6 +2994,62 @@
         AstTestFactory.libraryIdentifier([AstTestFactory.identifier3("a")]));
   }
 
+  void test_visitListLiteral2_complex() {
+    _assertSource(
+        '<int>[0, for (e in l) 0, if (b) 1, ...[0]]',
+        astFactory.listLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [
+              AstTestFactory.integer(0),
+              astFactory.collectionForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('e'),
+                      iterable: AstTestFactory.identifier3('l')),
+                  body: AstTestFactory.integer(0)),
+              astFactory.collectionIfElement(
+                  condition: AstTestFactory.identifier3('b'),
+                  thenElement: AstTestFactory.integer(1)),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory
+                      .listLiteral2(elements: [AstTestFactory.integer(0)]))
+            ]));
+  }
+
+  void test_visitListLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        'const [0]',
+        astFactory.listLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        'const <int>[0]',
+        astFactory.listLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        '[0]', astFactory.listLiteral2(elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        '<int>[0]',
+        astFactory.listLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
   void test_visitListLiteral_const() {
     _assertSource("const []", AstTestFactory.listLiteral2(Keyword.CONST, null));
   }
@@ -2656,6 +3068,97 @@
         ]));
   }
 
+  void test_visitMapForElement() {
+    _assertSource(
+        "for (e in l) 'a' : 'b'",
+        astFactory.mapForElement(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.mapLiteralEntry3('a', 'b')));
+  }
+
+  void test_visitMapIfElement_else() {
+    _assertSource(
+        "if (b) 'a' : 'b' else 'c' : 'd'",
+        astFactory.mapIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.mapLiteralEntry3('a', 'b'),
+            elseElement: AstTestFactory.mapLiteralEntry3('c', 'd')));
+  }
+
+  void test_visitMapIfElement_then() {
+    _assertSource(
+        "if (b) 'a' : 'b'",
+        astFactory.mapIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.mapLiteralEntry3('a', 'b')));
+  }
+
+  void test_visitMapLiteral2_complex() {
+    _assertSource(
+        "<String, String>{'a' : 'b', for (c in d) 'e' : 'f', if (g) 'h' : 'i', ...{'j' : 'k'}}",
+        astFactory.mapLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [
+              AstTestFactory.mapLiteralEntry3('a', 'b'),
+              astFactory.mapForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('c'),
+                      iterable: AstTestFactory.identifier3('d')),
+                  body: AstTestFactory.mapLiteralEntry3('e', 'f')),
+              astFactory.mapIfElement(
+                  condition: AstTestFactory.identifier3('g'),
+                  thenElement: AstTestFactory.mapLiteralEntry3('h', 'i')),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory.mapLiteral2(
+                      entries: [AstTestFactory.mapLiteralEntry3('j', 'k')]))
+            ]));
+  }
+
+  void test_visitMapLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        "const {'a' : 'b'}",
+        astFactory.mapLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        "const <String, String>{'a' : 'b'}",
+        astFactory.mapLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        "{'a' : 'b'}",
+        astFactory
+            .mapLiteral2(entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        "<String, String>{'a' : 'b'}",
+        astFactory.mapLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
   void test_visitMapLiteral_const() {
     _assertSource("const {}", AstTestFactory.mapLiteral(Keyword.CONST, null));
   }
@@ -3034,6 +3537,62 @@
     _assertSource(scriptTag, AstTestFactory.scriptTag(scriptTag));
   }
 
+  void test_visitSetLiteral2_complex() {
+    _assertSource(
+        '<int>{0, for (e in l) 0, if (b) 1, ...[0]}',
+        astFactory.setLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [
+              AstTestFactory.integer(0),
+              astFactory.collectionForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('e'),
+                      iterable: AstTestFactory.identifier3('l')),
+                  body: AstTestFactory.integer(0)),
+              astFactory.collectionIfElement(
+                  condition: AstTestFactory.identifier3('b'),
+                  thenElement: AstTestFactory.integer(1)),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory
+                      .listLiteral2(elements: [AstTestFactory.integer(0)]))
+            ]));
+  }
+
+  void test_visitSetLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        'const {0}',
+        astFactory.setLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        'const <int>{0}',
+        astFactory.setLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        '{0}', astFactory.setLiteral2(elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        '<int>{0}',
+        astFactory.setLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
   void test_visitSimpleFormalParameter_annotation() {
     SimpleFormalParameter parameter =
         AstTestFactory.simpleFormalParameter3('x');
@@ -3077,6 +3636,29 @@
     _assertSource("'a'", AstTestFactory.string2("a"));
   }
 
+  void test_visitSpreadElement_nonNullable() {
+    _assertSource(
+        '...[0]',
+        astFactory.spreadElement(
+            spreadOperator:
+                TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD_PERIOD),
+            expression: astFactory
+                .listLiteral2(elements: [AstTestFactory.integer(0)])));
+  }
+
+  @failingTest
+  void test_visitSpreadElement_nullable() {
+    // TODO(brianwilkerson) Replace the token type below when there is one for
+    //  '...?'.
+    _assertSource(
+        '...?[0]',
+        astFactory.spreadElement(
+            spreadOperator:
+                TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD_PERIOD),
+            expression: astFactory
+                .listLiteral2(elements: [AstTestFactory.integer(0)])));
+  }
+
   void test_visitStringInterpolation() {
     _assertSource(
         "'a\${e}b'",
@@ -3857,6 +4439,33 @@
     _assertSource("@deprecated class C = S with M1;", declaration);
   }
 
+  void test_visitCollectionForElement() {
+    _assertSource(
+        'for (e in l) 0',
+        astFactory.collectionForElement(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.integer(0)));
+  }
+
+  void test_visitCollectionIfElement_else() {
+    _assertSource(
+        'if (b) 1 else 0',
+        astFactory.collectionIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.integer(1),
+            elseElement: AstTestFactory.integer(0)));
+  }
+
+  void test_visitCollectionIfElement_then() {
+    _assertSource(
+        'if (b) 1',
+        astFactory.collectionIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.integer(1)));
+  }
+
   void test_visitComment() {
     _assertSource(
         "",
@@ -4289,6 +4898,22 @@
     _assertSource("covariant A this.a", expected);
   }
 
+  void test_visitForEachPartsWithDeclaration() {
+    _assertSource(
+        'var e in l',
+        astFactory.forEachPartsWithDeclaration(
+            loopVariable: AstTestFactory.declaredIdentifier3('e'),
+            iterable: AstTestFactory.identifier3('l')));
+  }
+
+  void test_visitForEachPartsWithIdentifier() {
+    _assertSource(
+        'e in l',
+        astFactory.forEachPartsWithIdentifier(
+            identifier: AstTestFactory.identifier3('e'),
+            iterable: AstTestFactory.identifier3('l')));
+  }
+
   void test_visitForEachStatement_declared() {
     _assertSource(
         "for (var a in b) {}",
@@ -4494,6 +5119,36 @@
         ]));
   }
 
+  void test_visitForPartsWithDeclarations() {
+    _assertSource(
+        'var v; b; u',
+        astFactory.forPartsWithDeclarations(
+            variables: AstTestFactory.variableDeclarationList2(
+                Keyword.VAR, [AstTestFactory.variableDeclaration('v')]),
+            condition: AstTestFactory.identifier3('b'),
+            updaters: [AstTestFactory.identifier3('u')]));
+  }
+
+  void test_visitForPartsWithExpression() {
+    _assertSource(
+        'v; b; u',
+        astFactory.forPartsWithExpression(
+            initialization: AstTestFactory.identifier3('v'),
+            condition: AstTestFactory.identifier3('b'),
+            updaters: [AstTestFactory.identifier3('u')]));
+  }
+
+  void test_visitForStatement2() {
+    _assertSource(
+        'for (e in l) s;',
+        astFactory.forStatement2(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.expressionStatement(
+                AstTestFactory.identifier3('s'))));
+  }
+
   void test_visitForStatement_c() {
     _assertSource(
         "for (; c;) {}",
@@ -5046,6 +5701,62 @@
         AstTestFactory.libraryIdentifier([AstTestFactory.identifier3("a")]));
   }
 
+  void test_visitListLiteral2_complex() {
+    _assertSource(
+        '<int>[0, for (e in l) 0, if (b) 1, ...[0]]',
+        astFactory.listLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [
+              AstTestFactory.integer(0),
+              astFactory.collectionForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('e'),
+                      iterable: AstTestFactory.identifier3('l')),
+                  body: AstTestFactory.integer(0)),
+              astFactory.collectionIfElement(
+                  condition: AstTestFactory.identifier3('b'),
+                  thenElement: AstTestFactory.integer(1)),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory
+                      .listLiteral2(elements: [AstTestFactory.integer(0)]))
+            ]));
+  }
+
+  void test_visitListLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        'const [0]',
+        astFactory.listLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        'const <int>[0]',
+        astFactory.listLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        '[0]', astFactory.listLiteral2(elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitListLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        '<int>[0]',
+        astFactory.listLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
   void test_visitListLiteral_const() {
     _assertSource("const []", AstTestFactory.listLiteral2(Keyword.CONST, null));
   }
@@ -5064,6 +5775,97 @@
         ]));
   }
 
+  void test_visitMapForElement() {
+    _assertSource(
+        "for (e in l) 'a' : 'b'",
+        astFactory.mapForElement(
+            forLoopParts: astFactory.forEachPartsWithIdentifier(
+                identifier: AstTestFactory.identifier3('e'),
+                iterable: AstTestFactory.identifier3('l')),
+            body: AstTestFactory.mapLiteralEntry3('a', 'b')));
+  }
+
+  void test_visitMapIfElement_else() {
+    _assertSource(
+        "if (b) 'a' : 'b' else 'c' : 'd'",
+        astFactory.mapIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.mapLiteralEntry3('a', 'b'),
+            elseElement: AstTestFactory.mapLiteralEntry3('c', 'd')));
+  }
+
+  void test_visitMapIfElement_then() {
+    _assertSource(
+        "if (b) 'a' : 'b'",
+        astFactory.mapIfElement(
+            condition: AstTestFactory.identifier3('b'),
+            thenElement: AstTestFactory.mapLiteralEntry3('a', 'b')));
+  }
+
+  void test_visitMapLiteral2_complex() {
+    _assertSource(
+        "<String, String>{'a' : 'b', for (c in d) 'e' : 'f', if (g) 'h' : 'i', ...{'j' : 'k'}}",
+        astFactory.mapLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [
+              AstTestFactory.mapLiteralEntry3('a', 'b'),
+              astFactory.mapForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('c'),
+                      iterable: AstTestFactory.identifier3('d')),
+                  body: AstTestFactory.mapLiteralEntry3('e', 'f')),
+              astFactory.mapIfElement(
+                  condition: AstTestFactory.identifier3('g'),
+                  thenElement: AstTestFactory.mapLiteralEntry3('h', 'i')),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory.mapLiteral2(
+                      entries: [AstTestFactory.mapLiteralEntry3('j', 'k')]))
+            ]));
+  }
+
+  void test_visitMapLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        "const {'a' : 'b'}",
+        astFactory.mapLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        "const <String, String>{'a' : 'b'}",
+        astFactory.mapLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        "{'a' : 'b'}",
+        astFactory
+            .mapLiteral2(entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
+  void test_visitMapLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        "<String, String>{'a' : 'b'}",
+        astFactory.mapLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList([
+              AstTestFactory.typeName4('String'),
+              AstTestFactory.typeName4('String')
+            ]),
+            entries: [AstTestFactory.mapLiteralEntry3('a', 'b')]));
+  }
+
   void test_visitMapLiteral_const() {
     _assertSource("const {}", AstTestFactory.mapLiteral(Keyword.CONST, null));
   }
@@ -5433,6 +6235,62 @@
     _assertSource(scriptTag, AstTestFactory.scriptTag(scriptTag));
   }
 
+  void test_visitSetLiteral2_complex() {
+    _assertSource(
+        '<int>{0, for (e in l) 0, if (b) 1, ...[0]}',
+        astFactory.setLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [
+              AstTestFactory.integer(0),
+              astFactory.collectionForElement(
+                  forLoopParts: astFactory.forEachPartsWithIdentifier(
+                      identifier: AstTestFactory.identifier3('e'),
+                      iterable: AstTestFactory.identifier3('l')),
+                  body: AstTestFactory.integer(0)),
+              astFactory.collectionIfElement(
+                  condition: AstTestFactory.identifier3('b'),
+                  thenElement: AstTestFactory.integer(1)),
+              astFactory.spreadElement(
+                  spreadOperator: TokenFactory.tokenFromType(
+                      TokenType.PERIOD_PERIOD_PERIOD),
+                  expression: astFactory
+                      .listLiteral2(elements: [AstTestFactory.integer(0)]))
+            ]));
+  }
+
+  void test_visitSetLiteral2_withConst_withoutTypeArgs() {
+    _assertSource(
+        'const {0}',
+        astFactory.setLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withConst_withTypeArgs() {
+    _assertSource(
+        'const <int>{0}',
+        astFactory.setLiteral2(
+            constKeyword: TokenFactory.tokenFromKeyword(Keyword.CONST),
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withoutConst_withoutTypeArgs() {
+    _assertSource(
+        '{0}', astFactory.setLiteral2(elements: [AstTestFactory.integer(0)]));
+  }
+
+  void test_visitSetLiteral2_withoutConst_withTypeArgs() {
+    _assertSource(
+        '<int>{0}',
+        astFactory.setLiteral2(
+            typeArguments: AstTestFactory.typeArgumentList(
+                [AstTestFactory.typeName4('int')]),
+            elements: [AstTestFactory.integer(0)]));
+  }
+
   void test_visitSimpleFormalParameter_annotation() {
     SimpleFormalParameter parameter =
         AstTestFactory.simpleFormalParameter3('x');
@@ -5476,6 +6334,29 @@
     _assertSource("'a'", AstTestFactory.string2("a"));
   }
 
+  void test_visitSpreadElement_nonNullable() {
+    _assertSource(
+        '...[0]',
+        astFactory.spreadElement(
+            spreadOperator:
+                TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD_PERIOD),
+            expression: astFactory
+                .listLiteral2(elements: [AstTestFactory.integer(0)])));
+  }
+
+  @failingTest
+  void test_visitSpreadElement_nullable() {
+    // TODO(brianwilkerson) Replace the token type below when there is one for
+    //  '...?'.
+    _assertSource(
+        '...?[0]',
+        astFactory.spreadElement(
+            spreadOperator:
+                TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD_PERIOD),
+            expression: astFactory
+                .listLiteral2(elements: [AstTestFactory.integer(0)])));
+  }
+
   void test_visitStringInterpolation() {
     _assertSource(
         "'a\${e}b'",
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index a165d8d..235cd8b 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -6421,46 +6421,46 @@
   @override
   visitWithClause(node) => _unreachable(node);
 
-//  @override
+  @override
   visitCollectionForElement(CollectionForElement node) => _unreachable(node);
 
-//  @override
+  @override
   visitCollectionIfElement(CollectionIfElement node) => _unreachable(node);
 
-//  @override
+  @override
   visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) =>
       _unreachable(node);
 
-//  @override
+  @override
   visitForEachPartsWithIdentifier(ForEachPartsWithIdentifier node) =>
       _unreachable(node);
 
-//  @override
+  @override
   visitForStatement2(ForStatement2 node) => _unreachable(node);
 
-//  @override
+  @override
   visitListLiteral2(ListLiteral2 node) => _unreachable(node);
 
-//  @override
+  @override
   visitMapForElement(MapForElement node) => _unreachable(node);
 
-//  @override
+  @override
   visitMapIfElement(MapIfElement node) => _unreachable(node);
 
-//  @override
+  @override
   visitMapLiteral2(MapLiteral2 node) => _unreachable(node);
 
-//  @override
+  @override
   visitSetLiteral2(SetLiteral2 node) => _unreachable(node);
 
-//  @override
+  @override
   visitSpreadElement(SpreadElement node) => _unreachable(node);
 
-//  @override
+  @override
   visitForPartsWithDeclarations(ForPartsWithDeclarations node) =>
       _unreachable(node);
 
-//  @override
+  @override
   visitForPartsWithExpression(ForPartsWithExpression node) =>
       _unreachable(node);
 }