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

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

Issue 492563002: Make more use of generated classes in analysis server. (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 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 search.domain; 5 library search.domain;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:analysis_server/src/analysis_server.dart'; 9 import 'package:analysis_server/src/analysis_server.dart';
10 import 'package:analysis_server/src/computer/element.dart' as se; 10 import 'package:analysis_server/src/computer/element.dart' as se;
11 import 'package:analysis_server/src/constants.dart'; 11 import 'package:analysis_server/src/constants.dart';
12 import 'package:analysis_server/src/protocol.dart'; 12 import 'package:analysis_server/src/protocol.dart';
13 import 'package:analysis_server/src/protocol2.dart' show
14 SearchFindElementReferencesParams, SearchFindMemberDeclarationsParams,
15 SearchFindMemberReferencesParams, SearchFindTopLevelDeclarationsParams,
16 SearchGetTypeHierarchyParams;
13 import 'package:analysis_server/src/search/element_references.dart'; 17 import 'package:analysis_server/src/search/element_references.dart';
14 import 'package:analysis_server/src/search/search_result.dart'; 18 import 'package:analysis_server/src/search/search_result.dart';
15 import 'package:analysis_server/src/search/type_hierarchy.dart'; 19 import 'package:analysis_server/src/search/type_hierarchy.dart';
16 import 'package:analysis_server/src/services/json.dart'; 20 import 'package:analysis_server/src/services/json.dart';
17 import 'package:analysis_server/src/services/search/search_engine.dart'; 21 import 'package:analysis_server/src/services/search/search_engine.dart';
18 import 'package:analyzer/src/generated/element.dart'; 22 import 'package:analyzer/src/generated/element.dart';
19 23
20 /** 24 /**
21 * Instances of the class [SearchDomainHandler] implement a [RequestHandler] 25 * Instances of the class [SearchDomainHandler] implement a [RequestHandler]
22 * that handles requests in the search domain. 26 * that handles requests in the search domain.
(...skipping 15 matching lines...) Expand all
38 int _nextSearchId = 0; 42 int _nextSearchId = 0;
39 43
40 /** 44 /**
41 * Initialize a newly created handler to handle requests for the given [server ]. 45 * Initialize a newly created handler to handle requests for the given [server ].
42 */ 46 */
43 SearchDomainHandler(this.server) { 47 SearchDomainHandler(this.server) {
44 searchEngine = server.searchEngine; 48 searchEngine = server.searchEngine;
45 } 49 }
46 50
47 Response findElementReferences(Request request) { 51 Response findElementReferences(Request request) {
48 String file = request.getRequiredParameter(FILE).asString(); 52 var params = new SearchFindElementReferencesParams.fromRequest(request);
49 int offset = request.getRequiredParameter(OFFSET).asInt();
50 bool includePotential =
51 request.getRequiredParameter(INCLUDE_POTENTIAL).asBool();
52 // prepare elements 53 // prepare elements
53 List<Element> elements = server.getElementsAtOffset(file, offset); 54 List<Element> elements = server.getElementsAtOffset(params.file,
55 params.offset);
54 elements = elements.map((Element element) { 56 elements = elements.map((Element element) {
55 if (element is FieldFormalParameterElement) { 57 if (element is FieldFormalParameterElement) {
56 return element.field; 58 return element.field;
57 } 59 }
58 if (element is PropertyAccessorElement) { 60 if (element is PropertyAccessorElement) {
59 return element.variable; 61 return element.variable;
60 } 62 }
61 return element; 63 return element;
62 }).toList(); 64 }).toList();
63 // schedule search 65 // schedule search
64 String searchId = (_nextSearchId++).toString(); 66 String searchId = (_nextSearchId++).toString();
65 elements.forEach((Element element) { 67 elements.forEach((Element element) {
66 var computer = new ElementReferencesComputer(searchEngine); 68 var computer = new ElementReferencesComputer(searchEngine);
67 var future = computer.compute(element, includePotential); 69 var future = computer.compute(element, params.includePotential);
68 future.then((List<SearchResult> results) { 70 future.then((List<SearchResult> results) {
69 bool isLast = identical(element, elements.last); 71 bool isLast = identical(element, elements.last);
70 _sendSearchNotification(searchId, isLast, results); 72 _sendSearchNotification(searchId, isLast, results);
71 }); 73 });
72 }); 74 });
73 if (elements.isEmpty) { 75 if (elements.isEmpty) {
74 new Future.microtask(() { 76 new Future.microtask(() {
75 _sendSearchNotification(searchId, true, []); 77 _sendSearchNotification(searchId, true, []);
76 }); 78 });
77 } 79 }
78 // respond 80 // respond
79 Response response = new Response(request.id); 81 Response response = new Response(request.id);
80 response.setResult(ID, searchId); 82 response.setResult(ID, searchId);
81 if (elements.isNotEmpty) { 83 if (elements.isNotEmpty) {
82 var serverElement = new se.Element.fromEngine(elements[0]); 84 var serverElement = new se.Element.fromEngine(elements[0]);
83 response.setResult(ELEMENT, objectToJson(serverElement)); 85 response.setResult(ELEMENT, serverElement.toJson());
84 } 86 }
85 return response; 87 return response;
86 } 88 }
87 89
88 Response findMemberDeclarations(Request request) { 90 Response findMemberDeclarations(Request request) {
89 String name = request.getRequiredParameter(NAME).asString(); 91 var params = new SearchFindMemberDeclarationsParams.fromRequest(request);
90 // schedule search 92 // schedule search
91 String searchId = (_nextSearchId++).toString(); 93 String searchId = (_nextSearchId++).toString();
92 { 94 {
93 var matchesFuture = searchEngine.searchMemberDeclarations(name); 95 var matchesFuture = searchEngine.searchMemberDeclarations(params.name);
94 matchesFuture.then((List<SearchMatch> matches) { 96 matchesFuture.then((List<SearchMatch> matches) {
95 _sendSearchNotification(searchId, true, matches.map(toResult)); 97 _sendSearchNotification(searchId, true, matches.map(toResult));
96 }); 98 });
97 } 99 }
98 // respond 100 // respond
99 return new Response(request.id)..setResult(ID, searchId); 101 return new Response(request.id)..setResult(ID, searchId);
100 } 102 }
101 103
102 Response findMemberReferences(Request request) { 104 Response findMemberReferences(Request request) {
103 String name = request.getRequiredParameter(NAME).asString(); 105 var params = new SearchFindMemberReferencesParams.fromRequest(request);
104 // schedule search 106 // schedule search
105 String searchId = (_nextSearchId++).toString(); 107 String searchId = (_nextSearchId++).toString();
106 { 108 {
107 var matchesFuture = searchEngine.searchMemberReferences(name); 109 var matchesFuture = searchEngine.searchMemberReferences(params.name);
108 matchesFuture.then((List<SearchMatch> matches) { 110 matchesFuture.then((List<SearchMatch> matches) {
109 _sendSearchNotification(searchId, true, matches.map(toResult)); 111 _sendSearchNotification(searchId, true, matches.map(toResult));
110 }); 112 });
111 } 113 }
112 // respond 114 // respond
113 return new Response(request.id)..setResult(ID, searchId); 115 return new Response(request.id)..setResult(ID, searchId);
114 } 116 }
115 117
116 Response findTopLevelDeclarations(Request request) { 118 Response findTopLevelDeclarations(Request request) {
117 String pattern = request.getRequiredParameter(PATTERN).asString(); 119 var params = new SearchFindTopLevelDeclarationsParams.fromRequest(request);
118 // schedule search 120 // schedule search
119 String searchId = (_nextSearchId++).toString(); 121 String searchId = (_nextSearchId++).toString();
120 { 122 {
121 var matchesFuture = searchEngine.searchTopLevelDeclarations(pattern); 123 var matchesFuture = searchEngine.searchTopLevelDeclarations(params.pattern );
122 matchesFuture.then((List<SearchMatch> matches) { 124 matchesFuture.then((List<SearchMatch> matches) {
123 _sendSearchNotification(searchId, true, matches.map(toResult)); 125 _sendSearchNotification(searchId, true, matches.map(toResult));
124 }); 126 });
125 } 127 }
126 // respond 128 // respond
127 return new Response(request.id)..setResult(ID, searchId); 129 return new Response(request.id)..setResult(ID, searchId);
128 } 130 }
129 131
130 /** 132 /**
131 * Implement the `search.getTypeHierarchy` request. 133 * Implement the `search.getTypeHierarchy` request.
132 */ 134 */
133 Response getTypeHierarchy(Request request) { 135 Response getTypeHierarchy(Request request) {
136 var params = new SearchGetTypeHierarchyParams.fromRequest(request);
134 // prepare parameters 137 // prepare parameters
135 String file = request.getRequiredParameter(FILE).asString();
136 int offset = request.getRequiredParameter(OFFSET).asInt();
137 // prepare Element 138 // prepare Element
138 List<Element> elements = server.getElementsAtOffset(file, offset); 139 List<Element> elements = server.getElementsAtOffset(params.file,
140 params.offset);
139 Response response = new Response(request.id); 141 Response response = new Response(request.id);
140 if (elements.isEmpty) { 142 if (elements.isEmpty) {
141 response.setEmptyResult(); 143 response.setEmptyResult();
142 return response; 144 return response;
143 } 145 }
144 Element element = elements.first; 146 Element element = elements.first;
145 // prepare type hierarchy 147 // prepare type hierarchy
146 TypeHierarchyComputer computer = new TypeHierarchyComputer(searchEngine); 148 TypeHierarchyComputer computer = new TypeHierarchyComputer(searchEngine);
147 computer.compute(element).then((List<TypeHierarchyItem> items) { 149 computer.compute(element).then((List<TypeHierarchyItem> items) {
148 if (items != null) { 150 if (items != null) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 notification.setParameter(ID, searchId); 185 notification.setParameter(ID, searchId);
184 notification.setParameter(LAST, isLast); 186 notification.setParameter(LAST, isLast);
185 notification.setParameter(RESULTS, objectToJson(results)); 187 notification.setParameter(RESULTS, objectToJson(results));
186 server.sendNotification(notification); 188 server.sendNotification(notification);
187 } 189 }
188 190
189 static SearchResult toResult(SearchMatch match) { 191 static SearchResult toResult(SearchMatch match) {
190 return new SearchResult.fromMatch(match); 192 return new SearchResult.fromMatch(match);
191 } 193 }
192 } 194 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698