commit | 85bac75b0e03c739164c7b7924754be4766a4112 | [log] [tgz] |
---|---|---|
author | Paul Berry <paulberry@google.com> | Fri Oct 22 12:57:17 2021 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Fri Oct 22 12:57:17 2021 +0000 |
tree | 6c8222577017196e672d1bcf23c37ff6ebc4da48 | |
parent | b3a1e96dba48de4da70e1826a2ead9287028e7b8 [diff] |
Ensure that function reference resolution assigns an element and type when the method is inherited. Change-Id: I2053c625617aa03bcad9ffa920c0ff27823a0a9d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217701 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Paul Berry <paulberry@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 192c7e5..6257b73 100644 --- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart +++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -656,6 +656,8 @@ } if (method is PropertyAccessorElement) { + function.staticElement = method; + function.staticType = method.returnType; _resolve(node: node, rawType: method.variable.type); return; }
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 9a56b92..92e8e49 100644 --- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -578,6 +578,23 @@ findElement.getter('foo'), 'void Function(int)'); } + test_instanceGetter_functionTyped_inherited() async { + await assertNoErrorsInCode(''' +abstract class A { + late void Function<T>(T) foo; +} +abstract class B extends A { + bar() { + foo<int>; + } +} + +'''); + + assertFunctionReference(findNode.functionReference('foo<int>;'), + findElement.getter('foo'), 'void Function(int)'); + } + test_instanceMethod() async { await assertNoErrorsInCode(''' class A {