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

Unified Diff: pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart

Issue 723263004: make completion managers responsible for their own caches (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: merge Created 6 years 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_server/lib/src/services/completion/dart_completion_manager.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
index 217ee6cdc407bdf54bb44fced4b53244e05b7fe5..9d22b4ec4db6beab0b3f7879576ef1a020900a17 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart
@@ -48,17 +48,14 @@ abstract class DartCompletionComputer {
* Manages code completion for a given Dart file completion request.
*/
class DartCompletionManager extends CompletionManager {
- final DartCompletionRequest request;
- final AnalysisContext context;
- final Source source;
- final int offset;
- final CompletionPerformance performance;
+ final SearchEngine searchEngine;
final DartCompletionCache cache;
List<DartCompletionComputer> computers;
- DartCompletionManager(this.request, this.context, this.source, this.offset,
- this.cache, this.performance)
- : computers = [
+ DartCompletionManager(AnalysisContext context, this.searchEngine,
+ Source source, this.cache)
+ : super(context, source),
+ computers = [
new KeywordComputer(),
new LocalComputer(),
new ArgListComputer(),
@@ -70,8 +67,7 @@ class DartCompletionManager extends CompletionManager {
* Create a new initialized Dart source completion manager
*/
factory DartCompletionManager.create(AnalysisContext context,
- SearchEngine searchEngine, Source source, int offset, CompletionCache oldCache,
- CompletionPerformance performance) {
+ SearchEngine searchEngine, Source source, CompletionCache oldCache) {
DartCompletionCache newCache;
if (oldCache is DartCompletionCache) {
if (oldCache.context == context && oldCache.source == source) {
@@ -81,24 +77,22 @@ class DartCompletionManager extends CompletionManager {
if (newCache == null) {
newCache = new DartCompletionCache(context, source);
}
- return new DartCompletionManager(
- new DartCompletionRequest(context, searchEngine, source, offset, newCache),
- context,
- source,
- offset,
- newCache,
- performance);
+ return new DartCompletionManager(context, searchEngine, source, newCache);
}
@override
- CompletionCache get completionCache => cache;
-
- @override
- void compute() {
- performance.logElapseTime('compute', () {
- computeFast();
+ void compute(CompletionRequest completionRequest) {
+ DartCompletionRequest request = new DartCompletionRequest(
+ context,
+ searchEngine,
+ source,
+ completionRequest.offset,
+ cache,
+ completionRequest.performance);
+ request.performance.logElapseTime('compute', () {
+ computeFast(request);
if (!computers.isEmpty) {
- computeFull();
+ computeFull(request);
}
});
}
@@ -107,18 +101,20 @@ class DartCompletionManager extends CompletionManager {
* Compute suggestions based upon cached information only
* then send an initial response to the client.
*/
- void computeFast() {
- performance.logElapseTime('computeFast', () {
+ void computeFast(DartCompletionRequest request) {
+ request.performance.logElapseTime('computeFast', () {
CompilationUnit unit = context.parseCompilationUnit(source);
request.unit = unit;
- request.node = new NodeLocator.con1(offset).searchWithin(unit);
+ request.node = new NodeLocator.con1(request.offset).searchWithin(unit);
request.node.accept(new _ReplacementOffsetBuilder(request));
computers.removeWhere((DartCompletionComputer c) {
- return performance.logElapseTime('computeFast ${c.runtimeType}', () {
+ return request.performance.logElapseTime(
+ 'computeFast ${c.runtimeType}',
+ () {
return c.computeFast(request);
});
});
- sendResults(computers.isEmpty);
+ sendResults(request, computers.isEmpty);
});
}
@@ -126,28 +122,28 @@ class DartCompletionManager extends CompletionManager {
* 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() {
- performance.logStartTime('waitForAnalysis');
+ void computeFull(DartCompletionRequest request) {
+ request.performance.logStartTime('waitForAnalysis');
waitForAnalysis().then((CompilationUnit unit) {
- performance.logElapseTime('waitForAnalysis');
+ request.performance.logElapseTime('waitForAnalysis');
if (unit == null) {
- sendResults(true);
+ sendResults(request, true);
return;
}
- performance.logElapseTime('computeFull', () {
+ request.performance.logElapseTime('computeFull', () {
request.unit = unit;
- request.node = new NodeLocator.con1(offset).searchWithin(unit);
+ request.node = new NodeLocator.con1(request.offset).searchWithin(unit);
int count = computers.length;
computers.forEach((DartCompletionComputer c) {
String name = c.runtimeType.toString();
String completeTag = 'computeFull $name complete';
- performance.logStartTime(completeTag);
- performance.logElapseTime('computeFull $name', () {
+ request.performance.logStartTime(completeTag);
+ request.performance.logElapseTime('computeFull $name', () {
c.computeFull(request).then((bool changed) {
- performance.logElapseTime(completeTag);
+ request.performance.logElapseTime(completeTag);
bool last = --count == 0;
if (changed || last) {
- sendResults(last);
+ sendResults(request, last);
}
});
});
@@ -159,7 +155,7 @@ class DartCompletionManager extends CompletionManager {
/**
* Send the current list of suggestions to the client.
*/
- void sendResults(bool last) {
+ void sendResults(DartCompletionRequest request, bool last) {
controller.add(
new CompletionResult(
request.replacementOffset,
@@ -192,7 +188,7 @@ class DartCompletionManager extends CompletionManager {
/**
* The context in which the completion is requested.
*/
-class DartCompletionRequest {
+class DartCompletionRequest extends CompletionRequest {
/**
* The analysis context in which the completion is requested.
*/
@@ -209,11 +205,6 @@ class DartCompletionRequest {
final Source source;
/**
- * The offset within the source at which the completion is requested.
- */
- final int offset;
-
- /**
* Cached information from a prior code completion operation.
*/
final DartCompletionCache cache;
@@ -254,7 +245,8 @@ class DartCompletionRequest {
final List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
DartCompletionRequest(this.context, this.searchEngine, this.source,
- this.offset, this.cache);
+ int offset, this.cache, CompletionPerformance performance)
+ : super(offset, performance);
}
/**

Powered by Google App Engine
This is Rietveld 408576698