@@ -11,6 +11,16 @@ import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
11
11
import 'package:analyzer_plugin/utilities/range_factory.dart' ;
12
12
13
13
class ReplaceCascadeWithDot extends CorrectionProducer {
14
+ static final Map <TokenType , String > _indexReplacement = {
15
+ TokenType .PERIOD_PERIOD : '' ,
16
+ TokenType .QUESTION_PERIOD_PERIOD : '?' ,
17
+ };
18
+
19
+ static final Map <TokenType , String > _propertyReplacement = {
20
+ TokenType .PERIOD_PERIOD : '.' ,
21
+ TokenType .QUESTION_PERIOD_PERIOD : '?.' ,
22
+ };
23
+
14
24
@override
15
25
FixKind get fixKind => DartFixKind .REPLACE_CASCADE_WITH_DOT ;
16
26
@@ -20,52 +30,41 @@ class ReplaceCascadeWithDot extends CorrectionProducer {
20
30
if (node is CascadeExpression ) {
21
31
var sections = node.cascadeSections;
22
32
if (sections.length == 1 ) {
23
- var section = sections[0 ];
24
- Token cascadeOperator;
25
- if (section is MethodInvocation ) {
26
- cascadeOperator = section.operator ;
27
- } else if (section is PropertyAccess ) {
28
- cascadeOperator = section.operator ;
29
- } else if (section is IndexExpression ) {
30
- await _handleIndexExpression (builder, section);
31
- return ;
32
- } else if (section is AssignmentExpression ) {
33
- var leftHandSide = section.leftHandSide;
34
- if (leftHandSide is PropertyAccess ) {
35
- cascadeOperator = leftHandSide.operator ;
36
- } else if (leftHandSide is IndexExpression ) {
37
- await _handleIndexExpression (builder, leftHandSide);
38
- return ;
39
- } else {
40
- return ;
41
- }
42
- } else {
43
- return ;
44
- }
45
- var type = cascadeOperator.type;
46
- if (type == TokenType .PERIOD_PERIOD ||
47
- type == TokenType .QUESTION_PERIOD_PERIOD ) {
48
- await builder.addDartFileEdit (file, (builder) {
49
- var end = cascadeOperator.end;
50
- builder.addDeletion (range.startOffsetEndOffset (end - 1 , end));
51
- });
52
- }
33
+ await _replaceFor (builder, sections[0 ]);
53
34
}
54
35
}
55
36
}
56
37
57
- void _handleIndexExpression (
58
- ChangeBuilder builder, IndexExpression section) async {
59
- var cascadeOperator = section.period;
60
- var type = cascadeOperator.type;
61
- if (type == TokenType .PERIOD_PERIOD ) {
62
- await builder.addDartFileEdit (file, (builder) {
63
- builder.addDeletion (
64
- range.startStart (cascadeOperator, section.leftBracket));
65
- });
66
- } else if (type == TokenType .QUESTION_PERIOD_PERIOD ) {
38
+ Future <void > _replaceFor (ChangeBuilder builder, Expression section) async {
39
+ if (section is AssignmentExpression ) {
40
+ return _replaceFor (builder, section.leftHandSide);
41
+ }
42
+
43
+ if (section is IndexExpression ) {
44
+ if (section.period != null ) {
45
+ return _replaceToken (builder, section.period, _indexReplacement);
46
+ }
47
+ return _replaceFor (builder, section.target);
48
+ }
49
+
50
+ if (section is MethodInvocation ) {
51
+ return _replaceToken (builder, section.operator , _propertyReplacement);
52
+ }
53
+
54
+ if (section is PropertyAccess ) {
55
+ return _replaceToken (builder, section.operator , _propertyReplacement);
56
+ }
57
+ }
58
+
59
+ Future <void > _replaceToken (
60
+ ChangeBuilder builder,
61
+ Token token,
62
+ Map <TokenType , String > map,
63
+ ) async {
64
+ var replacement = map[token.type];
65
+ if (replacement != null ) {
67
66
await builder.addDartFileEdit (file, (builder) {
68
- builder.addSimpleReplacement (range.token (cascadeOperator ), '?' );
67
+ builder.addSimpleReplacement (range.token (token ), replacement );
69
68
});
70
69
}
71
70
}
0 commit comments