OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 services.src.search.search_engine2; | 5 library services.src.search.search_engine2; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/src/services/correction/source_range.dart'; | 9 import 'package:analysis_server/src/services/correction/source_range.dart'; |
10 import 'package:analysis_server/src/services/index2/index2.dart'; | 10 import 'package:analysis_server/src/services/index2/index2.dart'; |
11 import 'package:analysis_server/src/services/search/search_engine.dart'; | 11 import 'package:analysis_server/src/services/search/search_engine.dart'; |
12 import 'package:analyzer/dart/ast/ast.dart'; | 12 import 'package:analyzer/dart/ast/ast.dart'; |
13 import 'package:analyzer/dart/ast/visitor.dart'; | 13 import 'package:analyzer/dart/ast/visitor.dart'; |
14 import 'package:analyzer/dart/element/element.dart'; | 14 import 'package:analyzer/dart/element/element.dart'; |
15 import 'package:analyzer/src/dart/element/member.dart'; | 15 import 'package:analyzer/src/dart/element/member.dart'; |
16 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; | 16 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
17 import 'package:analyzer/src/generated/resolver.dart' show NamespaceBuilder; | 17 import 'package:analyzer/src/generated/resolver.dart' show NamespaceBuilder; |
18 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange; | 18 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange; |
19 import 'package:analyzer/src/summary/idl.dart'; | 19 import 'package:analyzer/src/summary/idl.dart'; |
20 | 20 |
21 /** | 21 /** |
22 * A [SearchEngine] implementation. | 22 * A [SearchEngine] implementation. |
23 */ | 23 */ |
24 class SearchEngineImpl2 implements SearchEngine { | 24 class SearchEngineImpl2 implements SearchEngine { |
25 final AnalysisContext context; | |
26 final Index2 _index; | 25 final Index2 _index; |
27 | 26 |
28 SearchEngineImpl2(this.context, this._index); | 27 SearchEngineImpl2(this._index); |
29 | 28 |
30 @override | 29 @override |
31 Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) async { | 30 Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) async { |
32 List<SearchMatch> matches = <SearchMatch>[]; | 31 List<SearchMatch> matches = <SearchMatch>[]; |
33 await _addMatches( | 32 await _addMatches( |
34 matches, type, IndexRelationKind.IS_ANCESTOR_OF, MatchKind.DECLARATION); | 33 matches, type, IndexRelationKind.IS_ANCESTOR_OF, MatchKind.DECLARATION); |
35 return matches; | 34 return matches; |
36 } | 35 } |
37 | 36 |
38 @override | 37 @override |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 IndexRelationKind relationKind, MatchKind kind) async { | 103 IndexRelationKind relationKind, MatchKind kind) async { |
105 List<Location> locations = await _index.getRelations(element, relationKind); | 104 List<Location> locations = await _index.getRelations(element, relationKind); |
106 for (Location location in locations) { | 105 for (Location location in locations) { |
107 SearchMatch match = _newMatchForLocation(location, kind); | 106 SearchMatch match = _newMatchForLocation(location, kind); |
108 matches.add(match); | 107 matches.add(match); |
109 } | 108 } |
110 } | 109 } |
111 | 110 |
112 SearchMatch _newMatchForLocation(Location location, MatchKind kind) => | 111 SearchMatch _newMatchForLocation(Location location, MatchKind kind) => |
113 new SearchMatch( | 112 new SearchMatch( |
114 context, | 113 location.context, |
115 location.libraryUri, | 114 location.libraryUri, |
116 location.unitUri, | 115 location.unitUri, |
117 kind, | 116 kind, |
118 new SourceRange(location.offset, location.length), | 117 new SourceRange(location.offset, location.length), |
119 true, | 118 true, |
120 location.isQualified); | 119 location.isQualified); |
121 | 120 |
122 Future<List<SearchMatch>> _searchDefinedNames( | 121 Future<List<SearchMatch>> _searchDefinedNames( |
123 String pattern, IndexNameKind nameKind) async { | 122 String pattern, IndexNameKind nameKind) async { |
124 RegExp regExp = new RegExp(pattern); | 123 RegExp regExp = new RegExp(pattern); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 await _addMatches(matches, element, IndexRelationKind.IS_INVOKED_BY, | 168 await _addMatches(matches, element, IndexRelationKind.IS_INVOKED_BY, |
170 MatchKind.INVOCATION); | 169 MatchKind.INVOCATION); |
171 return matches; | 170 return matches; |
172 } | 171 } |
173 | 172 |
174 Future<List<SearchMatch>> _searchReferences_Import( | 173 Future<List<SearchMatch>> _searchReferences_Import( |
175 ImportElement element) async { | 174 ImportElement element) async { |
176 List<SearchMatch> matches = <SearchMatch>[]; | 175 List<SearchMatch> matches = <SearchMatch>[]; |
177 LibraryElement libraryElement = element.library; | 176 LibraryElement libraryElement = element.library; |
178 Source librarySource = libraryElement.source; | 177 Source librarySource = libraryElement.source; |
| 178 AnalysisContext context = libraryElement.context; |
179 for (CompilationUnitElement unitElement in libraryElement.units) { | 179 for (CompilationUnitElement unitElement in libraryElement.units) { |
180 Source unitSource = unitElement.source; | 180 Source unitSource = unitElement.source; |
181 CompilationUnit unit = | 181 CompilationUnit unit = |
182 context.resolveCompilationUnit2(unitSource, librarySource); | 182 context.resolveCompilationUnit2(unitSource, librarySource); |
183 _ImportElementReferencesVisitor visitor = | 183 _ImportElementReferencesVisitor visitor = |
184 new _ImportElementReferencesVisitor( | 184 new _ImportElementReferencesVisitor( |
185 element, unitSource.uri.toString()); | 185 element, unitSource.uri.toString()); |
186 unit.accept(visitor); | 186 unit.accept(visitor); |
187 matches.addAll(visitor.matches); | 187 matches.addAll(visitor.matches); |
188 } | 188 } |
189 return matches; | 189 return matches; |
190 } | 190 } |
191 | 191 |
192 Future<List<SearchMatch>> _searchReferences_Library(Element element) async { | 192 Future<List<SearchMatch>> _searchReferences_Library(Element element) async { |
193 List<SearchMatch> matches = <SearchMatch>[]; | 193 List<SearchMatch> matches = <SearchMatch>[]; |
194 LibraryElement libraryElement = element.library; | 194 LibraryElement libraryElement = element.library; |
195 Source librarySource = libraryElement.source; | 195 Source librarySource = libraryElement.source; |
| 196 AnalysisContext context = libraryElement.context; |
196 for (CompilationUnitElement unitElement in libraryElement.parts) { | 197 for (CompilationUnitElement unitElement in libraryElement.parts) { |
197 Source unitSource = unitElement.source; | 198 Source unitSource = unitElement.source; |
198 CompilationUnit unit = | 199 CompilationUnit unit = |
199 context.resolveCompilationUnit2(unitSource, librarySource); | 200 context.resolveCompilationUnit2(unitSource, librarySource); |
200 for (Directive directive in unit.directives) { | 201 for (Directive directive in unit.directives) { |
201 if (directive is PartOfDirective && | 202 if (directive is PartOfDirective && |
202 directive.element == libraryElement) { | 203 directive.element == libraryElement) { |
203 matches.add(new SearchMatch( | 204 matches.add(new SearchMatch( |
204 context, | 205 context, |
205 librarySource.uri.toString(), | 206 librarySource.uri.toString(), |
(...skipping 24 matching lines...) Expand all Loading... |
230 matches.addAll(await _searchReferences_Local( | 231 matches.addAll(await _searchReferences_Local( |
231 parameter, (n) => n is MethodDeclaration || n is FunctionExpression)); | 232 parameter, (n) => n is MethodDeclaration || n is FunctionExpression)); |
232 return matches; | 233 return matches; |
233 } | 234 } |
234 | 235 |
235 Future<List<SearchMatch>> _searchReferences_Prefix( | 236 Future<List<SearchMatch>> _searchReferences_Prefix( |
236 PrefixElement element) async { | 237 PrefixElement element) async { |
237 List<SearchMatch> matches = <SearchMatch>[]; | 238 List<SearchMatch> matches = <SearchMatch>[]; |
238 LibraryElement libraryElement = element.library; | 239 LibraryElement libraryElement = element.library; |
239 Source librarySource = libraryElement.source; | 240 Source librarySource = libraryElement.source; |
| 241 AnalysisContext context = libraryElement.context; |
240 for (CompilationUnitElement unitElement in libraryElement.units) { | 242 for (CompilationUnitElement unitElement in libraryElement.units) { |
241 Source unitSource = unitElement.source; | 243 Source unitSource = unitElement.source; |
242 CompilationUnit unit = | 244 CompilationUnit unit = |
243 context.resolveCompilationUnit2(unitSource, librarySource); | 245 context.resolveCompilationUnit2(unitSource, librarySource); |
244 _LocalReferencesVisitor visitor = | 246 _LocalReferencesVisitor visitor = |
245 new _LocalReferencesVisitor(element, unitSource.uri.toString()); | 247 new _LocalReferencesVisitor(element, unitSource.uri.toString()); |
246 unit.accept(visitor); | 248 unit.accept(visitor); |
247 matches.addAll(visitor.matches); | 249 matches.addAll(visitor.matches); |
248 } | 250 } |
249 return matches; | 251 return matches; |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 _addMatch(node, kind); | 363 _addMatch(node, kind); |
362 } | 364 } |
363 } | 365 } |
364 | 366 |
365 void _addMatch(AstNode node, MatchKind kind) { | 367 void _addMatch(AstNode node, MatchKind kind) { |
366 bool isQualified = node is SimpleIdentifier && node.isQualified; | 368 bool isQualified = node is SimpleIdentifier && node.isQualified; |
367 matches.add(new SearchMatch(context, libraryUri, unitUri, kind, | 369 matches.add(new SearchMatch(context, libraryUri, unitUri, kind, |
368 rangeNode(node), true, isQualified)); | 370 rangeNode(node), true, isQualified)); |
369 } | 371 } |
370 } | 372 } |
OLD | NEW |