Handle type arguments when replacing an empty map pattern

Change-Id: I4c917d60d93a316459f2478cc21a7845af46781b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292920
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Brian Wilkerson 2023-04-03 21:02:18 +00:00 committed by Commit Queue
parent aa1f415e4f
commit 40973edbb5
2 changed files with 53 additions and 9 deletions

View file

@ -29,19 +29,29 @@ class ReplaceEmptyMapPattern extends CorrectionProducer {
@override
FixKind get fixKind => _style.fixKind;
/// Return the replacement for the map pattern.
String get replacement =>
_style == _Style.any ? 'Map()' : 'Map(isEmpty: true)';
@override
Future<void> compute(ChangeBuilder builder) async {
var targetNode = node;
if (targetNode is MapPattern) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.node(targetNode), replacement);
});
var typeArguments = targetNode.typeArguments;
if (typeArguments == null) {
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(range.node(targetNode), replacement(''));
});
} else {
var text = utils.getNodeText(typeArguments);
await builder.addDartFileEdit(file, (builder) {
builder.addSimpleReplacement(
range.node(targetNode), replacement(text));
});
}
}
}
/// Return the replacement for the map pattern.
String replacement(String typeArguments) => _style == _Style.any
? 'Map$typeArguments()'
: 'Map$typeArguments(isEmpty: true)';
}
/// An indication of the style of replacement being offered.

View file

@ -20,7 +20,7 @@ class ReplaceEmptyMapPatternWithAnyTest extends FixProcessorTest {
@override
FixKind get kind => DartFixKind.MATCH_ANY_MAP;
Future<void> test_ifCase() async {
Future<void> test_ifCase_withoutTypeArgs() async {
await resolveTestCode('''
void f(Object x) {
if (x case {}) {
@ -37,6 +37,23 @@ void f(Object x) {
''');
}
Future<void> test_ifCase_withTypeArgs() async {
await resolveTestCode('''
void f(Object x) {
if (x case <int, int>{}) {
return;
}
}
''');
await assertHasFix('''
void f(Object x) {
if (x case Map<int, int>()) {
return;
}
}
''');
}
Future<void> test_switchStatement() async {
await resolveTestCode('''
void f(Object x) {
@ -77,7 +94,7 @@ void f(Object x) {
''');
}
Future<void> test_switchStatement() async {
Future<void> test_switchStatement_withoutTypeArgs() async {
await resolveTestCode('''
void f(Object x) {
switch (x) {
@ -91,6 +108,23 @@ void f(Object x) {
case Map(isEmpty: true): return;
}
}
''');
}
Future<void> test_switchStatement_withTypeArgs() async {
await resolveTestCode('''
void f(Object x) {
switch (x) {
case <int, int>{}: return;
}
}
''');
await assertHasFix('''
void f(Object x) {
switch (x) {
case Map<int, int>(isEmpty: true): return;
}
}
''');
}
}