Issue 43151. Fix crash when a field shadows a super-interface method.

Bug: https://github.com/dart-lang/sdk/issues/43151
Change-Id: I27e78815007e12edfefc81b5e49eed30bb633229
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/159740
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov 2020-08-24 14:29:24 +00:00 committed by commit-bot@chromium.org
parent e7c79ae9ae
commit e868d3076c
2 changed files with 21 additions and 1 deletions

View file

@ -117,7 +117,13 @@ class InstanceMemberInferrer {
currentClassElement,
getterName,
);
overriddenGetters ??= const [];
if (overriddenGetters != null) {
overriddenGetters = overriddenGetters.where((e) {
return e is PropertyAccessorElement && e.isGetter;
}).toList();
} else {
overriddenGetters = const [];
}
var setterName = Name(elementLibraryUri, '$elementName=');
var overriddenSetters = inheritance.getOverridden2(

View file

@ -386,6 +386,20 @@ class C implements A, B {
_assertGetterTypeDynamic(foo);
}
test_invalid_field_overrides_method() async {
await resolveTestCode('''
abstract class A {
List<T> foo<T>() {}
}
class B implements A {
var foo = <String, int>{};
}
''');
var foo = findElement.field('foo', of: 'B');
_assertFieldType(foo, 'Map<String, int>');
}
test_invalid_inheritanceCycle() async {
await resolveTestCode('''
class A extends C {}