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!;
+  }
 }