mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 12:57:42 +00:00
constructor tearoff fix support for unnecessary_lambdas
Fixes: https://github.com/dart-lang/sdk/issues/47103 Change-Id: I521461a587b9272503772e9b13999d8e4e688352 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212803 Commit-Queue: Phil Quitslund <pquitslund@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
e5c659b55f
commit
8cee82debb
|
@ -43,6 +43,16 @@ class ReplaceWithTearOff extends CorrectionProducer {
|
|||
builder.write(utils.getNodeText(expression.function));
|
||||
});
|
||||
});
|
||||
} else if (expression is InstanceCreationExpression) {
|
||||
await builder.addDartFileEdit(file, (builder) {
|
||||
builder.addReplacement(range.node(ancestor), (builder) {
|
||||
var constructorName = expression.constructorName;
|
||||
builder.write(utils.getNodeText(constructorName));
|
||||
if (constructorName.name == null) {
|
||||
builder.write('.new');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -53,6 +53,121 @@ class ReplaceWithTearOffTest extends FixProcessorLintTest {
|
|||
@override
|
||||
String get lintCode => LintNames.unnecessary_lambdas;
|
||||
|
||||
Future<void> test_constructorTearOff_named() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
int c;
|
||||
C.create([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map((x) => C.create(x))) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
class C {
|
||||
int c;
|
||||
C.create([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map(C.create)) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
// @soloTest
|
||||
Future<void> test_constructorTearOff_nameUnnamed() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map((x) => C.new(x))) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map(C.new)) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_constructorTearOff_oneParameter() async {
|
||||
await resolveTestCode('''
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map((x) => C(x))) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
await assertHasFix('''
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
void f() {
|
||||
var listOfInts = [1, 2, 3];
|
||||
for (var c in listOfInts.map(C.new)) {
|
||||
print(c.c);
|
||||
}
|
||||
}
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_constructorTearOff_zeroParameters() async {
|
||||
await resolveTestCode('''
|
||||
typedef Maker = Object Function();
|
||||
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
var l = <Maker>[
|
||||
() => C(),
|
||||
];
|
||||
''');
|
||||
await assertHasFix('''
|
||||
typedef Maker = Object Function();
|
||||
|
||||
class C {
|
||||
int c;
|
||||
C([this.c = 3]);
|
||||
}
|
||||
|
||||
var l = <Maker>[
|
||||
C.new,
|
||||
];
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_function_oneParameter() async {
|
||||
await resolveTestCode('''
|
||||
Function f() => (name) {
|
||||
|
|
Loading…
Reference in a new issue