Fix completion of static members from super classes
Fixes #48873
Change-Id: Ife058f8b26e375da0e5f1768be86b7a0d3db15fa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/242280
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index e518f92..e7df797 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -99,36 +99,42 @@
var opType = request.opType;
if (!isFunctionalArgument) {
for (var accessor in type.accessors) {
- if (visibilityTracker._isVisible(accessor.declaration)) {
- if (accessor.isGetter) {
- if (opType.includeReturnValueSuggestions) {
- memberBuilder.addSuggestionForAccessor(
- accessor: accessor, inheritanceDistance: inheritanceDistance);
- }
- } else {
- if (opType.includeVoidReturnSuggestions) {
- memberBuilder.addSuggestionForAccessor(
- accessor: accessor, inheritanceDistance: inheritanceDistance);
+ if (!accessor.isStatic) {
+ if (visibilityTracker._isVisible(accessor.declaration)) {
+ if (accessor.isGetter) {
+ if (opType.includeReturnValueSuggestions) {
+ memberBuilder.addSuggestionForAccessor(
+ accessor: accessor,
+ inheritanceDistance: inheritanceDistance);
+ }
+ } else {
+ if (opType.includeVoidReturnSuggestions) {
+ memberBuilder.addSuggestionForAccessor(
+ accessor: accessor,
+ inheritanceDistance: inheritanceDistance);
+ }
}
}
}
}
}
for (var method in type.methods) {
- if (visibilityTracker._isVisible(method.declaration)) {
- if (!method.returnType.isVoid) {
- if (opType.includeReturnValueSuggestions) {
- memberBuilder.addSuggestionForMethod(
- method: method,
- inheritanceDistance: inheritanceDistance,
- kind: classMemberSuggestionKind);
- }
- } else {
- if (opType.includeVoidReturnSuggestions) {
- memberBuilder.addSuggestionForMethod(
- method: method,
- inheritanceDistance: inheritanceDistance,
- kind: classMemberSuggestionKind);
+ if (!method.isStatic) {
+ if (visibilityTracker._isVisible(method.declaration)) {
+ if (!method.returnType.isVoid) {
+ if (opType.includeReturnValueSuggestions) {
+ memberBuilder.addSuggestionForMethod(
+ method: method,
+ inheritanceDistance: inheritanceDistance,
+ kind: classMemberSuggestionKind);
+ }
+ } else {
+ if (opType.includeVoidReturnSuggestions) {
+ memberBuilder.addSuggestionForMethod(
+ method: method,
+ inheritanceDistance: inheritanceDistance,
+ kind: classMemberSuggestionKind);
+ }
}
}
}
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index d8a3ff4..3cfdb13 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -3651,6 +3651,50 @@
assertSuggestMethod('y2', 'A2', 'int');
}
+ Future<void> test_inherited_static_field() async {
+ addTestSource('''
+class A {
+ static int f1 = 1;
+ int f2 = 2;
+}
+class B extends A {
+ static int f3 = 3;
+ int f4 = 4;
+
+ void m() {
+ f^
+ }
+}''');
+ await computeSuggestions();
+
+ assertNotSuggested('f1');
+ assertSuggestField('f2', 'int');
+ assertSuggestField('f3', 'int');
+ assertSuggestField('f4', 'int');
+ }
+
+ Future<void> test_inherited_static_method() async {
+ addTestSource('''
+class A {
+ static void m1() {};
+ void m2() {};
+}
+class B extends A {
+ static void m3() {};
+ void m4() {};
+
+ void test() {
+ m^
+ }
+}''');
+ await computeSuggestions();
+
+ assertNotSuggested('m1');
+ assertSuggestMethod('m2', 'A', 'void');
+ assertSuggestMethod('m3', 'B', 'void');
+ assertSuggestMethod('m4', 'B', 'void');
+ }
+
Future<void> test_InstanceCreationExpression() async {
addTestSource('''
class A {foo(){var f; {var x;}}}