File tree 3 files changed +43
-5
lines changed
lib/src/services/correction/dart
test/src/services/correction/fix
analyzer_plugin/lib/utilities
3 files changed +43
-5
lines changed Original file line number Diff line number Diff line change @@ -102,9 +102,19 @@ class RemoveDeadCode extends ResolvedCorrectionProducer {
102
102
if (forStatement is ! ForStatement ) return ;
103
103
104
104
await _computeForStatementParts (builder, forStatement, coveringNode);
105
- } else if (coveringNode is SwitchPatternCase ) {
105
+ } else if (coveringNode is SwitchMember ) {
106
+ var parent = coveringNode.parent as SwitchStatement ;
107
+ var memberIndex = parent.members.indexOf (coveringNode);
108
+ Token ? overrideEnd;
109
+ if (memberIndex > 0 &&
110
+ parent.members[memberIndex - 1 ].statements.isEmpty) {
111
+ // Previous member "falls through" to the one being removed, so don't
112
+ // remove the statements.
113
+ overrideEnd = coveringNode.colon;
114
+ }
106
115
await builder.addDartFileEdit (file, (builder) {
107
- builder.addDeletion (range.deletionRange (coveringNode));
116
+ builder.addDeletion (
117
+ range.deletionRange (coveringNode, overrideEnd: overrideEnd));
108
118
});
109
119
}
110
120
}
Original file line number Diff line number Diff line change @@ -493,6 +493,30 @@ void f() {
493
493
''' );
494
494
}
495
495
496
+ Future <void > test_switchCase_sharedStatements_last () async {
497
+ await resolveTestCode ('''
498
+ void f() {
499
+ var m = 5;
500
+ switch(m) {
501
+ case 5:
502
+ case 3:
503
+ case 5:
504
+ break;
505
+ }
506
+ }
507
+ ''' );
508
+ await assertHasFix ('''
509
+ void f() {
510
+ var m = 5;
511
+ switch(m) {
512
+ case 5:
513
+ case 3:
514
+ break;
515
+ }
516
+ }
517
+ ''' );
518
+ }
519
+
496
520
Future <void > test_switchCase_uniqueStatements () async {
497
521
await resolveTestCode ('''
498
522
void f() {
Original file line number Diff line number Diff line change @@ -63,11 +63,15 @@ class RangeFactory {
63
63
64
64
/// Return the deletion range of the [node] , considering the spaces and
65
65
/// comments before and after it.
66
- SourceRange deletionRange (AstNode node) {
66
+ ///
67
+ /// If a non-`null` [overrideEnd] is supplied, it will be used in place of
68
+ /// [AstNode.endToken] to determine the range of tokens to delete.
69
+ SourceRange deletionRange (AstNode node, {Token ? overrideEnd}) {
67
70
var begin = node.beginToken;
68
71
begin = begin.precedingComments ?? begin;
69
72
70
- var end = node.endToken.next! ;
73
+ var initialEndToken = overrideEnd ?? node.endToken;
74
+ var end = initialEndToken.next! ;
71
75
end = end.precedingComments ?? end;
72
76
73
77
int startOffset;
@@ -84,7 +88,7 @@ class RangeFactory {
84
88
} else {
85
89
startOffset = begin.previous! .end;
86
90
}
87
- endOffset = node.endToken .end;
91
+ endOffset = initialEndToken .end;
88
92
} else {
89
93
startOffset = begin.offset;
90
94
endOffset = end.offset;
You can’t perform that action at this time.
0 commit comments