| OLD | NEW |
| 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/constants.dart'; | 10 import 'package:analysis_server/src/constants.dart'; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 String searchId = (_nextSearchId++).toString(); | 54 String searchId = (_nextSearchId++).toString(); |
| 55 var result = new protocol.SearchFindElementReferencesResult(); | 55 var result = new protocol.SearchFindElementReferencesResult(); |
| 56 result.id = searchId; | 56 result.id = searchId; |
| 57 _sendSearchResult(request, result); | 57 _sendSearchResult(request, result); |
| 58 _sendSearchNotification(searchId, true, <protocol.SearchResult>[]); | 58 _sendSearchNotification(searchId, true, <protocol.SearchResult>[]); |
| 59 return; | 59 return; |
| 60 } | 60 } |
| 61 var params = | 61 var params = |
| 62 new protocol.SearchFindElementReferencesParams.fromRequest(request); | 62 new protocol.SearchFindElementReferencesParams.fromRequest(request); |
| 63 await server.onAnalysisComplete; | 63 await server.onAnalysisComplete; |
| 64 // prepare elements | 64 // prepare element |
| 65 List<Element> elements = | 65 Element element = server.getElementAtOffset(params.file, params.offset); |
| 66 server.getElementsAtOffset(params.file, params.offset); | 66 if (element is ImportElement) { |
| 67 elements = elements.map((Element element) { | 67 element = (element as ImportElement).prefix; |
| 68 if (element is ImportElement) { | 68 } |
| 69 return element.prefix; | 69 if (element is FieldFormalParameterElement) { |
| 70 } | 70 element = (element as FieldFormalParameterElement).field; |
| 71 if (element is FieldFormalParameterElement) { | 71 } |
| 72 return element.field; | 72 if (element is PropertyAccessorElement) { |
| 73 } | 73 element = (element as PropertyAccessorElement).variable; |
| 74 if (element is PropertyAccessorElement) { | 74 } |
| 75 return element.variable; | |
| 76 } | |
| 77 return element; | |
| 78 }).where((Element element) { | |
| 79 return element != null; | |
| 80 }).toList(); | |
| 81 // respond | 75 // respond |
| 82 String searchId = (_nextSearchId++).toString(); | 76 String searchId = (_nextSearchId++).toString(); |
| 83 var result = new protocol.SearchFindElementReferencesResult(); | 77 var result = new protocol.SearchFindElementReferencesResult(); |
| 84 if (elements.isNotEmpty) { | 78 if (element != null) { |
| 85 result.id = searchId; | 79 result.id = searchId; |
| 86 result.element = protocol.convertElement(elements.first); | 80 result.element = protocol.convertElement(element); |
| 87 } | 81 } |
| 88 _sendSearchResult(request, result); | 82 _sendSearchResult(request, result); |
| 89 // search elements | 83 // search elements |
| 90 elements.forEach((Element element) async { | 84 var computer = new ElementReferencesComputer(searchEngine); |
| 91 var computer = new ElementReferencesComputer(searchEngine); | 85 List<protocol.SearchResult> results = |
| 92 List<protocol.SearchResult> results = | 86 await computer.compute(element, params.includePotential); |
| 93 await computer.compute(element, params.includePotential); | 87 _sendSearchNotification(searchId, true, results); |
| 94 bool isLast = identical(element, elements.last); | |
| 95 _sendSearchNotification(searchId, isLast, results); | |
| 96 }); | |
| 97 } | 88 } |
| 98 | 89 |
| 99 Future findMemberDeclarations(protocol.Request request) async { | 90 Future findMemberDeclarations(protocol.Request request) async { |
| 100 var params = | 91 var params = |
| 101 new protocol.SearchFindMemberDeclarationsParams.fromRequest(request); | 92 new protocol.SearchFindMemberDeclarationsParams.fromRequest(request); |
| 102 await server.onAnalysisComplete; | 93 await server.onAnalysisComplete; |
| 103 // respond | 94 // respond |
| 104 String searchId = (_nextSearchId++).toString(); | 95 String searchId = (_nextSearchId++).toString(); |
| 105 _sendSearchResult( | 96 _sendSearchResult( |
| 106 request, new protocol.SearchFindMemberDeclarationsResult(searchId)); | 97 request, new protocol.SearchFindMemberDeclarationsResult(searchId)); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 } | 155 } |
| 165 var params = new protocol.SearchGetTypeHierarchyParams.fromRequest(request); | 156 var params = new protocol.SearchGetTypeHierarchyParams.fromRequest(request); |
| 166 String file = params.file; | 157 String file = params.file; |
| 167 // wait for analysis | 158 // wait for analysis |
| 168 if (params.superOnly == true) { | 159 if (params.superOnly == true) { |
| 169 await server.onFileAnalysisComplete(file); | 160 await server.onFileAnalysisComplete(file); |
| 170 } else { | 161 } else { |
| 171 await server.onAnalysisComplete; | 162 await server.onAnalysisComplete; |
| 172 } | 163 } |
| 173 // prepare element | 164 // prepare element |
| 174 List<Element> elements = server.getElementsAtOffset(file, params.offset); | 165 Element element = server.getElementAtOffset(file, params.offset); |
| 175 if (elements.isEmpty) { | 166 if (element == null) { |
| 176 _sendTypeHierarchyNull(request); | 167 _sendTypeHierarchyNull(request); |
| 177 return; | 168 return; |
| 178 } | 169 } |
| 179 Element element = elements.first; | |
| 180 // maybe supertype hierarchy only | 170 // maybe supertype hierarchy only |
| 181 if (params.superOnly == true) { | 171 if (params.superOnly == true) { |
| 182 TypeHierarchyComputer computer = | 172 TypeHierarchyComputer computer = |
| 183 new TypeHierarchyComputer(searchEngine, element); | 173 new TypeHierarchyComputer(searchEngine, element); |
| 184 List<protocol.TypeHierarchyItem> items = computer.computeSuper(); | 174 List<protocol.TypeHierarchyItem> items = computer.computeSuper(); |
| 185 protocol.Response response = | 175 protocol.Response response = |
| 186 new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items) | 176 new protocol.SearchGetTypeHierarchyResult(hierarchyItems: items) |
| 187 .toResponse(request.id); | 177 .toResponse(request.id); |
| 188 server.sendResponse(response); | 178 server.sendResponse(response); |
| 189 return; | 179 return; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 void _sendTypeHierarchyNull(protocol.Request request) { | 235 void _sendTypeHierarchyNull(protocol.Request request) { |
| 246 protocol.Response response = | 236 protocol.Response response = |
| 247 new protocol.SearchGetTypeHierarchyResult().toResponse(request.id); | 237 new protocol.SearchGetTypeHierarchyResult().toResponse(request.id); |
| 248 server.sendResponse(response); | 238 server.sendResponse(response); |
| 249 } | 239 } |
| 250 | 240 |
| 251 static protocol.SearchResult toResult(SearchMatch match) { | 241 static protocol.SearchResult toResult(SearchMatch match) { |
| 252 return protocol.newSearchResult_fromMatch(match); | 242 return protocol.newSearchResult_fromMatch(match); |
| 253 } | 243 } |
| 254 } | 244 } |
| OLD | NEW |