Add support for import rename

Change-Id: I7358e697d022302f060eb751415c28087c9642a4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245741
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index a7ce3f3..02902f3 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -53,6 +53,8 @@
     } else if (element is ConstructorElement) {
       status = validateConstructorName(name);
       _analyzePossibleConflicts(element, status, name);
+    } else if (element is ImportElement) {
+      status = validateImportPrefixName(name);
     }
 
     if (status == null) {
@@ -125,34 +127,9 @@
     for (var element in elements) {
       matches.addAll(await fileResolver.findReferences2(element));
     }
-
     FlutterWidgetRename? flutterRename;
-    var flutterState = canRename._flutterWidgetState;
-    if (flutterState != null) {
-      var stateClass = flutterState.state;
-      var stateName = flutterState.newName;
-      var match = await fileResolver.findReferences2(stateClass);
-      var sourcePath = stateClass.source.fullName;
-      var location = stateClass.enclosingElement.lineInfo
-          .getLocation(stateClass.nameOffset);
-      CiderSearchMatch ciderMatch;
-      var searchInfo = CiderSearchInfo(
-          location, stateClass.nameLength, MatchKind.DECLARATION);
-      try {
-        ciderMatch = match.firstWhere((m) => m.path == sourcePath);
-        ciderMatch.references.add(searchInfo);
-      } catch (_) {
-        match.add(CiderSearchMatch(sourcePath, [], [searchInfo]));
-      }
-      var replacements = match
-          .map((m) => CiderReplaceMatch(
-              m.path,
-              m.references
-                  .map((p) => ReplaceInfo(
-                      stateName, p.startPosition, stateClass.nameLength))
-                  .toList()))
-          .toList();
-      flutterRename = FlutterWidgetRename(stateName, match, replacements);
+    if (canRename._flutterWidgetState != null) {
+      flutterRename = await _computeFlutterStateName();
     }
     var replaceMatches = <CiderReplaceMatch>[];
     if (element is ConstructorElement) {
@@ -179,6 +156,30 @@
           replaceMatches.addMatch(result.path, result.matches.toList());
         }
       }
+    } else if (element is ImportElement) {
+      var replaceInfo = <ReplaceInfo>[];
+      for (var match in matches) {
+        for (var ref in match.references) {
+          if (newName.isEmpty) {
+            replaceInfo.add(ReplaceInfo('', ref.startPosition, ref.length));
+          } else {
+            var identifier = await _getInterpolationIdentifier(
+                match.path, ref.startPosition);
+            if (identifier != null) {
+              var lineInfo = canRename.lineInfo;
+              replaceInfo.add(ReplaceInfo('{$newName.${identifier.name}}',
+                  lineInfo.getLocation(identifier.offset), identifier.length));
+            } else {
+              replaceInfo
+                  .add(ReplaceInfo('$newName.', ref.startPosition, ref.length));
+            }
+          }
+        }
+        replaceMatches.addMatch(match.path, replaceInfo);
+        var sourcePath = element.source.fullName;
+        var infos = await _addElementDeclaration(element, sourcePath);
+        replaceMatches.addMatch(sourcePath, infos);
+      }
     } else {
       for (var match in matches) {
         replaceMatches.addMatch(
@@ -213,6 +214,32 @@
             lineInfo.getLocation(element.setter!.nameOffset),
             element.setter!.nameLength));
       }
+    } else if (element is ImportElement) {
+      var prefix = element.prefix;
+      var unit =
+          (await canRename._fileResolver.resolve2(path: sourcePath)).unit;
+      var index = element.library.imports.indexOf(element);
+      var node = unit.directives.whereType<ImportDirective>().elementAt(index);
+      if (newName.isEmpty) {
+        // We should not get `prefix == null` because we check in
+        // `checkNewName` that the new name is different.
+        if (prefix == null) {
+          return infos;
+        }
+        var prefixEnd = prefix.nameOffset + prefix.nameLength;
+        infos.add(ReplaceInfo(newName, lineInfo.getLocation(node.uri.end),
+            prefixEnd - node.uri.end));
+      } else {
+        if (prefix == null) {
+          var uriEnd = node.uri.end;
+          infos.add(
+              ReplaceInfo(' as $newName', lineInfo.getLocation(uriEnd), 0));
+        } else {
+          var offset = prefix.nameOffset;
+          var length = prefix.nameLength;
+          infos.add(ReplaceInfo(newName, lineInfo.getLocation(offset), length));
+        }
+      }
     } else {
       var location = (await canRename._fileResolver.resolve2(path: sourcePath))
           .lineInfo
@@ -222,6 +249,53 @@
     return infos;
   }
 
