From 8dcb212010fb20942ea300d5d13b15aac8a72934 Mon Sep 17 00:00:00 2001 From: Keerti Parthasarathy Date: Tue, 2 Apr 2024 14:47:02 +0000 Subject: [PATCH] Issue 53669: Remove duplicate await when inlining methods. Fixes https://github.com/dart-lang/sdk/issues/53669 Change-Id: I64eb73d5eef4a8a8ab5184b3e67bb2303faed5e7 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/360580 Commit-Queue: Keerti Parthasarathy Reviewed-by: Brian Wilkerson --- .../refactoring/legacy/inline_method.dart | 7 +++++++ .../test/edit/refactoring_test.dart | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart index a386476895fc..1410c1ce9fc9 100644 --- a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart +++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart @@ -15,6 +15,7 @@ import 'package:analysis_server/src/utilities/strings.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/precedence.dart'; +import 'package:analyzer/dart/ast/token.dart'; import 'package:analyzer/dart/ast/visitor.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/source/source_range.dart'; @@ -572,6 +573,12 @@ class _ReferenceProcessor { } // do replace var methodUsageRange = range.node(usage); + var awaitKeyword = Keyword.AWAIT.lexeme; + if (usage.parent is AwaitExpression && + source.startsWith(awaitKeyword)) { + // remove the duplicate await keyword and the following whitespace. + source = source.substring(awaitKeyword.length + 1); + } var edit = newSourceEdit_range(methodUsageRange, source); _addRefEdit(edit); } else { diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart index f1ae36b9f10a..a388f6515258 100644 --- a/pkg/analysis_server/test/edit/refactoring_test.dart +++ b/pkg/analysis_server/test/edit/refactoring_test.dart @@ -1321,6 +1321,22 @@ void f() { '''); } + Future test_topLevelFunction_async() { + addTestFile(''' +Future a() async => 3; +Future b() async => await a(); +Future c() async => await b(); +} +'''); + return assertSuccessfulRefactoring(() { + return _sendInlineRequest('b('); + }, ''' +Future a() async => 3; +Future c() async => await a(); +} +'''); + } + Future test_topLevelFunction_oneInvocation() { addTestFile(''' test(a, b) {