Suggest fields from declaring parameters in completions

This was preventing suggesting fields from declaring parameters
everywhere.

Closes https://github.com/dart-lang/sdk/issues/63537

Change-Id: I552f85275c6a1aebaa4a50af88d661bc7e3d6492
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/511040
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Brian Wilkerson
2026-06-11 11:09:54 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent 69ed86fda6
commit 916afe3219
3 changed files with 74 additions and 1 deletions
@@ -1397,7 +1397,9 @@ class DeclarationHelper {
}
for (var field in element.fields) {
if (field.isOriginDeclaration && (!mustBeStatic || field.isStatic)) {
if ((field.isOriginDeclaration ||
field.isOriginDeclaringFormalParameter) &&
(!mustBeStatic || field.isStatic)) {
_suggestField(
field: field,
referencingInterface: referencingInterface,
@@ -0,0 +1,69 @@
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../../client/completion_driver_test.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(DeclaringParameterTest);
});
}
@reflectiveTest
class DeclaringParameterTest extends AbstractCompletionDriverTest {
@override
bool get includeKeywords => false;
Future<void> test_insideFunction() async {
await computeSuggestions('''
class C(var int f1) {
}
void f(C c) {
print(c.^);
}
''');
assertResponse(r'''
suggestions
f1
kind: field
''');
}
Future<void> test_insideMember_sameClass() async {
await computeSuggestions('''
class C(var int f1) {
void m() {
print(^);
}
}
''');
assertResponse(r'''
suggestions
f1
kind: field
''');
}
Future<void> test_insideMember_subclass() async {
await computeSuggestions('''
class A(var int f1) {}
class B extends A {
new() : super(2);
void m() {
print(^);
}
}
''');
assertResponse(r'''
suggestions
f1
kind: field
''');
}
}
@@ -8,6 +8,7 @@ import 'class_member_test.dart' as class_member;
import 'class_test.dart' as class_;
import 'closure_test.dart' as closure;
import 'constructor_test.dart' as constructor_;
import 'declaring_parameter_test.dart' as declaring_parameter;
import 'documentation_test.dart' as documentation;
import 'enum_test.dart' as enum_;
import 'extension_member_test.dart' as extension_member;
@@ -32,6 +33,7 @@ void main() {
class_.main();
closure.main();
constructor_.main();
declaring_parameter.main();
documentation.main();
enum_.main();
extension_member.main();