Issue 60495. Fix for invalid nested function typed formal parameter in generic function type.

Bug: https://github.com/dart-lang/sdk/issues/60495
Change-Id: Iee26bf01aba2ce55be998971ab943d125b227378
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/421400
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 1209f53..e20cf8e 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -2071,9 +2071,11 @@
     _parameters.add(element);
     if (name == null) {
       return null;
-    } else {
-      return _addReference('@parameter', name, element);
     }
+    if (fragment.reference == null) {
+      return null;
+    }
+    return _addReference('@parameter', name, element);
   }
 
   void addPropertyAccessorSynthetic(PropertyAccessorElementImpl element) {
diff --git a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
index c82e87e..d425c1f 100644
--- a/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/top_level_variable_test.dart
@@ -1077,6 +1077,37 @@
 ''');
   }
 
+  test_variable_functionTyped_nested_invalid_functionTypedFormal() async {
+    var library = await buildLibrary(r'''
+final int Function(int, {void fn()})? foo;
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    <testLibraryFragment>
+      element: <testLibrary>
+      topLevelVariables
+        foo @38
+          reference: <testLibraryFragment>::@topLevelVariable::foo
+          element: <testLibrary>::@topLevelVariable::foo
+          getter2: <testLibraryFragment>::@getter::foo
+      getters
+        synthetic get foo
+          reference: <testLibraryFragment>::@getter::foo
+          element: <testLibraryFragment>::@getter::foo#element
+  topLevelVariables
+    final foo
+      reference: <testLibrary>::@topLevelVariable::foo
+      firstFragment: <testLibraryFragment>::@topLevelVariable::foo
+      type: int Function(int, {void Function() fn})?
+      getter: <testLibraryFragment>::@getter::foo#element
+  getters
+    synthetic static get foo
+      firstFragment: <testLibraryFragment>::@getter::foo
+''');
+  }
+
   test_variable_getterInLib_setterInPart() async {
     newFile('$testPackageLibPath/a.dart', '''
 part of my.lib;