Add support for adding missing named parameters to constructors.

I expected it to be more complex than it turned out to be.

R=brianwilkerson@google.com

Change-Id: I2a41204ea615ec7b65d7858bc4ed3908af17b2c1
Reviewed-on: https://dart-review.googlesource.com/54523
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2018-05-09 19:32:27 +00:00 committed by commit-bot@chromium.org
parent e8c8557fcb
commit 310745ca8b
2 changed files with 100 additions and 1 deletions

View file

@ -3816,7 +3816,9 @@ class _ExecutableParameters {
Future<FormalParameterList> getParameterList() async {
var name = await astProvider.getParsedNameForElement(executable);
AstNode targetDeclaration = name?.parent;
if (targetDeclaration is FunctionDeclaration) {
if (targetDeclaration is ConstructorDeclaration) {
return targetDeclaration.parameters;
} else if (targetDeclaration is FunctionDeclaration) {
FunctionExpression function = targetDeclaration.functionExpression;
return function.parameters;
} else if (targetDeclaration is MethodDeclaration) {

View file

@ -825,6 +825,90 @@ class A {
''');
}
test_addMissingParameterNamed_constructor_hasNamed() async {
await resolveTestUnit('''
class A {
A(int a, {int b}) {}
}
main() {
new A(1, b: 2, named: 3.0);
}
''');
await assertHasFix(DartFixKind.ADD_MISSING_PARAMETER_NAMED, '''
class A {
A(int a, {int b, double named}) {}
}
main() {
new A(1, b: 2, named: 3.0);
}
''');
}
test_addMissingParameterNamed_constructor_hasRequired() async {
await resolveTestUnit('''
class A {
A(int a) {}
}
main() {
new A(1, named: 2.0);
}
''');
await assertHasFix(DartFixKind.ADD_MISSING_PARAMETER_NAMED, '''
class A {
A(int a, {double named}) {}
}
main() {
new A(1, named: 2.0);
}
''');
}
test_addMissingParameterNamed_constructor_noParameters() async {
await resolveTestUnit('''
class A {
A() {}
}
main() {
new A(named: 42);
}
''');
await assertHasFix(DartFixKind.ADD_MISSING_PARAMETER_NAMED, '''
class A {
A({int named}) {}
}
main() {
new A(named: 42);
}
''');
}
test_addMissingParameterNamed_constructor_noParameters_named() async {
await resolveTestUnit('''
class A {
A.aaa() {}
}
main() {
new A.aaa(named: 42);
}
''');
await assertHasFix(DartFixKind.ADD_MISSING_PARAMETER_NAMED, '''
class A {
A.aaa({int named}) {}
}
main() {
new A.aaa(named: 42);
}
''');
}
test_addMissingParameterNamed_function_hasNamed() async {
await resolveTestUnit('''
test(int a, {int b: 0}) {}
@ -897,6 +981,19 @@ class A {
''');
}
test_addMissingParameterNamed_method_hasOptionalPositional() async {
await resolveTestUnit('''
class A {
test(int a, [int b]) {}
main() {
test(1, 2, named: 3.0);
}
}
''');
await assertNoFix(DartFixKind.ADD_MISSING_PARAMETER_NAMED);
}
test_addMissingParameterNamed_method_hasRequired() async {
await resolveTestUnit('''
class A {