Extension type. Overrides notification.

Change-Id: I1865e0d44093c1501b422d1b6d34fbc1e9612db8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323943
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov 2023-09-01 20:44:38 +00:00 committed by Commit Queue
parent 234c129a81
commit 49f5312fed
2 changed files with 98 additions and 0 deletions

View file

@ -31,6 +31,8 @@ class DartUnitOverridesComputer {
_classMembers(unitMember.members);
} else if (unitMember is EnumDeclaration) {
_classMembers(unitMember.members);
} else if (unitMember is ExtensionTypeDeclaration) {
_classMembers(unitMember.members);
} else if (unitMember is MixinDeclaration) {
_classMembers(unitMember.members);
}

View file

@ -909,6 +909,102 @@ enum E with M {
assertNoInterfaceMembers();
}
Future<void> test_extensionType_class_getterByGetter() async {
addTestFile('''
class A {
int get foo => 0; // A
}
extension type B(A it) implements A {
int get foo => 0; // B
}
''');
await prepareOverrides();
assertHasOverride('foo => 0; // B');
assertNoSuperMember();
assertHasInterfaceMember('foo => 0; // A');
}
Future<void> test_extensionType_class_methodByMethod() async {
addTestFile('''
class A {
void foo() {} // A
}
extension type B(A it) implements A {
void foo() {} // B
}
''');
await prepareOverrides();
assertHasOverride('foo() {} // B');
assertNoSuperMember();
assertHasInterfaceMember('foo() {} // A');
}
Future<void> test_extensionType_class_setterBySetter() async {
addTestFile('''
class A {
set foo(int _) {} // A
}
extension type B(A it) implements A {
set foo(int _) {} // B
}
''');
await prepareOverrides();
assertHasOverride('foo(int _) {} // B');
assertNoSuperMember();
assertHasInterfaceMember('foo(int _) {} // A');
}
Future<void> test_extensionType_extensionType_getterByGetter() async {
addTestFile('''
extension type A(int it) {
int get foo => 0; // A
}
extension type B(int it) implements A {
int get foo => 0; // B
}
''');
await prepareOverrides();
assertHasOverride('foo => 0; // B');
assertNoSuperMember();
assertHasInterfaceMember('foo => 0; // A');
}
Future<void> test_extensionType_extensionType_methodByMethod() async {
addTestFile('''
extension type A(int it) {
void foo() {} // A
}
extension type B(int it) implements A {
void foo() {} // B
}
''');
await prepareOverrides();
assertHasOverride('foo() {} // B');
assertNoSuperMember();
assertHasInterfaceMember('foo() {} // A');
}
Future<void> test_extensionType_extensionType_setterBySetter() async {
addTestFile('''
extension type A(int it) {
set foo(int _) {} // A
}
extension type B(int it) implements A {
set foo(int _) {} // B
}
''');
await prepareOverrides();
assertHasOverride('foo(int _) {} // B');
assertNoSuperMember();
assertHasInterfaceMember('foo(int _) {} // A');
}
Future<void> test_mixin_interface_method_direct_single() async {
addTestFile('''
class A {