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

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

Issue 2672973002: Replace computeNode() with AstProvider in search. (Closed)
Patch Set: Created 3 years, 10 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
OLDNEW
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 analysis_server.src.services.search.search_engine_internal; 5 library analysis_server.src.services.search.search_engine_internal;
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/index/index.dart'; 10 import 'package:analysis_server/src/services/index/index.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/dart/element/visitor.dart'; 15 import 'package:analyzer/dart/element/visitor.dart';
16 import 'package:analyzer/src/dart/element/ast_provider.dart';
16 import 'package:analyzer/src/dart/element/element.dart'; 17 import 'package:analyzer/src/dart/element/element.dart';
17 import 'package:analyzer/src/dart/element/member.dart'; 18 import 'package:analyzer/src/dart/element/member.dart';
18 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; 19 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
19 import 'package:analyzer/src/generated/resolver.dart' show NamespaceBuilder; 20 import 'package:analyzer/src/generated/resolver.dart' show NamespaceBuilder;
20 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange; 21 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange;
21 import 'package:analyzer/src/generated/utilities_general.dart'; 22 import 'package:analyzer/src/generated/utilities_general.dart';
22 import 'package:analyzer/src/summary/idl.dart'; 23 import 'package:analyzer/src/summary/idl.dart';
23 24
24 /** 25 /**
26 * The type of a function that returns the [AstProvider] managing the [file].
27 */
28 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
29
30 /**
25 * A [SearchEngine] implementation. 31 * A [SearchEngine] implementation.
26 */ 32 */
27 class SearchEngineImpl implements SearchEngine { 33 class SearchEngineImpl implements SearchEngine {
28 final Index _index; 34 final Index _index;
35 final GetAstProvider _getAstProvider;
29 36
30 SearchEngineImpl(this._index); 37 SearchEngineImpl(this._index, this._getAstProvider);
31 38
32 @override 39 @override
33 Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async { 40 Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async {
34 List<SearchMatch> matches = <SearchMatch>[]; 41 List<SearchMatch> matches = <SearchMatch>[];
35 await _addMatches( 42 await _addMatches(
36 matches, type, IndexRelationKind.IS_ANCESTOR_OF, MatchKind.DECLARATION); 43 matches, type, IndexRelationKind.IS_ANCESTOR_OF, MatchKind.DECLARATION);
37 return matches.map((match) => match.element as ClassElement).toSet(); 44 return matches.map((match) => match.element as ClassElement).toSet();
38 } 45 }
39 46
40 @override 47 @override
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 false)); 254 false));
248 } 255 }
249 } 256 }
250 } 257 }
251 return matches; 258 return matches;
252 } 259 }
253 260
254 Future<List<SearchMatch>> _searchReferences_Local( 261 Future<List<SearchMatch>> _searchReferences_Local(
255 Element element, bool isRootNode(AstNode n)) async { 262 Element element, bool isRootNode(AstNode n)) async {
256 _LocalReferencesVisitor visitor = new _LocalReferencesVisitor(element); 263 _LocalReferencesVisitor visitor = new _LocalReferencesVisitor(element);
257 AstNode node = element.computeNode(); 264 AstProvider astProvider = _getAstProvider(element.source.fullName);
265 AstNode node = await astProvider.getResolvedNodeForElement(element);
258 AstNode enclosingNode = node?.getAncestor(isRootNode); 266 AstNode enclosingNode = node?.getAncestor(isRootNode);
259 enclosingNode?.accept(visitor); 267 enclosingNode?.accept(visitor);
260 return visitor.matches; 268 return visitor.matches;
261 } 269 }
262 270
263 Future<List<SearchMatch>> _searchReferences_Parameter( 271 Future<List<SearchMatch>> _searchReferences_Parameter(
264 ParameterElement parameter) async { 272 ParameterElement parameter) async {
265 List<SearchMatch> matches = <SearchMatch>[]; 273 List<SearchMatch> matches = <SearchMatch>[];
266 matches.addAll(await _searchReferences(parameter)); 274 matches.addAll(await _searchReferences(parameter));
267 matches.addAll(await _searchReferences_Local(parameter, (AstNode node) { 275 matches.addAll(await _searchReferences_Local(parameter, (AstNode node) {
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 _addMatch(node, kind); 583 _addMatch(node, kind);
576 } 584 }
577 } 585 }
578 586
579 void _addMatch(AstNode node, MatchKind kind) { 587 void _addMatch(AstNode node, MatchKind kind) {
580 bool isQualified = node.parent is Label; 588 bool isQualified = node.parent is Label;
581 matches.add(new SearchMatchImpl(context, libraryUri, unitUri, kind, 589 matches.add(new SearchMatchImpl(context, libraryUri, unitUri, kind,
582 rangeNode(node), true, isQualified)); 590 rangeNode(node), true, isQualified));
583 } 591 }
584 } 592 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698