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

Side by Side Diff: pkg/analysis_server/lib/src/search/search_domain.dart

Issue 392693002: Initial implementation for 'search.findElementReferences'. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add comments Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library domain.search; 5 library search.domain;
6
7 import 'dart:async';
6 8
7 import 'package:analysis_server/src/analysis_server.dart'; 9 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/search/element_references.dart';
11 import 'package:analysis_server/src/search/search_result.dart';
8 import 'package:analysis_server/src/constants.dart'; 12 import 'package:analysis_server/src/constants.dart';
9 import 'package:analysis_server/src/protocol.dart'; 13 import 'package:analysis_server/src/protocol.dart';
14 import 'package:analysis_services/search/search_engine.dart';
15 import 'package:analyzer/src/generated/element.dart';
10 16
11 /** 17 /**
12 * Instances of the class [SearchDomainHandler] implement a [RequestHandler] 18 * Instances of the class [SearchDomainHandler] implement a [RequestHandler]
13 * that handles requests in the search domain. 19 * that handles requests in the search domain.
14 */ 20 */
15 class SearchDomainHandler implements RequestHandler { 21 class SearchDomainHandler implements RequestHandler {
16 /** 22 /**
17 * The analysis server that is using this handler to process requests. 23 * The analysis server that is using this handler to process requests.
18 */ 24 */
19 final AnalysisServer server; 25 final AnalysisServer server;
20 26
21 /** 27 /**
28 * The [SearchEngine] for this server.
29 */
30 SearchEngine searchEngine;
31
32 /**
33 * The next searc response id.
34 */
35 int _nextSearchId = 0;
36
37 /**
22 * Initialize a newly created handler to handle requests for the given [server ]. 38 * Initialize a newly created handler to handle requests for the given [server ].
23 */ 39 */
24 SearchDomainHandler(this.server); 40 SearchDomainHandler(this.server) {
25 41 searchEngine = server.searchEngine;
26 @override
27 Response handleRequest(Request request) {
28 try {
29 String requestName = request.method;
30 if (requestName == SEARCH_FIND_ELEMENT_REFERENCES) {
31 return findElementReferences(request);
32 } else if (requestName == SEARCH_FIND_MEMBER_DECLARATIONS) {
33 return findMemberDeclarations(request);
34 } else if (requestName == SEARCH_FIND_MEMBER_REFERENCES) {
35 return findMemberReferences(request);
36 } else if (requestName == SEARCH_FIND_TOP_LEVEL_DECLARATIONS) {
37 return findTopLevelDeclarations(request);
38 }
39 } on RequestFailure catch (exception) {
40 return exception.response;
41 }
42 return null;
43 } 42 }
44 43
45 Response findElementReferences(Request request) { 44 Response findElementReferences(Request request) {
46 // file 45 String file = request.getRequiredParameter(FILE).asString();
47 RequestDatum fileDatum = request.getRequiredParameter(FILE); 46 int offset = request.getRequiredParameter(OFFSET).asInt();
48 String file = fileDatum.asString(); 47 bool includePotential =
49 // offset 48 request.getRequiredParameter(INCLUDE_POTENTIAL).asBool();
50 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); 49 // schedule search
51 int offset = offsetDatum.asInt(); 50 String searchId = (_nextSearchId++).toString();
52 // includePotential 51 List<Element> elements = server.getElementsAtOffset(file, offset);
53 RequestDatum includePotentialDatum = request.getRequiredParameter(LENGTH); 52 elements.forEach((Element element) {
54 bool includePotential = includePotentialDatum.asBool(); 53 var computer = new ElementReferencesComputer(searchEngine);
55 // TODO(brianwilkerson) implement 54 var future = computer.compute(element, includePotential);
56 return null; 55 return future.then((List<SearchResult> results) {
56 bool isLast = identical(element, elements.last);
57 _sendSearchNotification(searchId, isLast, results);
58 });
59 });
60 if (elements.isEmpty) {
61 new Future.microtask(() {
62 _sendSearchNotification(searchId, true, []);
63 });
64 }
65 // respond
66 return new Response(request.id)..setResult(ID, searchId);
57 } 67 }
58 68
59 Response findMemberDeclarations(Request request) { 69 Response findMemberDeclarations(Request request) {
60 // name 70 // name
61 RequestDatum nameDatum = request.getRequiredParameter(FILE); 71 RequestDatum nameDatum = request.getRequiredParameter(FILE);
62 String name = nameDatum.asString(); 72 String name = nameDatum.asString();
63 // TODO(brianwilkerson) implement 73 // TODO(brianwilkerson) implement
64 return null; 74 return null;
65 } 75 }
66 76
67 Response findMemberReferences(Request request) { 77 Response findMemberReferences(Request request) {
68 // name 78 // name
69 RequestDatum nameDatum = request.getRequiredParameter(FILE); 79 RequestDatum nameDatum = request.getRequiredParameter(FILE);
70 String name = nameDatum.asString(); 80 String name = nameDatum.asString();
71 // TODO(brianwilkerson) implement 81 // TODO(brianwilkerson) implement
72 return null; 82 return null;
73 } 83 }
74 84
75 Response findTopLevelDeclarations(Request request) { 85 Response findTopLevelDeclarations(Request request) {
76 // pattern 86 // pattern
77 RequestDatum patternDatum = request.getRequiredParameter(FILE); 87 RequestDatum patternDatum = request.getRequiredParameter(FILE);
78 String pattern = patternDatum.asString(); 88 String pattern = patternDatum.asString();
79 // TODO(brianwilkerson) implement 89 // TODO(brianwilkerson) implement
80 return null; 90 return null;
81 } 91 }
92
93 @override
94 Response handleRequest(Request request) {
95 try {
96 String requestName = request.method;
97 if (requestName == SEARCH_FIND_ELEMENT_REFERENCES) {
98 return findElementReferences(request);
99 } else if (requestName == SEARCH_FIND_MEMBER_DECLARATIONS) {
100 return findMemberDeclarations(request);
101 } else if (requestName == SEARCH_FIND_MEMBER_REFERENCES) {
102 return findMemberReferences(request);
103 } else if (requestName == SEARCH_FIND_TOP_LEVEL_DECLARATIONS) {
104 return findTopLevelDeclarations(request);
105 }
106 } on RequestFailure catch (exception) {
107 return exception.response;
108 }
109 return null;
110 }
111
112 void _sendSearchNotification(String searchId, bool isLast,
113 List<SearchResult> results) {
114 Notification notification = new Notification(SEARCH_RESULTS);
115 notification.setParameter(ID, searchId);
116 notification.setParameter(LAST, isLast);
117 notification.setParameter(
118 RESULTS,
119 results.map(SearchResult.asJson).toList());
120 server.sendNotification(notification);
121 }
82 } 122 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/search/element_references.dart ('k') | pkg/analysis_server/lib/src/search/search_result.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698