+  Future<FlutterWidgetRename?> _computeFlutterStateName() async {
+    var flutterState = canRename._flutterWidgetState;
+    var stateClass = flutterState!.state;
+    var stateName = flutterState.newName;
+    var match = await canRename._fileResolver.findReferences2(stateClass);
+    var sourcePath = stateClass.source.fullName;
+    var location =
+        stateClass.enclosingElement.lineInfo.getLocation(stateClass.nameOffset);
+    CiderSearchMatch ciderMatch;
+    var searchInfo =
+        CiderSearchInfo(location, stateClass.nameLength, MatchKind.DECLARATION);
+    try {
+      ciderMatch = match.firstWhere((m) => m.path == sourcePath);
+      ciderMatch.references.add(searchInfo);
+    } catch (_) {
+      match.add(CiderSearchMatch(sourcePath, [searchInfo]));
+    }
+    var replacements = match
+        .map((m) => CiderReplaceMatch(
+            m.path,
+            m.references
+                .map((p) => ReplaceInfo(
+                    stateName, p.startPosition, stateClass.nameLength))
+                .toList()))
+        .toList();
+    return FlutterWidgetRename(stateName, match, replacements);
+  }
+
+  /// If the given [reference] is before an interpolated [SimpleIdentifier] in
+  /// an [InterpolationExpression] without surrounding curly brackets, return
+  /// it. Otherwise return `null`.
+  Future<SimpleIdentifier?> _getInterpolationIdentifier(
+      String path, CharacterLocation loc) async {
+    var resolvedUnit = await canRename._fileResolver.resolve2(path: path);
+    var lineInfo = resolvedUnit.lineInfo;
+    var node = NodeLocator(
+            lineInfo.getOffsetOfLine(loc.lineNumber - 1) + loc.columnNumber)
+        .searchWithin(resolvedUnit.unit);
+    if (node is SimpleIdentifier) {
+      var parent = node.parent;
+      if (parent is InterpolationExpression && parent.rightBracket == null) {
+        return node;
+      }
+    }
+    return null;
+  }
+
   Future<CiderReplaceMatch?> _replaceSyntheticConstructor() async {
     var element = canRename.refactoringElement.element;
     var classElement = element.enclosingElement;
@@ -313,6 +387,9 @@
     if (element is ConstructorElement) {
       return true;
     }
+    if (element is ImportElement) {
+      return true;
+    }
     if (element is LabelElement || element is LocalElement) {
       return true;
     }
diff --git a/pkg/analysis_server/test/src/cider/rename_test.dart b/pkg/analysis_server/test/src/cider/rename_test.dart
index 86347e6..270b014 100644
--- a/pkg/analysis_server/test/src/cider/rename_test.dart
+++ b/pkg/analysis_server/test/src/cider/rename_test.dart
@@ -651,6 +651,131 @@
         [ReplaceInfo('bar', CharacterLocation(1, 1), 3)]);
   }
 
