Issue 48396. Set 'dynamic' if invalid function reference resolution.

Bug: https://github.com/dart-lang/sdk/issues/48396
Change-Id: I9d7f617fd716b6a1eb8c2d38e64f1f5800a99f54
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/233529
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index 41802d0..cf14dd4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -521,23 +521,20 @@
         nameErrorEntity: function,
       );
 
-      if (functionType == null) {
+      if (functionType is FunctionType) {
+        function.staticType = functionType;
+        _resolve(
+          node: node,
+          rawType: functionType,
+          name: function.propertyName.name,
+        );
+      } else {
         // The target is known, but the method is not; [UNDEFINED_GETTER] is
         // reported elsewhere.
         node.staticType = DynamicTypeImpl.instance;
-        return;
-      } else {
-        if (functionType is FunctionType) {
-          function.staticType = functionType;
-          _resolve(
-            node: node,
-            rawType: functionType,
-            name: function.propertyName.name,
-          );
-        }
-
-        return;
       }
+
+      return;
     }
 
     var propertyElement = _resolver.typePropertyResolver
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index a2dab45..6cb3570 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -945,6 +945,22 @@
         reference, findElement.method('foo'), 'void Function(int)');
   }
 
+  test_instanceMethod_explicitReceiver_getter_wrongNumberOfTypeArguments() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+}
+
+void f(A a) {
+  // Extra `()` to force reading the type.
+  ((a).foo<double>);
+}
+''');
+
+    var reference = findNode.functionReference('foo<double>');
+    assertFunctionReference(reference, null, 'dynamic');
+  }
+
   test_instanceMethod_explicitReceiver_otherExpression() async {
     await assertNoErrorsInCode('''
 class A {