Index: pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart |
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart |
index cb94c1de9f2333d8408e9dab8e8ad5bcda799265..301e5d8560b36e9bf7be2fa8e56eacf406339bc6 100644 |
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart |
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart |
@@ -7,7 +7,6 @@ library services.completion.contributor.dart.static_member; |
import 'dart:async'; |
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart'; |
-import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart'; |
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart'; |
import 'package:analyzer/src/generated/ast.dart'; |
import 'package:analyzer/src/generated/element.dart'; |
@@ -23,61 +22,33 @@ class StaticMemberContributor extends DartCompletionContributor { |
@override |
Future<List<CompletionSuggestion>> computeSuggestions( |
DartCompletionRequest request) async { |
- // Determine if the target looks like a prefixed identifier, |
- // a method invocation, or a property access |
- SimpleIdentifier targetId = _getTargetId(request.target); |
- if (targetId == null) { |
+ // Determine if the target looks like a static method invocation, |
+ // or a static property access |
+ if (request.dotTarget is! Identifier || request.target.isCascade) { |
return EMPTY_LIST; |
} |
// Resolve the expression and the containing library |
- await request.resolveExpression(targetId); |
- LibraryElement containingLibrary = await request.libraryElement; |
- // Gracefully degrade if the library could not be determined |
- // e.g. detached part file or source change |
- if (containingLibrary == null) { |
- return EMPTY_LIST; |
- } |
+ await request.resolveExpression(request.dotTarget); |
// Recompute the target since resolution may have changed it |
- targetId = _getTargetId(request.target); |
- if (targetId == null) { |
- return EMPTY_LIST; |
- } |
- |
- // Build the suggestions |
- Element elem = targetId.bestElement; |
- if (elem is ClassElement) { |
- _SuggestionBuilder builder = new _SuggestionBuilder(containingLibrary); |
- elem.accept(builder); |
- return builder.suggestions; |
- } |
- return EMPTY_LIST; |
- } |
- |
- /** |
- * Return the identifier to the left of the 'dot' or `null` if none. |
- */ |
- SimpleIdentifier _getTargetId(CompletionTarget target) { |
- AstNode node = target.containingNode; |
- if (node is MethodInvocation) { |
- if (identical(node.methodName, target.entity)) { |
- Expression target = node.realTarget; |
- if (target is SimpleIdentifier) { |
- return target; |
+ Expression targetId = request.dotTarget; |
+ if (targetId is Identifier && !request.target.isCascade) { |
+ Element elem = targetId.bestElement; |
+ if (elem is ClassElement) { |
+ LibraryElement containingLibrary = await request.libraryElement; |
+ // Gracefully degrade if the library could not be determined |
+ // e.g. detached part file or source change |
+ if (containingLibrary == null) { |
+ return EMPTY_LIST; |
} |
- } else { |
- return null; |
- } |
- } |
- if (node is PrefixedIdentifier) { |
- if (identical(node.identifier, target.entity)) { |
- return node.prefix; |
- } else { |
- return null; |
+ |
+ _SuggestionBuilder builder = new _SuggestionBuilder(containingLibrary); |
+ elem.accept(builder); |
+ return builder.suggestions; |
} |
} |
- return null; |
+ return EMPTY_LIST; |
} |
} |