[wildcards] find reference tests

See: https://github.com/dart-lang/sdk/issues/55681

Change-Id: Ia1f8cc08d7a79fe66fce9ac108543cb2a6aebd34
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/381943
Commit-Queue: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 1d2121e..622ee1d 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -577,6 +577,46 @@
     );
   }
 
+  Future<void> test_searchReferences_parameter_topLevelShadow_wildcard() async {
+    var code = '''
+int _ = 0;
+int f(int _) => _; 
+''';
+    await resolveTestCode(code);
+
+    var parameter = findElement.parameter('_');
+    var parameterMatches = await searchEngine.searchReferences(parameter);
+    expect(parameterMatches, isEmpty);
+
+    var topLevelVariable = findElement.topVar('_');
+    var topLevelVariableMatches =
+        await searchEngine.searchReferences(topLevelVariable);
+    expect(
+      topLevelVariableMatches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.READ &&
+              identical(m.element, findElement.topFunction('f')) &&
+              m.sourceRange.offset == code.indexOf('_;') &&
+              m.sourceRange.length == '_'.length;
+        }),
+      ]),
+    );
+  }
+
+  Future<void> test_searchReferences_parameter_wildcard() async {
+    var code = '''
+f(int _) {} 
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.parameter('_');
+    var matches = await searchEngine.searchReferences(element);
+
+    // No crashes.
+    expect(matches, isEmpty);
+  }
+
   Future<void>
       test_searchReferences_topFunction_parameter_optionalNamed_anywhere() async {
     var code = '''
@@ -603,6 +643,54 @@
     );
   }
 
+  Future<void> test_searchReferences_underscoreField() async {
+    var code = '''
+class A {
+  final _ = 1;
+  int a() => _;
+}
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.field('_');
+    var matches = await searchEngine.searchReferences(element);
+
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.READ &&
+              identical(m.element, findElement.method('a')) &&
+              m.sourceRange.offset == code.indexOf('_;') &&
+              m.sourceRange.length == '_'.length;
+        }),
+      ]),
+    );
+  }
+
+  Future<void> test_searchReferences_underscoreTopLevelVariable() async {
+    var code = '''
+final _ = 1;
+int f() => _;
+''';
+    await resolveTestCode(code);
+
+    var element = findElement.topVar('_');
+    var matches = await searchEngine.searchReferences(element);
+
+    expect(
+      matches,
+      unorderedEquals([
+        predicate((SearchMatch m) {
+          return m.kind == MatchKind.READ &&
+              identical(m.element, findElement.topFunction('f')) &&
+              m.sourceRange.offset == code.indexOf('_;') &&
+              m.sourceRange.length == '_'.length;
+        }),
+      ]),
+    );
+  }
+
   Future<void> test_searchTopLevelDeclarations() async {
     newFile('$testPackageLibPath/a.dart', '''
 class A {}