mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 15:11:35 +00:00
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:
parent
aa1f415e4f
commit
40973edbb5
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
''');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue