| Index: pkg/analysis_server/lib/src/search/search_domain.dart
|
| diff --git a/pkg/analysis_server/lib/src/domain_search.dart b/pkg/analysis_server/lib/src/search/search_domain.dart
|
| similarity index 54%
|
| rename from pkg/analysis_server/lib/src/domain_search.dart
|
| rename to pkg/analysis_server/lib/src/search/search_domain.dart
|
| index 8b1a2b235932c0aae2b35ed5da41b79acb63703d..f7bab4130e627939bf5037a5e57a07220c10c17a 100644
|
| --- a/pkg/analysis_server/lib/src/domain_search.dart
|
| +++ b/pkg/analysis_server/lib/src/search/search_domain.dart
|
| @@ -2,11 +2,17 @@
|
| // 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 domain.search;
|
| +library search.domain;
|
| +
|
| +import 'dart:async';
|
|
|
| import 'package:analysis_server/src/analysis_server.dart';
|
| +import 'package:analysis_server/src/search/element_references.dart';
|
| +import 'package:analysis_server/src/search/search_result.dart';
|
| import 'package:analysis_server/src/constants.dart';
|
| import 'package:analysis_server/src/protocol.dart';
|
| +import 'package:analysis_services/search/search_engine.dart';
|
| +import 'package:analyzer/src/generated/element.dart';
|
|
|
| /**
|
| * Instances of the class [SearchDomainHandler] implement a [RequestHandler]
|
| @@ -19,41 +25,45 @@ class SearchDomainHandler implements RequestHandler {
|
| final AnalysisServer server;
|
|
|
| /**
|
| - * Initialize a newly created handler to handle requests for the given [server].
|
| + * The [SearchEngine] for this server.
|
| */
|
| - SearchDomainHandler(this.server);
|
| + SearchEngine searchEngine;
|
|
|
| - @override
|
| - Response handleRequest(Request request) {
|
| - try {
|
| - String requestName = request.method;
|
| - if (requestName == SEARCH_FIND_ELEMENT_REFERENCES) {
|
| - return findElementReferences(request);
|
| - } else if (requestName == SEARCH_FIND_MEMBER_DECLARATIONS) {
|
| - return findMemberDeclarations(request);
|
| - } else if (requestName == SEARCH_FIND_MEMBER_REFERENCES) {
|
| - return findMemberReferences(request);
|
| - } else if (requestName == SEARCH_FIND_TOP_LEVEL_DECLARATIONS) {
|
| - return findTopLevelDeclarations(request);
|
| - }
|
| - } on RequestFailure catch (exception) {
|
| - return exception.response;
|
| - }
|
| - return null;
|
| + /**
|
| + * The next searc response id.
|
| + */
|
| + int _nextSearchId = 0;
|
| +
|
| + /**
|
| + * Initialize a newly created handler to handle requests for the given [server].
|
| + */
|
| + SearchDomainHandler(this.server) {
|
| + searchEngine = server.searchEngine;
|
| }
|
|
|
| Response findElementReferences(Request request) {
|
| - // file
|
| - RequestDatum fileDatum = request.getRequiredParameter(FILE);
|
| - String file = fileDatum.asString();
|
| - // offset
|
| - RequestDatum offsetDatum = request.getRequiredParameter(OFFSET);
|
| - int offset = offsetDatum.asInt();
|
| - // includePotential
|
| - RequestDatum includePotentialDatum = request.getRequiredParameter(LENGTH);
|
| - bool includePotential = includePotentialDatum.asBool();
|
| - // TODO(brianwilkerson) implement
|
| - return null;
|
| + String file = request.getRequiredParameter(FILE).asString();
|
| + int offset = request.getRequiredParameter(OFFSET).asInt();
|
| + bool includePotential =
|
| + request.getRequiredParameter(INCLUDE_POTENTIAL).asBool();
|
| + // schedule search
|
| + String searchId = (_nextSearchId++).toString();
|
| + List<Element> elements = server.getElementsAtOffset(file, offset);
|
| + elements.forEach((Element element) {
|
| + var computer = new ElementReferencesComputer(searchEngine);
|
| + var future = computer.compute(element, includePotential);
|
| + return future.then((List<SearchResult> results) {
|
| + bool isLast = identical(element, elements.last);
|
| + _sendSearchNotification(searchId, isLast, results);
|
| + });
|
| + });
|
| + if (elements.isEmpty) {
|
| + new Future.microtask(() {
|
| + _sendSearchNotification(searchId, true, []);
|
| + });
|
| + }
|
| + // respond
|
| + return new Response(request.id)..setResult(ID, searchId);
|
| }
|
|
|
| Response findMemberDeclarations(Request request) {
|
| @@ -79,4 +89,34 @@ class SearchDomainHandler implements RequestHandler {
|
| // TODO(brianwilkerson) implement
|
| return null;
|
| }
|
| +
|
| + @override
|
| + Response handleRequest(Request request) {
|
| + try {
|
| + String requestName = request.method;
|
| + if (requestName == SEARCH_FIND_ELEMENT_REFERENCES) {
|
| + return findElementReferences(request);
|
| + } else if (requestName == SEARCH_FIND_MEMBER_DECLARATIONS) {
|
| + return findMemberDeclarations(request);
|
| + } else if (requestName == SEARCH_FIND_MEMBER_REFERENCES) {
|
| + return findMemberReferences(request);
|
| + } else if (requestName == SEARCH_FIND_TOP_LEVEL_DECLARATIONS) {
|
| + return findTopLevelDeclarations(request);
|
| + }
|
| + } on RequestFailure catch (exception) {
|
| + return exception.response;
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + void _sendSearchNotification(String searchId, bool isLast,
|
| + List<SearchResult> results) {
|
| + Notification notification = new Notification(SEARCH_RESULTS);
|
| + notification.setParameter(ID, searchId);
|
| + notification.setParameter(LAST, isLast);
|
| + notification.setParameter(
|
| + RESULTS,
|
| + results.map(SearchResult.asJson).toList());
|
| + server.sendNotification(notification);
|
| + }
|
| }
|
|
|