Do not report that abstract methods should call super.
Change-Id: Ib365361c91b8b489c0d40c9097f2248ecca54176
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105344
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index ca7835f..93bc24d 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -4443,7 +4443,7 @@
}
void _checkForMustCallSuper(MethodDeclaration node) {
- if (node.isStatic) {
+ if (node.isStatic || node.isAbstract) {
return;
}
MethodElement element = _findOverriddenMemberThatMustCallSuper(node);
diff --git a/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart b/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart
index 32d9967..ed220c7 100644
--- a/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/must_call_super_test.dart
@@ -54,7 +54,7 @@
]);
}
- test_fromExtendingClass_abstractImplementation() async {
+ test_fromExtendingClass_abstractInSuperclass() async {
await assertNoErrorsInCode(r'''
import 'package:meta/meta.dart';
abstract class A {
@@ -68,6 +68,20 @@
''');
}
+ test_fromExtendingClass_abstractInSubclass() async {
+ await assertNoErrorsInCode(r'''
+import 'package:meta/meta.dart';
+abstract class A {
+ @mustCallSuper
+ void a() {}
+}
+class B extends A {
+ @override
+ void a();
+}
+''');
+ }
+
test_fromInterface() async {
await assertNoErrorsInCode(r'''
import 'package:meta/meta.dart';