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

Unified Diff: pkg/analysis_services/lib/src/completion/dart_completion_manager.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/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);
-}

Powered by Google App Engine
This is Rietveld 408576698