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;