From e86fe85aa4935474abcbde91bd2fa0c29b66b609 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov <scheglov@google.com> Date: Tue, 7 Feb 2023 22:58:47 +0000 Subject: [PATCH] Suppport ForEachPartsWithPattern in NodeReplacer. Change-Id: I152f3c7b0500db9ad4ca633dd0f4491cea460f53 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/281465 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com> --- pkg/analyzer/lib/src/dart/ast/utilities.dart | 10 ++++++++++ pkg/analyzer/test/generated/utilities_test.dart | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart index 57a0bcdfa638..8093d4041e2b 100644 --- a/pkg/analyzer/lib/src/dart/ast/utilities.dart +++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart @@ -2513,6 +2513,16 @@ class NodeReplacer extends ThrowingAstVisitor<bool> { return visitNode(node); } + @override + bool? visitForEachPartsWithPattern(ForEachPartsWithPattern node) { + if (identical(node.iterable, _oldNode)) { + (node as ForEachPartsWithPatternImpl).iterable = + _newNode as ExpressionImpl; + return true; + } + return visitNode(node); + } + @override bool visitForElement(ForElement node) { if (identical(node.forLoopParts, _oldNode)) { diff --git a/pkg/analyzer/test/generated/utilities_test.dart b/pkg/analyzer/test/generated/utilities_test.dart index b81bfa49b9b9..729ea55298a8 100644 --- a/pkg/analyzer/test/generated/utilities_test.dart +++ b/pkg/analyzer/test/generated/utilities_test.dart @@ -876,6 +876,22 @@ void f() { ); } + void test_forEachPartsWithPattern() { + var findNode = _parseStringToFindNode(r''' +void f() { + for (var (a) in []) {} + for (var (b) in []) {} +} +'''); + _assertReplacementForChildren<ForEachPartsWithPattern>( + destination: findNode.forEachPartsWithPattern('(a)'), + source: findNode.forEachPartsWithPattern('(b)'), + childAccessors: [ + (node) => node.iterable, + ], + ); + } + void test_forEachStatement_withIdentifier() { var findNode = _parseStringToFindNode(r''' void f(int a) {