+  void test_rename_import() async {
+    var testCode = '''
+import 'dart:async';
+^import 'dart:math' show Random, min hide max;
+void f() {
+  Future f;
+  Random r;
+  min(1, 2);
+}
+''';
+
+    var result = await _rename(testCode, 'newName');
+    _assertTestChangeResult('''
+import 'dart:async';
+import 'dart:math' as newName show Random, min hide max;
+void f() {
+  Future f;
+  newName.Random r;
+  newName.min(1, 2);
+}
+''', result!.replaceMatches.first.matches);
+  }
+
+  void test_rename_import_hasCurlyBrackets() async {
+    var testCode = r'''
+// test
+^import 'dart:async';
+void f() {
+  Future f;
+  print('Future type: ${Future}');
+}
+''';
+
+    var result = await _rename(testCode, 'newName');
+    _assertTestChangeResult(r'''
+// test
+import 'dart:async' as newName;
+void f() {
+  newName.Future f;
+  print('Future type: ${newName.Future}');
+}
+''', result!.replaceMatches.first.matches);
+  }
+
+  void test_rename_import_noCurlyBrackets() async {
+    var testCode = r'''
+// test
+^import 'dart:async';
+void f() {
+  Future f;
+  print('Future type: $Future');
+}
+''';
+    var result = await _rename(testCode, 'newName');
+    _assertTestChangeResult(r'''
+// test
+import 'dart:async' as newName;
+void f() {
+  newName.Future f;
+  print('Future type: ${newName.Future}');
+}
+''', result!.replaceMatches.first.matches);
+  }
+
+  void test_rename_import_onPrefixElement() async {
+    var testCode = '''
+import 'dart:async' as test;
+import 'dart:math' as test;
+void f() {
+  test.Future f;
+  ^test.pi;
+  test.e;
+}
+''';
+    var result = await _rename(testCode, 'newName');
+    _assertTestChangeResult('''
+import 'dart:async' as test;
+import 'dart:math' as newName;
+void f() {
+  test.Future f;
+  newName.pi;
+  newName.e;
+}
+''', result!.replaceMatches.first.matches);
+  }
+
+  void test_rename_import_prefix() async {
+    var testCode = '''
+import 'dart:math' as test;
+^import 'dart:async' as test;
+void f() {
+  test.max(1, 2);
+  test.Future f;
+}
+''';
+    var result = await _rename(testCode, 'newName');
+    _assertTestChangeResult('''
+import 'dart:math' as test;
+import 'dart:async' as newName;
+void f() {
+  test.max(1, 2);
+  newName.Future f;
+}
+''', result!.replaceMatches.first.matches);
+  }
+
+  void test_rename_import_remove_prefix() async {
+    var testCode = '''
+import 'dart:math' as test;
+^import 'dart:async' as test;
+void f() {
+  test.Future f;
+}
+''';
+
+    var result = await _rename(testCode, '');
+    _assertTestChangeResult('''
+import 'dart:math' as test;
+import 'dart:async';
+void f() {
+  Future f;
+}
+''', result!.replaceMatches.first.matches);
+  }
+
   void test_rename_local() async {
     var testCode = '''
 void foo() {
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 044b599..c27bf2a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -126,6 +126,69 @@
   VARIABLE
 }
 
+/// Visitor that adds [SearchResult]s for references to the [importElement].
+class ImportElementReferencesVisitor extends RecursiveAstVisitor<void> {
+  final List<SearchResult> results = <SearchResult>[];
+
+  final ImportElement importElement;
+  final CompilationUnitElement enclosingUnitElement;
+
+  late final Set<Element> importedElements;
+
+  ImportElementReferencesVisitor(
+      ImportElement element, this.enclosingUnitElement)
+      : importElement = element {
+    importedElements = element.namespace.definedNames.values.toSet();
+  }
+
+  @override
+  void visitExportDirective(ExportDirective node) {}
+
+  @override
+  void visitImportDirective(ImportDirective node) {}
+
+  @override
+  void visitSimpleIdentifier(SimpleIdentifier node) {
+    if (node.inDeclarationContext()) {
+      return;
+    }
+    if (importElement.prefix != null) {
+      if (node.staticElement == importElement.prefix) {
+        var parent = node.parent;
+        if (parent is PrefixedIdentifier && parent.prefix == node) {
+          var element = parent.writeOrReadElement?.declaration;
+          if (importedElements.contains(element)) {
+            _addResultForPrefix(node, parent.identifier);
+          }
+        }
+        if (parent is MethodInvocation && parent.target == node) {
+          var element = parent.methodName.staticElement?.declaration;
+          if (importedElements.contains(element)) {
+            _addResultForPrefix(node, parent.methodName);
+          }
+        }
+      }
+    } else {
+      var element = node.writeOrReadElement?.declaration;
+      if (importedElements.contains(element)) {
+        _addResult(node.offset, 0);
+      }
+    }
+  }
+
+  void _addResult(int offset, int length) {
+    Element enclosingElement =
+        _getEnclosingElement(enclosingUnitElement, offset);
+    results.add(SearchResult._(enclosingElement, SearchResultKind.REFERENCE,
+        offset, length, true, false));
+  }
+
+  void _addResultForPrefix(SimpleIdentifier prefixNode, AstNode nextNode) {
+    int prefixOffset = prefixNode.offset;
+    _addResult(prefixOffset, nextNode.offset - prefixOffset);
+  }
+}
+
 /// Search support for an [AnalysisDriver].
 class Search {
   final AnalysisDriver _driver;
@@ -503,7 +566,7 @@
       String unitPath = unitElement.source.fullName;
       var unitResult = await _driver.getResult(unitPath);
       if (unitResult is ResolvedUnitResult) {
-        var visitor = _ImportElementReferencesVisitor(element, unitElement);
+        var visitor = ImportElementReferencesVisitor(element, unitElement);
         unitResult.unit.accept(visitor);
         results.addAll(visitor.results);
       }
@@ -966,69 +1029,6 @@
   }
 }
 
-/// Visitor that adds [SearchResult]s for references to the [importElement].
-class _ImportElementReferencesVisitor extends RecursiveAstVisitor<void> {
-  final List<SearchResult> results = <SearchResult>[];
-
-  final ImportElement importElement;
-  final CompilationUnitElement enclosingUnitElement;
-
-  late final Set<Element> importedElements;
-
-  _ImportElementReferencesVisitor(
-      ImportElement element, this.enclosingUnitElement)
-      : importElement = element {
-    importedElements = element.namespace.definedNames.values.toSet();
-  }
-
-  @override
-  void visitExportDirective(ExportDirective node) {}
-
-  @override
-  void visitImportDirective(ImportDirective node) {}
-
-  @override
-  void visitSimpleIdentifier(SimpleIdentifier node) {
-    if (node.inDeclarationContext()) {
-      return;
-    }
-    if (importElement.prefix != null) {
-      if (node.staticElement == importElement.prefix) {
-        var parent = node.parent;
-        if (parent is PrefixedIdentifier && parent.prefix == node) {
-          var element = parent.writeOrReadElement?.declaration;
-          if (importedElements.contains(element)) {
-            _addResultForPrefix(node, parent.identifier);
-          }
-        }
-        if (parent is MethodInvocation && parent.target == node) {
-          var element = parent.methodName.staticElement?.declaration;
-          if (importedElements.contains(element)) {
-            _addResultForPrefix(node, parent.methodName);
-          }
-        }
-      }
-    } else {
-      var element = node.writeOrReadElement?.declaration;
-      if (importedElements.contains(element)) {
-        _addResult(node.offset, 0);
-      }
-    }
-  }
-
-  void _addResult(int offset, int length) {
-    Element enclosingElement =
-        _getEnclosingElement(enclosingUnitElement, offset);
-    results.add(SearchResult._(enclosingElement, SearchResultKind.REFERENCE,
-        offset, length, true, false));
-  }
-
-  void _addResultForPrefix(SimpleIdentifier prefixNode, AstNode nextNode) {
-    int prefixOffset = prefixNode.offset;
-    _addResult(prefixOffset, nextNode.offset - prefixOffset);
-  }
-}
-
 class _IndexRequest {
   final AnalysisDriverUnitIndex index;
 
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index 592bb38..198bb5b 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -18,6 +18,7 @@
 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/analysis/search.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';
@@ -61,26 +62,20 @@
 
 class CiderSearchMatch {
   final String path;
-  @deprecated
-  final List<CharacterLocation?> startPositions;
   final List<CiderSearchInfo> references;
 
-  CiderSearchMatch(this.path, this.startPositions, this.references);
+  CiderSearchMatch(this.path, this.references);
 
   @override
   bool operator ==(Object other) =>
       other is CiderSearchMatch &&
       path == other.path &&
-      const ListEquality<CharacterLocation?>()
-          // ignore: deprecated_member_use_from_same_package
-          .equals(startPositions, other.startPositions) &&
       const ListEquality<CiderSearchInfo>()
           .equals(references, other.references);
 
   @override
   String toString() {
-    // ignore: deprecated_member_use_from_same_package
-    return '($path, $startPositions)';
+    return '($path, $references)';
   }
 }
 
@@ -218,9 +213,6 @@
             references.add(CiderSearchMatch(
                 path,
                 matches
-                    .map((match) => lineInfo.getLocation(match.offset))
-                    .toList(),
-                matches
                     .map((match) => CiderSearchInfo(
                         lineInfo.getLocation(match.offset),
                         match.length,
@@ -235,6 +227,8 @@
       if (element is LocalVariableElement ||
           (element is ParameterElement && !element.isNamed)) {
         await collectReferences2(element.source!.fullName, performance!);
+      } else if (element is ImportElement) {
+        return await _searchReferences_Import(element);
       } else {
         var result = performance!.run('getFilesContaining', (performance) {
           return fsState!.getFilesContaining(element.displayName);
@@ -769,6 +763,27 @@
     }
   }
 
+  Future<List<CiderSearchMatch>> _searchReferences_Import(
+      ImportElement element) async {
+    var results = <CiderSearchMatch>[];
+    LibraryElement libraryElement = element.library;
+    for (CompilationUnitElement unitElement in libraryElement.units) {
+      String unitPath = unitElement.source.fullName;
+      var unitResult = await resolve2(path: unitPath);
+      var visitor = ImportElementReferencesVisitor(element, unitElement);
+      unitResult.unit.accept(visitor);
+      var lineInfo = unitResult.lineInfo;
+      var infos = visitor.results
+          .map((searchResult) => CiderSearchInfo(
+              lineInfo.getLocation(searchResult.offset),
+              searchResult.length,
+              MatchKind.REFERENCE))
+          .toList();
+      results.add(CiderSearchMatch(unitPath, infos));
+    }
+    return results;
+  }
+
   void _throwIfNotAbsoluteNormalizedPath(String path) {
     var pathContext = resourceProvider.pathContext;
     if (pathContext.normalize(path) != path) {
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 934b7bd..ffc3b74 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
@@ -396,7 +396,7 @@
     var element = await _findElement(6, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(4, 11)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(4, 11), 1, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -418,8 +418,8 @@
     var element = await _findElement(16, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(aPath, [CharacterLocation(5, 5)],
-          [CiderSearchInfo(CharacterLocation(5, 5), 3, MatchKind.WRITE)])
+      CiderSearchMatch(
+          aPath, [CiderSearchInfo(CharacterLocation(5, 5), 3, MatchKind.WRITE)])
     ];
     expect(result, expected);
   }
@@ -438,7 +438,7 @@
     var element = await _findElement(11, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(aPath, [CharacterLocation(2, 3)],
+      CiderSearchMatch(aPath,
           [CiderSearchInfo(CharacterLocation(2, 3), 3, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -465,7 +465,7 @@
     var element = await _findElement(20, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(5, 15)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(5, 15), 3, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -485,7 +485,7 @@
     var element = await _findElement(39, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(aPath, [CharacterLocation(4, 11)],
+      CiderSearchMatch(aPath,
           [CiderSearchInfo(CharacterLocation(4, 11), 3, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -519,9 +519,9 @@
     var element = await _findElement(17, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(5, 5)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(5, 5), 4, MatchKind.REFERENCE)]),
-      CiderSearchMatch(aPath, [CharacterLocation(7, 4)],
+      CiderSearchMatch(aPath,
           [CiderSearchInfo(CharacterLocation(7, 4), 4, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -548,8 +548,8 @@
     var element = await _findElement(21, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(5, 5)],
-          [CiderSearchInfo(CharacterLocation(5, 5), 5, MatchKind.WRITE)])
+      CiderSearchMatch(
+          bPath, [CiderSearchInfo(CharacterLocation(5, 5), 5, MatchKind.WRITE)])
     ];
     expect(result, unorderedEquals(expected));
   }
@@ -576,7 +576,7 @@
     var element = await _findElement(19, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(4, 13)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(4, 13), 3, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));
@@ -604,7 +604,7 @@
     var element = await _findElement(20, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(4, 3)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(4, 3), 3, MatchKind.WRITE)]),
     ];
     expect(result, unorderedEquals(expected));
@@ -625,8 +625,8 @@
     var element = await _findElement(10, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(aPath, [CharacterLocation(4, 11)],
-          [CiderSearchInfo(CharacterLocation(4, 11), 1, MatchKind.READ)])
+      CiderSearchMatch(
+          aPath, [CiderSearchInfo(CharacterLocation(4, 11), 1, MatchKind.READ)])
     ];
     expect(result, unorderedEquals(expected));
   }
@@ -645,21 +645,11 @@
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
       CiderSearchMatch(aPath, [
-        CharacterLocation(2, 8),
-        CharacterLocation(4, 12)
-      ], [
-        CiderSearchInfo(CharacterLocation(2, 8), 5, MatchKind.WRITE),
-        CiderSearchInfo(CharacterLocation(4, 12), 5, MatchKind.WRITE)
+        CiderSearchInfo(CharacterLocation(2, 8), 1, MatchKind.REFERENCE),
+        CiderSearchInfo(CharacterLocation(4, 12), 1, MatchKind.REFERENCE)
       ])
     ];
-    expect(result.map((e) => e.path),
-        unorderedEquals(expected.map((e) => e.path)));
-    // ignore: deprecated_member_use_from_same_package
-    expect(
-        // ignore: deprecated_member_use_from_same_package
-        result.map((e) => e.startPositions),
-        // ignore: deprecated_member_use_from_same_package
-        unorderedEquals(expected.map((e) => e.startPositions)));
+    expect(result, expected);
   }
 
   test_findReferences_typedef() async {
@@ -679,7 +669,7 @@
     var element = await _findElement(8, aPath);
     var result = await fileResolver.findReferences2(element);
     var expected = <CiderSearchMatch>[
-      CiderSearchMatch(bPath, [CharacterLocation(3, 8)],
+      CiderSearchMatch(bPath,
           [CiderSearchInfo(CharacterLocation(3, 8), 4, MatchKind.REFERENCE)])
     ];
     expect(result, unorderedEquals(expected));