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));