Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Unified Diff: pkg/analysis_services/lib/src/completion/imported_type_computer.dart

Issue 484733003: Import analysis_services.dart into analysis_server.dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_services/lib/src/completion/imported_type_computer.dart
diff --git a/pkg/analysis_services/lib/src/completion/imported_type_computer.dart b/pkg/analysis_services/lib/src/completion/imported_type_computer.dart
deleted file mode 100644
index 6419e01a0e2015886b81e22ad506e0db2942f7ec..0000000000000000000000000000000000000000
--- a/pkg/analysis_services/lib/src/completion/imported_type_computer.dart
+++ /dev/null
@@ -1,198 +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.computer.dart.toplevel;
-
-import 'dart:async';
-
-import 'package:analysis_services/completion/completion_suggestion.dart';
-import 'package:analysis_services/search/search_engine.dart';
-import 'package:analysis_services/src/completion/dart_completion_manager.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/element.dart';
-
-/**
- * A computer for calculating imported class and top level variable
- * `completion.getSuggestions` request results.
- */
-class ImportedTypeComputer extends DartCompletionComputer {
-
- @override
- bool computeFast(DartCompletionRequest request) {
- // TODO: implement computeFast
- // - compute results based upon current search, then replace those results
- // during the full compute phase
- // - filter results based upon completion offset
- return false;
- }
-
- @override
- Future<bool> computeFull(DartCompletionRequest request) {
- return request.node.accept(new _ImportedTypeVisitor(request));
- }
-}
-
-/**
- * Visits the node at which the completion is requested
- * and builds the list of suggestions.
- */
-class _ImportedTypeVisitor extends GeneralizingAstVisitor<Future<bool>> {
- final DartCompletionRequest request;
-
- _ImportedTypeVisitor(this.request);
-
- @override
- Future<bool> visitCombinator(Combinator node) {
- var directive = node.getAncestor((parent) => parent is NamespaceDirective);
- if (directive is NamespaceDirective) {
- return _addLibraryElements(directive.uriElement);
- }
- return new Future.value(true);
- }
-
- @override
- Future<bool> visitNode(AstNode node) {
- return _addImportedElements();
- }
-
- @override
- Future<bool> visitSimpleIdentifier(SimpleIdentifier node) {
- return node.parent.accept(this);
- }
-
- @override
- Future<bool> visitVariableDeclaration(VariableDeclaration node) {
- // Do not add suggestions if editing the name in a var declaration
- SimpleIdentifier name = node.name;
- if (name == null ||
- name.offset < request.offset ||
- request.offset > name.end) {
- return visitNode(node);
- }
- return new Future.value(false);
- }
-
- Future<bool> _addImportedElements() {
- var future = request.searchEngine.searchTopLevelDeclarations('');
- return future.then((List<SearchMatch> matches) {
-
- Set<LibraryElement> visibleLibs = new Set<LibraryElement>();
- Set<LibraryElement> excludedLibs = new Set<LibraryElement>();
-
- Map<LibraryElement, Set<String>> showNames =
- new Map<LibraryElement, Set<String>>();
- Map<LibraryElement, Set<String>> hideNames =
- new Map<LibraryElement, Set<String>>();
-
- // Exclude elements from the local library
- // as they will be included by the LocalComputer
- excludedLibs.add(request.unit.element.library);
- request.unit.directives.forEach((Directive directive) {
- if (directive is ImportDirective) {
- LibraryElement lib = directive.element.importedLibrary;
- if (directive.prefix == null) {
- visibleLibs.add(lib);
- directive.combinators.forEach((Combinator combinator) {
- if (combinator is ShowCombinator) {
- showNames[lib] = combinator.shownNames.map(
- (SimpleIdentifier id) => id.name).toSet();
- } else if (combinator is HideCombinator) {
- hideNames[lib] = combinator.hiddenNames.map(
- (SimpleIdentifier id) => id.name).toSet();
- }
- });
- } else {
- excludedLibs.add(lib);
- }
- }
- });
-
- // Compute the set of possible classes, functions, and top level variables
- matches.forEach((SearchMatch match) {
- if (match.kind == MatchKind.DECLARATION) {
- Element element = match.element;
- LibraryElement lib = element.library;
- if (element.isPublic && !excludedLibs.contains(lib)) {
- String completion = element.displayName;
- Set<String> show = showNames[lib];
- Set<String> hide = hideNames[lib];
- if ((show == null || show.contains(completion)) &&
- (hide == null || !hide.contains(completion))) {
- request.suggestions.add(
- new CompletionSuggestion(
- CompletionSuggestionKind.fromElementKind(element.kind),
- visibleLibs.contains(lib) || lib.isDartCore ?
- CompletionRelevance.DEFAULT :
- CompletionRelevance.LOW,
- completion,
- completion.length,
- 0,
- element.isDeprecated,
- false));
- }
- }
- }
- });
- return true;
- });
- }
-
- Future<bool> _addLibraryElements(LibraryElement library) {
- library.visitChildren(new _LibraryElementVisitor(request));
- return new Future.value(true);
- }
-}
-
-/**
- * Provides suggestions from a single library for the show/hide combinators
- * as in `import "foo.dart" show ` where the completion offset is after
- * the `show`.
- */
-class _LibraryElementVisitor extends GeneralizingElementVisitor {
- final DartCompletionRequest request;
-
- _LibraryElementVisitor(this.request);
-
- @override
- visitClassElement(ClassElement element) {
- _addSuggestion(element);
- }
-
- @override
- visitCompilationUnitElement(CompilationUnitElement element) {
- element.visitChildren(this);
- }
-
- @override
- visitElement(Element element) {
- // ignored
- }
-
- @override
- visitFunctionTypeAliasElement(FunctionTypeAliasElement element) {
- _addSuggestion(element);
- }
-
- @override
- visitTopLevelVariableElement(TopLevelVariableElement element) {
- _addSuggestion(element);
- }
-
- void _addSuggestion(Element element) {
- if (element != null) {
- String completion = element.name;
- if (completion != null && completion.length > 0) {
- request.suggestions.add(
- new CompletionSuggestion(
- CompletionSuggestionKind.fromElementKind(element.kind),
- CompletionRelevance.DEFAULT,
- completion,
- completion.length,
- 0,
- element.isDeprecated,
- false));
- }
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698