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:
committed by
dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
69ed86fda6
commit
916afe3219
@@ -1397,7 +1397,9 @@ class DeclarationHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var field in element.fields) {
|
for (var field in element.fields) {
|
||||||
if (field.isOriginDeclaration && (!mustBeStatic || field.isStatic)) {
|
if ((field.isOriginDeclaration ||
|
||||||
|
field.isOriginDeclaringFormalParameter) &&
|
||||||
|
(!mustBeStatic || field.isStatic)) {
|
||||||
_suggestField(
|
_suggestField(
|
||||||
field: field,
|
field: field,
|
||||||
referencingInterface: referencingInterface,
|
referencingInterface: referencingInterface,
|
||||||
|
|||||||
+69
@@ -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 'class_test.dart' as class_;
|
||||||
import 'closure_test.dart' as closure;
|
import 'closure_test.dart' as closure;
|
||||||
import 'constructor_test.dart' as constructor_;
|
import 'constructor_test.dart' as constructor_;
|
||||||
|
import 'declaring_parameter_test.dart' as declaring_parameter;
|
||||||
import 'documentation_test.dart' as documentation;
|
import 'documentation_test.dart' as documentation;
|
||||||
import 'enum_test.dart' as enum_;
|
import 'enum_test.dart' as enum_;
|
||||||
import 'extension_member_test.dart' as extension_member;
|
import 'extension_member_test.dart' as extension_member;
|
||||||
@@ -32,6 +33,7 @@ void main() {
|
|||||||
class_.main();
|
class_.main();
|
||||||
closure.main();
|
closure.main();
|
||||||
constructor_.main();
|
constructor_.main();
|
||||||
|
declaring_parameter.main();
|
||||||
documentation.main();
|
documentation.main();
|
||||||
enum_.main();
|
enum_.main();
|
||||||
extension_member.main();
|
extension_member.main();
|
||||||
|
|||||||
Reference in New Issue
Block a user