Issue 52296. Fix NPE in AddTypeAnnotation, when formal parameter without name.
Bug: https://github.com/dart-lang/sdk/issues/52296 Change-Id: I6f3952faa9f3fc9e7f9e1d83c4699222be8dbcdc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/301731 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Keerti Parthasarathy <keertip@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
c63263cbf5
commit
bf5bdc97ff
@@ -47,10 +47,12 @@ class AddTypeAnnotation extends CorrectionProducer {
|
||||
@override
|
||||
Future<void> compute(ChangeBuilder builder) async {
|
||||
final node = this.node;
|
||||
|
||||
if (node is SimpleFormalParameter) {
|
||||
await _forSimpleFormalParameter(builder, node.name!, node);
|
||||
await _forSimpleFormalParameter(builder, node);
|
||||
return;
|
||||
}
|
||||
|
||||
if (node is DeclaredVariablePattern) {
|
||||
var type = node.matchedValueType;
|
||||
var keyword = node.keyword;
|
||||
@@ -133,12 +135,17 @@ class AddTypeAnnotation extends CorrectionProducer {
|
||||
builder, declaredIdentifier.keyword, declaredIdentifier.name, type);
|
||||
}
|
||||
|
||||
Future<void> _forSimpleFormalParameter(ChangeBuilder builder, Token name,
|
||||
SimpleFormalParameter parameter) async {
|
||||
Future<void> _forSimpleFormalParameter(
|
||||
ChangeBuilder builder, SimpleFormalParameter parameter) async {
|
||||
// Ensure that there isn't already a type annotation.
|
||||
if (parameter.type != null) {
|
||||
return;
|
||||
}
|
||||
// Ensure that the parameter is named.
|
||||
final name = parameter.name;
|
||||
if (name == null) {
|
||||
return;
|
||||
}
|
||||
// Prepare the type.
|
||||
var type = parameter.declaredElement!.type;
|
||||
// TODO(scheglov) If the parameter is in a method declaration, and if the
|
||||
|
||||
@@ -689,6 +689,14 @@ void f() {
|
||||
''');
|
||||
}
|
||||
|
||||
Future<void> test_parameter_final_type_noName() async {
|
||||
verifyNoTestUnitErrors = false;
|
||||
await resolveTestCode('''
|
||||
typedef F = void Function(final int);
|
||||
''');
|
||||
await assertNoAssistAt('final');
|
||||
}
|
||||
|
||||
@FailingTest(reason: '''
|
||||
This functionality is disabled in `AddTypeAnnotation._forSimpleFormalParameter`
|
||||
because `writeType` is writing the names of the parameters when it shouldn't.
|
||||
|
||||
Reference in New Issue
Block a user