ConvertToInitializingFormal: Don't discard initializers when deleting the constructor body.
ConvertToInitializingFormal can convert an initializer to an initializing formal, or an assignment statement in the body:
```dart
class C {
int x;
C(int x) {
this.x = x;
}
}
```
When converting from an assignment statement, if there are no statements left in the block, it deletes the entire function body.
Prior to this CL, it would also erroneously delete any initializers that happened to be on the constructor:
```dart
// Before:
class C {
int? x;
int? y;
C(int? x) : y = 1 {
this.x = x;
}
}
// Result of applying fix:
class C {
int? x;
int? y;
C(this.x); // Oops! Where did ": y = 1" go?
}
```
Change-Id: I5bd27e925509adc82056b71f4c96432c819bc954
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/482966
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
This commit is contained in:
committed by
Commit Queue
parent
ba9923c406
commit
ea1bc24fdc
+6
-1
@@ -181,7 +181,12 @@ class ConvertToInitializingFormal extends ResolvedCorrectionProducer {
|
||||
var functionBody = block.parent;
|
||||
if (statements.length == 1 && functionBody is BlockFunctionBody) {
|
||||
builder.addSimpleReplacement(
|
||||
range.endEnd(constructor.parameters, functionBody),
|
||||
range.endEnd(
|
||||
constructor.initializers.isNotEmpty
|
||||
? constructor.initializers.last
|
||||
: constructor.parameters,
|
||||
functionBody,
|
||||
),
|
||||
';',
|
||||
);
|
||||
} else {
|
||||
|
||||
+21
@@ -144,6 +144,27 @@ class C {
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_assignment_otherInitializer() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
int? x;
|
||||
int? y;
|
||||
|
||||
C({int? x}) : y = 1 {
|
||||
this.x = x;
|
||||
}
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
class C {
|
||||
int? x;
|
||||
int? y;
|
||||
|
||||
C({this.x}) : y = 1;
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_assignment_positional_differentType() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
|
||||
Reference in New Issue
Block a user