[analyzer] Add tests for null-aware elements and LSP navigation

Part of https://github.com/dart-lang/sdk/issues/56989

Change-Id: I24b121ee476f42b2108daddf6c0b63525052434f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/399080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index 7abe000..5b653d9 100644
--- a/pkg/analysis_server/test/lsp/definition_test.dart
+++ b/pkg/analysis_server/test/lsp/definition_test.dart
@@ -387,6 +387,54 @@
     await testContents(contents);
   }
 
+  Future<void> test_function_inNullAwareElement_inList() async {
+    var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+  return [?fo^o()];
+}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_function_inNullAwareElement_inSet() async {
+    var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+  return {?fo^o()};
+}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_function_inNullAwareKey_inMap() async {
+    var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+  return {?fo^o(): "value"};
+}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_function_inNullAwareValue_inMap() async {
+    var contents = '''
+bool? [!foo!]() => null;
+
+bar() {
+  return {"key": ?fo^o()};
+}
+''';
+
+    await testContents(contents);
+  }
+
   Future<void> test_functionInPattern() async {
     var contents = '''
 bool [!greater!](int x, int y) => x > y;
@@ -843,6 +891,54 @@
     await testContents(contents);
   }
 
+  Future<void> test_type_inNullAwareElement_inList() async {
+    var contents = '''
+f() {
+  final a = [?A^];
+}
+
+class [!A!] {}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_type_inNullAwareElement_inSet() async {
+    var contents = '''
+f() {
+  final a = {?A^};
+}
+
+class [!A!] {}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_type_inNullAwareKey_inMap() async {
+    var contents = '''
+f() {
+  final a = {?A^, "value"};
+}
+
+class [!A!] {}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_type_inNullAwareValue_inMap() async {
+    var contents = '''
+f() {
+  final a = {"key": ?A^};
+}
+
+class [!A!] {}
+''';
+
+    await testContents(contents);
+  }
+
   Future<void> test_unopenFile() async {
     var contents = '''
 [!foo!]() {
diff --git a/pkg/analysis_server/test/lsp/super_test.dart b/pkg/analysis_server/test/lsp/super_test.dart
index f760bb7..e3e3f81 100644
--- a/pkg/analysis_server/test/lsp/super_test.dart
+++ b/pkg/analysis_server/test/lsp/super_test.dart
@@ -237,6 +237,69 @@
     );
   }
 
+  Future<void>
+  test_method_parameter_defaultValue_inNullAwareElement_inList() async {
+    await verifyGoToSuper(
+      TestCode.parse('''
+class A {
+  void [!foo!]([List<int> arg = const []]) {}
+}
+
+class B extends A {
+  @override
+  void foo([List<int> arg = const [?nu^ll]]) {}
+}
+'''),
+    );
+  }
+
+  Future<void>
+  test_method_parameter_defaultValue_inNullAwareElement_inSet() async {
+    await verifyGoToSuper(
+      TestCode.parse('''
+class A {
+  void [!foo!]([Set<int> arg = const {}]) {}
+}
+
+class B extends A {
+  @override
+  void foo([Set<int> arg = const {?nu^ll}]) {}
+}
+'''),
+    );
+  }
+
+  Future<void> test_method_parameter_defaultValue_inNullAwareKey_inMap() async {
+    await verifyGoToSuper(
+      TestCode.parse('''
+class A {
+  void [!foo!]([Map<int, String> arg = const {}]) {}
+}
+
+class B extends A {
+  @override
+  void foo([Map<int, String> arg = const {?nu^ll: "value"}]) {}
+}
+'''),
+    );
+  }
+
+  Future<void>
+  test_method_parameter_defaultValue_inNullAwareValue_inMap() async {
+    await verifyGoToSuper(
+      TestCode.parse('''
+class A {
+  void [!foo!]([Map<String, int> arg = const {}]) {}
+}
+
+class B extends A {
+  @override
+  void foo([Map<String, int> arg = const {"key": ?nu^ll}]) {}
+}
+'''),
+    );
+  }
+
   Future<void> test_methodName() async {
     await verifyGoToSuper(
       TestCode.parse('''