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 {