| Index: pkg/analysis_services/lib/src/completion/dart_completion_manager.dart
|
| diff --git a/pkg/analysis_services/lib/src/completion/dart_completion_manager.dart b/pkg/analysis_services/lib/src/completion/dart_completion_manager.dart
|
| deleted file mode 100644
|
| index e25a5f03ad2a9a4250385279c4f2e86b6ffb343d..0000000000000000000000000000000000000000
|
| --- a/pkg/analysis_services/lib/src/completion/dart_completion_manager.dart
|
| +++ /dev/null
|
| @@ -1,191 +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 test.services.completion.dart;
|
| -
|
| -import 'dart:async';
|
| -
|
| -import 'package:analysis_services/completion/completion_manager.dart';
|
| -import 'package:analysis_services/completion/completion_suggestion.dart';
|
| -import 'package:analysis_services/search/search_engine.dart';
|
| -import 'package:analysis_services/src/completion/imported_type_computer.dart';
|
| -import 'package:analysis_services/src/completion/invocation_computer.dart';
|
| -import 'package:analysis_services/src/completion/keyword_computer.dart';
|
| -import 'package:analysis_services/src/completion/local_computer.dart';
|
| -import 'package:analyzer/src/generated/ast.dart';
|
| -import 'package:analyzer/src/generated/element.dart';
|
| -import 'package:analyzer/src/generated/engine.dart';
|
| -import 'package:analyzer/src/generated/source.dart';
|
| -
|
| -/**
|
| - * The base class for computing code completion suggestions.
|
| - */
|
| -abstract class DartCompletionComputer {
|
| - /**
|
| - * Computes the initial set of [CompletionSuggestion]s based on
|
| - * the given completion context. The compilation unit and completion node
|
| - * in the given completion context may not be resolved.
|
| - * This method should execute quickly and not block waiting for any analysis.
|
| - * Returns `true` if the computer's work is complete
|
| - * or `false` if [computeFull] should be called to complete the work.
|
| - */
|
| - bool computeFast(DartCompletionRequest request);
|
| -
|
| - /**
|
| - * Computes the complete set of [CompletionSuggestion]s based on
|
| - * the given completion context. The compilation unit and completion node
|
| - * in the given completion context are resolved.
|
| - * Returns `true` if the receiver modified the list of suggestions.
|
| - */
|
| - Future<bool> computeFull(DartCompletionRequest request);
|
| -}
|
| -
|
| -/**
|
| - * Manages code completion for a given Dart file completion request.
|
| - */
|
| -class DartCompletionManager extends CompletionManager {
|
| - final AnalysisContext context;
|
| - final Source source;
|
| - final int offset;
|
| - DartCompletionRequest request;
|
| - List<DartCompletionComputer> computers;
|
| -
|
| - DartCompletionManager(this.context, SearchEngine searchEngine, this.source,
|
| - this.offset) {
|
| - request = new DartCompletionRequest(context, searchEngine, source, offset);
|
| - }
|
| -
|
| - @override
|
| - void compute() {
|
| - initComputers();
|
| - computeFast();
|
| - if (!computers.isEmpty) {
|
| - computeFull();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Compute suggestions based upon cached information only
|
| - * then send an initial response to the client.
|
| - */
|
| - void computeFast() {
|
| - CompilationUnit unit = context.parseCompilationUnit(source);
|
| - request.unit = unit;
|
| - request.node = new NodeLocator.con1(offset).searchWithin(unit);
|
| - computers.removeWhere((DartCompletionComputer c) => c.computeFast(request));
|
| - sendResults(computers.isEmpty);
|
| - }
|
| -
|
| - /**
|
| - * If there is remaining work to be done, then wait for the unit to be
|
| - * resolved and request that each remaining computer finish their work.
|
| - */
|
| - void computeFull() {
|
| - waitForAnalysis().then((CompilationUnit unit) {
|
| - if (unit == null) {
|
| - sendResults(true);
|
| - return;
|
| - }
|
| - request.unit = unit;
|
| - request.node = new NodeLocator.con1(offset).searchWithin(unit);
|
| - int count = computers.length;
|
| - computers.forEach((c) {
|
| - c.computeFull(request).then((bool changed) {
|
| - var last = --count == 0;
|
| - if (changed || last) {
|
| - sendResults(last);
|
| - }
|
| - });
|
| - });
|
| - });
|
| - }
|
| -
|
| - /**
|
| - * Build and initialize the list of completion computers
|
| - */
|
| - void initComputers() {
|
| - if (computers == null) {
|
| - computers = [
|
| - new KeywordComputer(),
|
| - new LocalComputer(),
|
| - new ImportedTypeComputer(),
|
| - new InvocationComputer()];
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Send the current list of suggestions to the client.
|
| - */
|
| - void sendResults(bool last) {
|
| - controller.add(
|
| - new CompletionResult(request.offset, 0, request.suggestions, last));
|
| - if (last) {
|
| - controller.close();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Return a future that completes when analysis is complete.
|
| - * Return `true` if the compilation unit is be resolved.
|
| - */
|
| - Future<CompilationUnit> waitForAnalysis() {
|
| - LibraryElement library = context.getLibraryElement(source);
|
| - if (library != null) {
|
| - CompilationUnit unit =
|
| - context.getResolvedCompilationUnit(source, library);
|
| - if (unit != null) {
|
| - return new Future.value(unit);
|
| - }
|
| - }
|
| - //TODO (danrubel) Determine if analysis is complete but unit not resolved
|
| - return new Future(waitForAnalysis);
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * The context in which the completion is requested.
|
| - */
|
| -class DartCompletionRequest {
|
| - /**
|
| - * The analysis context in which the completion is requested.
|
| - */
|
| - final AnalysisContext context;
|
| -
|
| - /**
|
| - * The search engine for use when building suggestions.
|
| - */
|
| - final SearchEngine searchEngine;
|
| -
|
| - /**
|
| - * The source in which the completion is requested.
|
| - */
|
| - final Source source;
|
| -
|
| - /**
|
| - * The offset within the source at which the completion is requested.
|
| - */
|
| - final int offset;
|
| -
|
| - /**
|
| - * The compilation unit in which the completion was requested. This unit
|
| - * may or may not be resolved when [DartCompletionComputer.computeFast]
|
| - * is called but is resolved when [DartCompletionComputer.computeFull].
|
| - */
|
| - CompilationUnit unit;
|
| -
|
| - /**
|
| - * The node in which the completion occurred. This node
|
| - * may or may not be resolved when [DartCompletionComputer.computeFast]
|
| - * is called but is resolved when [DartCompletionComputer.computeFull].
|
| - */
|
| - AstNode node;
|
| -
|
| - /**
|
| - * The list of suggestions to be sent to the client.
|
| - */
|
| - final List<CompletionSuggestion> suggestions = [];
|
| -
|
| - DartCompletionRequest(this.context, this.searchEngine, this.source,
|
| - this.offset);
|
| -}
|
|
|