Chromium Code Reviews| Index: pkg/analysis_server/lib/src/services/search/search_engine_internal.dart |
| diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart |
| index 63a6996d8005ffebaad0e3af360f6ade528d3935..78fbb0f1b4536a5244a4ca35c30b7b8e2c8b0cb7 100644 |
| --- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart |
| +++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart |
| @@ -13,6 +13,7 @@ import 'package:analyzer/dart/ast/ast.dart'; |
| import 'package:analyzer/dart/ast/visitor.dart'; |
| import 'package:analyzer/dart/element/element.dart'; |
| import 'package:analyzer/dart/element/visitor.dart'; |
| +import 'package:analyzer/src/dart/element/ast_provider.dart'; |
| import 'package:analyzer/src/dart/element/element.dart'; |
| import 'package:analyzer/src/dart/element/member.dart'; |
| import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
| @@ -22,12 +23,18 @@ import 'package:analyzer/src/generated/utilities_general.dart'; |
| import 'package:analyzer/src/summary/idl.dart'; |
| /** |
| + * The type of a function that returns the [AstProvider] managing the [file]. |
| + */ |
| +typedef AstProvider GetAstProvider(String file); |
|
Brian Wilkerson
2017/02/03 14:43:47
Is this necessary? It seems like it's just as perf
scheglov
2017/02/03 18:31:36
AstProvider is bound to a single AnalysisDriver or
Brian Wilkerson
2017/02/03 18:38:25
That makes sense. It would be good to add that to
|
| + |
| +/** |
| * A [SearchEngine] implementation. |
| */ |
| class SearchEngineImpl implements SearchEngine { |
| final Index _index; |
| + final GetAstProvider _getAstProvider; |
| - SearchEngineImpl(this._index); |
| + SearchEngineImpl(this._index, this._getAstProvider); |
| @override |
| Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async { |
| @@ -254,7 +261,8 @@ class SearchEngineImpl implements SearchEngine { |
| Future<List<SearchMatch>> _searchReferences_Local( |
| Element element, bool isRootNode(AstNode n)) async { |
| _LocalReferencesVisitor visitor = new _LocalReferencesVisitor(element); |
| - AstNode node = element.computeNode(); |
| + AstProvider astProvider = _getAstProvider(element.source.fullName); |
| + AstNode node = await astProvider.getResolvedNodeForElement(element); |
| AstNode enclosingNode = node?.getAncestor(isRootNode); |
| enclosingNode?.accept(visitor); |
| return visitor.matches; |