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

Side by Side Diff: pkg/analyzer/lib/src/dart/analysis/search.dart

Issue 2535173004: Implement search for PrefixElement. (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
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/analysis/search_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/visitor.dart'; 8 import 'package:analyzer/dart/ast/visitor.dart';
9 import 'package:analyzer/dart/element/element.dart'; 9 import 'package:analyzer/dart/element/element.dart';
10 import 'package:analyzer/dart/element/visitor.dart'; 10 import 'package:analyzer/dart/element/visitor.dart';
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 } else if (kind == ElementKind.FUNCTION || kind == ElementKind.METHOD) { 53 } else if (kind == ElementKind.FUNCTION || kind == ElementKind.METHOD) {
54 if (element.enclosingElement is ExecutableElement) { 54 if (element.enclosingElement is ExecutableElement) {
55 return _searchReferences_Local(element, (n) => n is Block); 55 return _searchReferences_Local(element, (n) => n is Block);
56 } 56 }
57 return _searchReferences_Function(element); 57 return _searchReferences_Function(element);
58 } else if (kind == ElementKind.LABEL || 58 } else if (kind == ElementKind.LABEL ||
59 kind == ElementKind.LOCAL_VARIABLE) { 59 kind == ElementKind.LOCAL_VARIABLE) {
60 return _searchReferences_Local(element, (n) => n is Block); 60 return _searchReferences_Local(element, (n) => n is Block);
61 } else if (kind == ElementKind.PARAMETER) { 61 } else if (kind == ElementKind.PARAMETER) {
62 return _searchReferences_Parameter(element); 62 return _searchReferences_Parameter(element);
63 } else if (kind == ElementKind.PREFIX) {
64 return _searchReferences_Prefix(element);
63 } else if (kind == ElementKind.TYPE_PARAMETER) { 65 } else if (kind == ElementKind.TYPE_PARAMETER) {
64 return _searchReferences_Local( 66 return _searchReferences_Local(
65 element, (n) => n.parent is CompilationUnit); 67 element, (n) => n.parent is CompilationUnit);
66 } 68 }
67 // TODO(scheglov) support other kinds 69 // TODO(scheglov) support other kinds
68 return const <SearchResult>[]; 70 return const <SearchResult>[];
69 } 71 }
70 72
71 Future<Null> _addResults(List<SearchResult> results, Element element, 73 Future<Null> _addResults(List<SearchResult> results, Element element,
72 Map<IndexRelationKind, SearchResultKind> relationToResultKind) async { 74 Map<IndexRelationKind, SearchResultKind> relationToResultKind) async {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 Future<List<SearchResult>> _searchReferences_Parameter( 191 Future<List<SearchResult>> _searchReferences_Parameter(
190 ParameterElement parameter) async { 192 ParameterElement parameter) async {
191 List<SearchResult> results = <SearchResult>[]; 193 List<SearchResult> results = <SearchResult>[];
192 results.addAll(await _searchReferences(parameter)); 194 results.addAll(await _searchReferences(parameter));
193 results.addAll(await _searchReferences_Local(parameter, (AstNode node) { 195 results.addAll(await _searchReferences_Local(parameter, (AstNode node) {
194 AstNode parent = node.parent; 196 AstNode parent = node.parent;
195 return parent is ClassDeclaration || parent is CompilationUnit; 197 return parent is ClassDeclaration || parent is CompilationUnit;
196 })); 198 }));
197 return results; 199 return results;
198 } 200 }
201
202 Future<List<SearchResult>> _searchReferences_Prefix(
203 PrefixElement element) async {
204 List<SearchResult> results = <SearchResult>[];
205 LibraryElement libraryElement = element.library;
206 for (CompilationUnitElement unitElement in libraryElement.units) {
207 String unitPath = unitElement.source.fullName;
208 AnalysisResult unitAnalysisResult = await _driver.getResult(unitPath);
209 _LocalReferencesVisitor visitor =
210 new _LocalReferencesVisitor(element, unitElement);
211 unitAnalysisResult.unit.accept(visitor);
212 results.addAll(visitor.results);
213 }
214 return results;
215 }
199 } 216 }
200 217
201 /** 218 /**
202 * A single search result. 219 * A single search result.
203 */ 220 */
204 class SearchResult { 221 class SearchResult {
205 /** 222 /**
206 * The element that is used at this result. 223 * The element that is used at this result.
207 */ 224 */
208 final Element element; 225 final Element element;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 } 532 }
516 533
517 void _addResult(AstNode node, SearchResultKind kind) { 534 void _addResult(AstNode node, SearchResultKind kind) {
518 bool isQualified = node.parent is Label; 535 bool isQualified = node.parent is Label;
519 Element enclosingElement = 536 Element enclosingElement =
520 _getEnclosingElement(enclosingUnitElement, node.offset); 537 _getEnclosingElement(enclosingUnitElement, node.offset);
521 results.add(new SearchResult._(element, enclosingElement, kind, node.offset, 538 results.add(new SearchResult._(element, enclosingElement, kind, node.offset,
522 node.length, true, isQualified)); 539 node.length, true, isQualified));
523 } 540 }
524 } 541 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/dart/analysis/search_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698