Change find refernces to accept an Element
Change-Id: I3d9f6456fe352ca423d63cd71d9408ce678066b5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/219821
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 0aa1a3f..29f89fc 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -51,7 +51,7 @@
RenameResponse? computeRenameRanges() {
var matches = canRename._fileResolver.findReferences(
- canRename.refactoringElement.offset, canRename.filePath);
+ canRename.refactoringElement.element, canRename.filePath);
return RenameResponse(matches, this);
}
}
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index b9fb939..24876d2 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -18,7 +18,6 @@
import 'package:analyzer/src/dart/analysis/feature_set_provider.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
-import 'package:analyzer/src/dart/ast/utilities.dart';
import 'package:analyzer/src/dart/micro/analysis_context.dart';
import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
import 'package:analyzer/src/dart/micro/library_analyzer.dart';
@@ -186,30 +185,25 @@
removedCacheIds.addAll(libraryContext!.collectSharedDataIdentifiers());
}
- /// Looks for references to the Element at the given offset and path. All the
+ /// Looks for references to the given Element in the path. All the
/// files currently cached by the resolver are searched, generated files are
/// ignored.
- List<CiderSearchMatch> findReferences(int offset, String path,
+ List<CiderSearchMatch> findReferences(Element element, String path,
{OperationPerformanceImpl? performance}) {
var references = <CiderSearchMatch>[];
- var unit = resolve(path: path);
- var node = NodeLocator(offset).searchWithin(unit.unit);
- var element = getElementOfNode(node);
- if (element != null) {
- // TODO(keertip): check if element is named constructor.
- var result = fsState!.getFilesContaining(element.displayName);
- result.forEach((filePath) {
- var resolved = resolve(path: filePath);
- var collector = ReferencesCollector(element);
- resolved.unit.accept(collector);
- var offsets = collector.offsets;
- if (offsets.isNotEmpty) {
- var lineInfo = resolved.unit.lineInfo;
- references.add(CiderSearchMatch(filePath,
- offsets.map((offset) => lineInfo?.getLocation(offset)).toList()));
- }
- });
- }
+ // TODO(keertip): check if element is named constructor.
+ var result = fsState!.getFilesContaining(element.displayName);
+ result.forEach((filePath) {
+ var resolved = resolve(path: filePath);
+ var collector = ReferencesCollector(element);
+ resolved.unit.accept(collector);
+ var offsets = collector.offsets;
+ if (offsets.isNotEmpty) {
+ var lineInfo = resolved.unit.lineInfo;
+ references.add(CiderSearchMatch(filePath,
+ offsets.map((offset) => lineInfo?.getLocation(offset)).toList()));
+ }
+ });
return references;
}
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index 52861ce..3b59012 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -2,11 +2,14 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/dart/micro/cider_byte_store.dart';
import 'package:analyzer/src/dart/micro/library_graph.dart';
import 'package:analyzer/src/dart/micro/resolve_file.dart';
+import 'package:analyzer/src/dart/micro/utils.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/lint/registry.dart';
import 'package:test/test.dart';
@@ -391,7 +394,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(6, aPath);
+ var result = fileResolver.findReferences(_findElement(6, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(4, 11)]),
CiderSearchMatch(aPath, [CharacterLocation(1, 7)])
@@ -412,7 +415,7 @@
''');
await resolveFile(aPath);
- var result = fileResolver.findReferences(16, aPath);
+ var result = fileResolver.findReferences(_findElement(16, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(
aPath, [CharacterLocation(2, 7), CharacterLocation(5, 5)])
@@ -431,7 +434,7 @@
''');
await resolveFile(aPath);
- var result = fileResolver.findReferences(11, aPath);
+ var result = fileResolver.findReferences(_findElement(11, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(
aPath, [CharacterLocation(2, 3), CharacterLocation(5, 1)])
@@ -457,7 +460,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(20, aPath);
+ var result = fileResolver.findReferences(_findElement(20, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(5, 15)]),
CiderSearchMatch(aPath, [CharacterLocation(2, 11)])
@@ -476,7 +479,7 @@
}
''');
await resolveFile(aPath);
- var result = fileResolver.findReferences(39, aPath);
+ var result = fileResolver.findReferences(_findElement(39, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(
aPath, [CharacterLocation(3, 9), CharacterLocation(4, 11)])
@@ -509,7 +512,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(17, aPath);
+ var result = fileResolver.findReferences(_findElement(17, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
CiderSearchMatch(
@@ -536,7 +539,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(21, aPath);
+ var result = fileResolver.findReferences(_findElement(21, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(5, 5)]),
CiderSearchMatch(aPath, [CharacterLocation(2, 12)])
@@ -563,7 +566,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(19, aPath);
+ var result = fileResolver.findReferences(_findElement(19, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(4, 13)]),
CiderSearchMatch(aPath, [CharacterLocation(3, 9)])
@@ -590,7 +593,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(20, aPath);
+ var result = fileResolver.findReferences(_findElement(20, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(4, 3)]),
CiderSearchMatch(aPath, [CharacterLocation(3, 10)])
@@ -610,7 +613,7 @@
''');
await resolveFile(aPath);
- var result = fileResolver.findReferences(10, aPath);
+ var result = fileResolver.findReferences(_findElement(10, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(
aPath, [CharacterLocation(1, 11), CharacterLocation(4, 11)])
@@ -628,7 +631,7 @@
}
''');
await resolveFile(aPath);
- var result = fileResolver.findReferences(10, aPath);
+ var result = fileResolver.findReferences(_findElement(10, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(aPath, [
CharacterLocation(1, 11),
@@ -656,7 +659,7 @@
''');
await resolveFile(bPath);
- var result = fileResolver.findReferences(8, aPath);
+ var result = fileResolver.findReferences(_findElement(8, aPath), aPath);
var expected = <CiderSearchMatch>[
CiderSearchMatch(bPath, [CharacterLocation(3, 8)]),
CiderSearchMatch(aPath, [CharacterLocation(1, 9)])
@@ -1276,4 +1279,11 @@
void _assertRemovedPaths(Matcher matcher) {
expect(fileResolver.fsState!.testView.removedPaths, matcher);
}
+
+ Element _findElement(int offset, String filePath) {
+ var resolvedUnit = fileResolver.resolve(path: filePath);
+ var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
+ var element = getElementOfNode(node);
+ return element!;
+ }
}