Chromium Code Reviews| Index: pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart |
| diff --git a/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..cba3bd4c44181273c0bcfd17b120dae68e542435 |
| --- /dev/null |
| +++ b/pkg/analysis_server/lib/src/services/completion/dart/combinator_contributor.dart |
| @@ -0,0 +1,57 @@ |
| +// Copyright (c) 2014, 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. |
| + |
| +library services.completion.contributor.dart.combinator; |
| + |
| +import 'dart:async'; |
| + |
| +import 'package:analysis_server/src/protocol_server.dart' |
| + hide Element, ElementKind; |
| +import 'package:analysis_server/src/provisional/completion/dart/completion_dart.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'; |
| + |
| +/** |
| + * A contributor for calculating `completion.getSuggestions` request results |
| + * for the import combinators show and hide. |
| + */ |
| +class CombinatorContributor extends DartCompletionContributor { |
| + @override |
| + Future<List<CompletionSuggestion>> computeSuggestions( |
| + DartCompletionRequest request) async { |
| + AstNode node = request.target.containingNode; |
| + if (node is! Combinator) { |
| + return EMPTY_LIST; |
| + } |
| + |
| + // Partially resolve the compilation unit |
| + CompilationUnit unit = await request.resolveDeclarationsInScope(); |
|
scheglov
2015/12/04 17:43:26
It seems too wide.
It would be enough to get LIBRA
danrubel
2015/12/04 20:46:22
Thanks for the info. I'll address this in the next
|
| + // Gracefully degrade if the compilation unit could not be resolved |
| + // e.g. detached part file or source change |
| + if (unit == null) { |
| + return EMPTY_LIST; |
| + } |
| + |
| + // Check the target since resolution may have changed it |
| + node = request.target.containingNode; |
| + if (node is! Combinator) { |
| + return EMPTY_LIST; |
| + } |
| + |
| + // Build list of suggestions |
| + var directive = node.getAncestor((parent) => parent is NamespaceDirective); |
| + if (directive is NamespaceDirective) { |
| + LibraryElement library = directive.uriElement; |
| + if (library != null) { |
| + LibraryElementSuggestionBuilder builder = |
| + new LibraryElementSuggestionBuilder( |
| + request, CompletionSuggestionKind.IDENTIFIER, false, false); |
| + library.visitChildren(builder); |
| + return builder.suggestions; |
| + } |
| + } |
| + return EMPTY_LIST; |
| + } |
| +} |