refactor ContributionSorter to use new API
move CompletionTarget to public API modify DartCompletionRequest to return completion target R=brianwilkerson@google.com Review URL: https://codereview.chromium.org//1347283005 .
This commit is contained in:
@@ -9,6 +9,7 @@ import 'package:analysis_server/src/protocol.dart';
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
import 'package:analyzer/src/generated/engine.dart';
|
||||
import 'package:analyzer/src/generated/source.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
|
||||
/**
|
||||
* An object used to produce completions for a specific error within a Dart
|
||||
@@ -78,7 +79,7 @@ abstract class DartCompletionRequest extends CompletionRequest {
|
||||
* Return the completion target. This determines what part of the parse tree
|
||||
* will receive the newly inserted text.
|
||||
*/
|
||||
//CompletionTarget get target;
|
||||
CompletionTarget get target;
|
||||
|
||||
/**
|
||||
* Information about the types of suggestions that should be included.
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
|
||||
library services.completion.computer.dart.relevance;
|
||||
|
||||
import 'package:analysis_server/completion/completion_dart.dart';
|
||||
import 'package:analysis_server/src/protocol_server.dart' as protocol;
|
||||
import 'package:analysis_server/src/protocol_server.dart'
|
||||
show CompletionSuggestion, CompletionSuggestionKind;
|
||||
import 'package:analysis_server/src/services/completion/contribution_sorter.dart';
|
||||
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
|
||||
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart'
|
||||
show DART_RELEVANCE_COMMON_USAGE;
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
import 'package:analyzer/src/generated/element.dart';
|
||||
|
||||
@@ -31,8 +33,9 @@ class CommonUsageComputer implements ContributionSorter {
|
||||
CommonUsageComputer([this.selectorRelevance = defaultSelectorRelevance]);
|
||||
|
||||
@override
|
||||
void sort(DartCompletionRequest request) {
|
||||
_update(request);
|
||||
void sort(DartCompletionRequest request,
|
||||
Iterable<CompletionSuggestion> suggestions) {
|
||||
_update(request, suggestions);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -40,7 +43,8 @@ class CommonUsageComputer implements ContributionSorter {
|
||||
* The compilation unit and completion node
|
||||
* in the given completion context may not be resolved.
|
||||
*/
|
||||
void _update(DartCompletionRequest request) {
|
||||
void _update(DartCompletionRequest request,
|
||||
Iterable<CompletionSuggestion> suggestions) {
|
||||
var visitor = new _BestTypeVisitor(request.target.entity);
|
||||
DartType type = request.target.containingNode.accept(visitor);
|
||||
if (type != null) {
|
||||
@@ -48,7 +52,7 @@ class CommonUsageComputer implements ContributionSorter {
|
||||
if (typeElem != null) {
|
||||
LibraryElement libElem = typeElem.library;
|
||||
if (libElem != null) {
|
||||
_updateInvocationRelevance(request, type, libElem);
|
||||
_updateInvocationRelevance(request, type, libElem, suggestions);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -58,12 +62,12 @@ class CommonUsageComputer implements ContributionSorter {
|
||||
* Adjusts the relevance of all method suggestions based upon the given
|
||||
* target type and library.
|
||||
*/
|
||||
void _updateInvocationRelevance(
|
||||
DartCompletionRequest request, DartType type, LibraryElement libElem) {
|
||||
void _updateInvocationRelevance(DartCompletionRequest request, DartType type,
|
||||
LibraryElement libElem, Iterable<CompletionSuggestion> suggestions) {
|
||||
String typeName = type.name;
|
||||
List<String> selectors = selectorRelevance['${libElem.name}.${typeName}'];
|
||||
if (selectors != null) {
|
||||
for (CompletionSuggestion suggestion in request.suggestions) {
|
||||
for (CompletionSuggestion suggestion in suggestions) {
|
||||
protocol.Element element = suggestion.element;
|
||||
if (element != null &&
|
||||
(element.kind == protocol.ElementKind.CONSTRUCTOR ||
|
||||
|
||||
@@ -6,6 +6,7 @@ library analysis_server.src.services.completion.completion_dart;
|
||||
|
||||
import 'package:analysis_server/completion/completion_core.dart';
|
||||
import 'package:analysis_server/completion/completion_dart.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
import 'package:analysis_server/src/services/completion/completion_core.dart';
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
|
||||
@@ -24,11 +25,17 @@ class DartCompletionRequestImpl extends CompletionRequestImpl
|
||||
*/
|
||||
final bool isResolved;
|
||||
|
||||
/**
|
||||
* The completion target. This determines what part of the parse tree
|
||||
* will receive the newly inserted text.
|
||||
*/
|
||||
final CompletionTarget target;
|
||||
|
||||
/**
|
||||
* Initialize a newly created completion request based on the given arguments.
|
||||
*/
|
||||
DartCompletionRequestImpl(
|
||||
CompletionRequest request, this.unit, this.isResolved)
|
||||
CompletionRequest request, this.unit, this.isResolved, this.target)
|
||||
: super(request.context, request.resourceProvider, request.source,
|
||||
request.offset);
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
|
||||
library services.completion.sorter;
|
||||
|
||||
import 'package:analysis_server/completion/completion_dart.dart';
|
||||
import 'package:analysis_server/src/protocol.dart';
|
||||
import 'package:analysis_server/src/services/completion/dart_completion_manager.dart';
|
||||
|
||||
/**
|
||||
* The abstract class `ContributionSorter` defines the behavior of objects
|
||||
@@ -21,5 +21,6 @@ abstract class ContributionSorter {
|
||||
* in the given completion context may not be resolved.
|
||||
* This method should execute quickly and not block.
|
||||
*/
|
||||
void sort(DartCompletionRequest request);
|
||||
void sort(DartCompletionRequest request,
|
||||
Iterable<CompletionSuggestion> suggestions);
|
||||
}
|
||||
|
||||
@@ -9,13 +9,13 @@ import 'dart:async';
|
||||
import 'package:analysis_server/completion/completion_core.dart'
|
||||
show CompletionRequest;
|
||||
import 'package:analysis_server/completion/completion_dart.dart' as newApi;
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
import 'package:analysis_server/src/analysis_server.dart';
|
||||
import 'package:analysis_server/src/protocol.dart';
|
||||
import 'package:analysis_server/src/services/completion/arglist_contributor.dart';
|
||||
import 'package:analysis_server/src/services/completion/combinator_contributor.dart';
|
||||
import 'package:analysis_server/src/services/completion/common_usage_computer.dart';
|
||||
import 'package:analysis_server/src/services/completion/completion_manager.dart';
|
||||
import 'package:analysis_server/src/services/completion/completion_target.dart';
|
||||
import 'package:analysis_server/src/services/completion/contribution_sorter.dart';
|
||||
import 'package:analysis_server/src/services/completion/dart_completion_cache.dart';
|
||||
import 'package:analysis_server/src/services/completion/imported_reference_contributor.dart';
|
||||
@@ -180,7 +180,8 @@ class DartCompletionManager extends CompletionManager {
|
||||
return c.computeFast(request);
|
||||
});
|
||||
});
|
||||
contributionSorter.sort(request);
|
||||
contributionSorter.sort(
|
||||
new OldRequestWrapper(request), request.suggestions);
|
||||
sendResults(request, todo.isEmpty);
|
||||
return todo;
|
||||
});
|
||||
@@ -218,7 +219,8 @@ class DartCompletionManager extends CompletionManager {
|
||||
performance.logElapseTime(completeTag);
|
||||
bool last = --count == 0;
|
||||
if (changed || last) {
|
||||
contributionSorter.sort(request);
|
||||
contributionSorter.sort(
|
||||
new OldRequestWrapper(request), request.suggestions);
|
||||
sendResults(request, last);
|
||||
}
|
||||
});
|
||||
@@ -482,6 +484,9 @@ class OldRequestWrapper implements newApi.DartCompletionRequest {
|
||||
@override
|
||||
Source get source => request.source;
|
||||
|
||||
@override
|
||||
CompletionTarget get target => request.target;
|
||||
|
||||
@override
|
||||
CompilationUnit get unit => request.unit;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
library services.completion.dart.optype;
|
||||
|
||||
import 'package:analysis_server/src/services/completion/completion_target.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
import 'package:analyzer/src/generated/scanner.dart';
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import 'dart:async';
|
||||
|
||||
import 'package:analysis_server/completion/completion_core.dart'
|
||||
show CompletionRequest, CompletionResult;
|
||||
import 'package:analysis_server/completion/completion_dart.dart' as newApi;
|
||||
import 'package:analysis_server/src/analysis_server.dart';
|
||||
import 'package:analysis_server/src/channel/channel.dart';
|
||||
import 'package:analysis_server/src/constants.dart';
|
||||
@@ -481,7 +482,7 @@ class CompletionTest extends AbstractAnalysisTest {
|
||||
expect(suggestions.any((s) => s.relevance == DART_RELEVANCE_COMMON_USAGE),
|
||||
isFalse);
|
||||
DartCompletionManager.defaultContributionSorter = originalSorter;
|
||||
expect(mockSorter.count, 2);
|
||||
mockSorter.enabled = false;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -715,11 +716,12 @@ class MockContext implements AnalysisContext {
|
||||
}
|
||||
|
||||
class MockRelevancySorter implements ContributionSorter {
|
||||
int count = 0;
|
||||
bool enabled = true;
|
||||
|
||||
@override
|
||||
void sort(DartCompletionRequest request) {
|
||||
if (++count > 2) {
|
||||
void sort(newApi.DartCompletionRequest request,
|
||||
List<CompletionSuggestion> suggestions) {
|
||||
if (!enabled) {
|
||||
throw 'unexpected sort';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
library test.services.completion.target;
|
||||
|
||||
import 'package:analysis_server/src/services/completion/completion_target.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
import 'package:analyzer/src/generated/source.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
@@ -12,7 +12,7 @@ import 'package:analysis_server/src/protocol.dart' as protocol
|
||||
import 'package:analysis_server/src/protocol.dart' hide Element, ElementKind;
|
||||
import 'package:analysis_server/src/services/completion/common_usage_computer.dart';
|
||||
import 'package:analysis_server/src/services/completion/completion_manager.dart';
|
||||
import 'package:analysis_server/src/services/completion/completion_target.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
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/imported_reference_contributor.dart';
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
library test.services.completion.contributor.dart.optype;
|
||||
|
||||
import 'package:analysis_server/src/services/completion/completion_target.dart';
|
||||
import 'package:analysis_server/completion/dart/completion_target.dart';
|
||||
import 'package:analysis_server/src/services/completion/optype.dart';
|
||||
import 'package:analyzer/src/generated/ast.dart';
|
||||
import 'package:analyzer/src/generated/engine.dart';
|
||||
|
||||
Reference in New Issue
Block a user