| Index: pkg/analysis_server/lib/src/services/completion/imported_reference_contributor.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/completion/imported_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/imported_reference_contributor.dart
|
| deleted file mode 100644
|
| index b13c33049746d4d5e2ddc176eac5c4f74deca040..0000000000000000000000000000000000000000
|
| --- a/pkg/analysis_server/lib/src/services/completion/imported_reference_contributor.dart
|
| +++ /dev/null
|
| @@ -1,245 +0,0 @@
|
| -// 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.toplevel;
|
| -
|
| -import 'dart:async';
|
| -
|
| -import 'package:analysis_server/src/protocol_server.dart'
|
| - hide Element, ElementKind;
|
| -import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
|
| -import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
|
| -import 'package:analysis_server/src/services/completion/optype.dart';
|
| -import 'package:analysis_server/src/services/completion/suggestion_builder.dart';
|
| -import 'package:analyzer/src/generated/ast.dart';
|
| -
|
| -/**
|
| - * A contributor for calculating imported class and top level variable
|
| - * `completion.getSuggestions` request results.
|
| - */
|
| -class ImportedReferenceContributor extends DartCompletionContributor {
|
| - bool shouldWaitForLowPrioritySuggestions;
|
| - bool suggestionsComputed;
|
| - _ImportedSuggestionBuilder builder;
|
| -
|
| - ImportedReferenceContributor(
|
| - {this.shouldWaitForLowPrioritySuggestions: false});
|
| -
|
| - @override
|
| - bool computeFast(DartCompletionRequest request) {
|
| - // Don't suggest in comments.
|
| - if (request.target.isCommentText) {
|
| - return true;
|
| - }
|
| -
|
| - OpType optype = request.optype;
|
| - if (!optype.isPrefixed) {
|
| - if (optype.includeReturnValueSuggestions ||
|
| - optype.includeTypeNameSuggestions ||
|
| - optype.includeVoidReturnSuggestions ||
|
| - optype.includeConstructorSuggestions) {
|
| - builder = new _ImportedSuggestionBuilder(request, optype);
|
| - builder.shouldWaitForLowPrioritySuggestions =
|
| - shouldWaitForLowPrioritySuggestions;
|
| - // If target is an argument in an argument list
|
| - // then suggestions may need to be adjusted
|
| - suggestionsComputed =
|
| - builder.computeFast(request.target.containingNode);
|
| - return suggestionsComputed && request.target.argIndex == null;
|
| - }
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - @override
|
| - Future<bool> computeFull(DartCompletionRequest request) async {
|
| - if (builder != null) {
|
| - if (!suggestionsComputed) {
|
| - bool result = await builder.computeFull(request.target.containingNode);
|
| - _updateSuggestions(request);
|
| - return result;
|
| - }
|
| - _updateSuggestions(request);
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - /**
|
| - * If target is a function argument, suggest identifiers not invocations
|
| - */
|
| - void _updateSuggestions(DartCompletionRequest request) {
|
| - if (request.target.isFunctionalArgument()) {
|
| - request.convertInvocationsToIdentifiers();
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * [_ImportedSuggestionBuilder] traverses the imports and builds suggestions
|
| - * based upon imported elements.
|
| - */
|
| -class _ImportedSuggestionBuilder extends ElementSuggestionBuilder
|
| - implements SuggestionBuilder {
|
| - bool shouldWaitForLowPrioritySuggestions;
|
| - final DartCompletionRequest request;
|
| - final OpType optype;
|
| - DartCompletionCache cache;
|
| -
|
| - _ImportedSuggestionBuilder(this.request, this.optype) {
|
| - cache = request.cache;
|
| - }
|
| -
|
| - @override
|
| - CompletionSuggestionKind get kind => CompletionSuggestionKind.INVOCATION;
|
| -
|
| - /**
|
| - * If the needed information is cached, then add suggestions and return `true`
|
| - * else return `false` indicating that additional work is necessary.
|
| - */
|
| - bool computeFast(AstNode node) {
|
| - CompilationUnit unit = request.unit;
|
| - if (cache.isImportInfoCached(unit)) {
|
| - _addSuggestions(node);
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - /**
|
| - * Compute suggested based upon imported elements.
|
| - */
|
| - Future<bool> computeFull(AstNode node) {
|
| - Future<bool> addSuggestions(_) {
|
| - _addSuggestions(node);
|
| - return new Future.value(true);
|
| - }
|
| -
|
| - Future future = null;
|
| - if (!cache.isImportInfoCached(request.unit)) {
|
| - future = cache.computeImportInfo(request.unit, request.searchEngine,
|
| - shouldWaitForLowPrioritySuggestions);
|
| - }
|
| - if (future != null) {
|
| - return future.then(addSuggestions);
|
| - }
|
| - return addSuggestions(true);
|
| - }
|
| -
|
| - /**
|
| - * Add constructor and library prefix suggestions from the cache.
|
| - * To reduce the number of suggestions sent to the client,
|
| - * filter the suggestions based upon the first character typed.
|
| - * If no characters are available to use for filtering,
|
| - * then exclude all low priority suggestions.
|
| - */
|
| - void _addConstructorSuggestions() {
|
| - String filterText = request.filterText;
|
| - if (filterText.length > 1) {
|
| - filterText = filterText.substring(0, 1);
|
| - }
|
| - DartCompletionCache cache = request.cache;
|
| - _addFilteredSuggestions(filterText, cache.importedConstructorSuggestions);
|
| - }
|
| -
|
| - /**
|
| - * Add suggestions which start with the given text.
|
| - */
|
| - _addFilteredSuggestions(
|
| - String filterText, List<CompletionSuggestion> unfiltered) {
|
| - //TODO (danrubel) Revisit this filtering once paged API has been added
|
| - unfiltered.forEach((CompletionSuggestion suggestion) {
|
| - if (filterText.length > 0) {
|
| - if (suggestion.completion.startsWith(filterText)) {
|
| - request.addSuggestion(suggestion);
|
| - }
|
| - } else {
|
| - if (suggestion.relevance != DART_RELEVANCE_LOW) {
|
| - request.addSuggestion(suggestion);
|
| - }
|
| - }
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Add suggestions for any inherited imported members.
|
| - */
|
| - void _addInheritedSuggestions(AstNode node) {
|
| - //
|
| - // Replaced by InheritedReferenceContributor
|
| - //
|
| - // var classDecl = node.getAncestor((p) => p is ClassDeclaration);
|
| - // if (classDecl is ClassDeclaration && !optype.inStaticMethodBody) {
|
| - // // Build a list of inherited types that are imported
|
| - // // and include any inherited imported members
|
| - // List<String> inheritedTypes = new List<String>();
|
| - // // local declarations are handled by the local reference contributor
|
| - // visitInheritedTypes(classDecl, importedTypeName: (String typeName) {
|
| - // inheritedTypes.add(typeName);
|
| - // });
|
| - // HashSet<String> visited = new HashSet<String>();
|
| - // while (inheritedTypes.length > 0) {
|
| - // String name = inheritedTypes.removeLast();
|
| - // ClassElement elem = cache.importedClassMap[name];
|
| - // if (visited.add(name) && elem != null) {
|
| - // _addElementSuggestions(elem.fields,
|
| - // relevance: DART_RELEVANCE_INHERITED_FIELD);
|
| - // _addElementSuggestions(elem.accessors,
|
| - // relevance: DART_RELEVANCE_INHERITED_ACCESSOR);
|
| - // _addElementSuggestions(elem.methods,
|
| - // relevance: DART_RELEVANCE_INHERITED_METHOD);
|
| - // elem.allSupertypes.forEach((InterfaceType type) {
|
| - // if (visited.add(type.name) && type.element != null) {
|
| - // _addElementSuggestions(type.element.fields,
|
| - // relevance: DART_RELEVANCE_INHERITED_FIELD);
|
| - // _addElementSuggestions(type.element.accessors,
|
| - // relevance: DART_RELEVANCE_INHERITED_ACCESSOR);
|
| - // _addElementSuggestions(type.element.methods,
|
| - // relevance: DART_RELEVANCE_INHERITED_METHOD);
|
| - // }
|
| - // });
|
| - // }
|
| - // }
|
| - // }
|
| - }
|
| -
|
| - /**
|
| - * Add suggested based upon imported elements.
|
| - */
|
| - void _addSuggestions(AstNode node) {
|
| - if (optype.includeConstructorSuggestions) {
|
| - _addConstructorSuggestions();
|
| - }
|
| - if (optype.includeReturnValueSuggestions ||
|
| - optype.includeTypeNameSuggestions ||
|
| - optype.includeVoidReturnSuggestions) {
|
| - _addInheritedSuggestions(node);
|
| - _addTopLevelSuggestions();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Add top level suggestions from the cache.
|
| - * To reduce the number of suggestions sent to the client,
|
| - * filter the suggestions based upon the first character typed.
|
| - * If no characters are available to use for filtering,
|
| - * then exclude all low priority suggestions.
|
| - */
|
| - void _addTopLevelSuggestions() {
|
| - String filterText = request.filterText;
|
| - if (filterText.length > 1) {
|
| - filterText = filterText.substring(0, 1);
|
| - }
|
| - DartCompletionCache cache = request.cache;
|
| - if (optype.includeTypeNameSuggestions) {
|
| - _addFilteredSuggestions(filterText, cache.importedTypeSuggestions);
|
| - }
|
| - if (optype.includeReturnValueSuggestions) {
|
| - _addFilteredSuggestions(filterText, cache.otherImportedSuggestions);
|
| - }
|
| - if (optype.includeVoidReturnSuggestions) {
|
| - _addFilteredSuggestions(filterText, cache.importedVoidReturnSuggestions);
|
| - }
|
| - }
|
| -}
|
|
|