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

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

Issue 2564913002: Implement SearchEngine.searchAllSubtypes() with the analysis driver. (Closed)
Patch Set: Created 4 years 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:analysis_server/src/services/search/search_engine.dart'; 7 import 'package:analysis_server/src/services/search/search_engine.dart';
8 import 'package:analyzer/dart/element/element.dart'; 8 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/src/dart/analysis/driver.dart'; 9 import 'package:analyzer/src/dart/analysis/driver.dart';
10 import 'package:analyzer/src/dart/analysis/search.dart'; 10 import 'package:analyzer/src/dart/analysis/search.dart';
11 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange; 11 import 'package:analyzer/src/generated/source.dart' show Source, SourceRange;
12 12
13 /** 13 /**
14 * A [SearchEngine] implementation. 14 * A [SearchEngine] implementation.
15 */ 15 */
16 class SearchEngineImpl2 implements SearchEngine { 16 class SearchEngineImpl2 implements SearchEngine {
17 final Iterable<AnalysisDriver> _drivers; 17 final Iterable<AnalysisDriver> _drivers;
18 18
19 SearchEngineImpl2(this._drivers); 19 SearchEngineImpl2(this._drivers);
20 20
21 @override 21 @override
22 Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) async { 22 Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async {
23 // TODO(scheglov) implement 23 Set<ClassElement> allSubtypes = new Set<ClassElement>();
24 return []; 24
25 Future<Null> addSubtypes(ClassElement type) async {
26 List<SearchResult> directResults = await _searchDirectSubtypes(type);
27 for (SearchResult directResult in directResults) {
28 var directSubtype = directResult.enclosingElement as ClassElement;
29 if (allSubtypes.add(directSubtype)) {
30 await addSubtypes(directSubtype);
31 }
32 }
33 }
34
35 await addSubtypes(type);
36 return allSubtypes;
25 } 37 }
26 38
27 @override 39 @override
28 Future<List<SearchMatch>> searchMemberDeclarations(String name) async { 40 Future<List<SearchMatch>> searchMemberDeclarations(String name) async {
29 // TODO(scheglov) implement 41 // TODO(scheglov) implement
30 return []; 42 return [];
31 } 43 }
32 44
33 @override 45 @override
34 Future<List<SearchMatch>> searchMemberReferences(String name) async { 46 Future<List<SearchMatch>> searchMemberReferences(String name) async {
35 // TODO(scheglov) implement 47 // TODO(scheglov) implement
36 return []; 48 return [];
37 } 49 }
38 50
39 @override 51 @override
40 Future<List<SearchMatch>> searchReferences(Element element) async { 52 Future<List<SearchMatch>> searchReferences(Element element) async {
41 List<SearchResult> allResults = []; 53 List<SearchResult> allResults = [];
42 for (AnalysisDriver driver in _drivers) { 54 for (AnalysisDriver driver in _drivers) {
43 List<SearchResult> results = await driver.search.references(element); 55 List<SearchResult> results = await driver.search.references(element);
44 allResults.addAll(results); 56 allResults.addAll(results);
45 } 57 }
46 return allResults.map(_SearchMatch.forSearchResult).toList(); 58 return allResults.map(_SearchMatch.forSearchResult).toList();
47 } 59 }
48 60
49 @override 61 @override
50 Future<List<SearchMatch>> searchSubtypes(ClassElement type) async { 62 Future<List<SearchMatch>> searchSubtypes(ClassElement type) async {
51 List<SearchResult> allResults = []; 63 List<SearchResult> results = await _searchDirectSubtypes(type);
52 for (AnalysisDriver driver in _drivers) { 64 return results.map(_SearchMatch.forSearchResult).toList();
53 List<SearchResult> results = await driver.search.subTypes(type);
54 allResults.addAll(results);
55 }
56 return allResults.map(_SearchMatch.forSearchResult).toList();
57 } 65 }
58 66
59 @override 67 @override
60 Future<List<SearchMatch>> searchTopLevelDeclarations(String pattern) async { 68 Future<List<SearchMatch>> searchTopLevelDeclarations(String pattern) async {
61 // TODO(scheglov) implement 69 // TODO(scheglov) implement
62 return []; 70 return [];
63 } 71 }
72
73 Future<List<SearchResult>> _searchDirectSubtypes(ClassElement type) async {
74 List<SearchResult> allResults = [];
75 for (AnalysisDriver driver in _drivers) {
76 List<SearchResult> results = await driver.search.subTypes(type);
77 allResults.addAll(results);
78 }
79 return allResults;
80 }
64 } 81 }
65 82
66 class _SearchMatch implements SearchMatch { 83 class _SearchMatch implements SearchMatch {
67 @override 84 @override
68 final String file; 85 final String file;
69 86
70 @override 87 @override
71 final Source librarySource; 88 final Source librarySource;
72 89
73 @override 90 @override
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 } 161 }
145 if (kind == SearchResultKind.WRITE) { 162 if (kind == SearchResultKind.WRITE) {
146 return MatchKind.WRITE; 163 return MatchKind.WRITE;
147 } 164 }
148 if (kind == SearchResultKind.INVOCATION) { 165 if (kind == SearchResultKind.INVOCATION) {
149 return MatchKind.INVOCATION; 166 return MatchKind.INVOCATION;
150 } 167 }
151 return MatchKind.REFERENCE; 168 return MatchKind.REFERENCE;
152 } 169 }
153 } 170 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698