diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart index b55e65d7341..dc309b06dfc 100644 --- a/pkg/analyzer/lib/src/error/inheritance_override.dart +++ b/pkg/analyzer/lib/src/error/inheritance_override.dart @@ -242,10 +242,16 @@ class _ClassVerifier { // No concrete implementation of the name. if (concreteElement == null) { - if (!_reportConcreteClassWithAbstractMember(name.name)) { - inheritedAbstract ??= []; - inheritedAbstract.add(interfaceElement); + if (_reportConcreteClassWithAbstractMember(name.name)) { + continue; } + // We already reported ILLEGAL_ENUM_VALUES_INHERITANCE. + if (classElement.isEnum && + const {'values', 'values='}.contains(name.name)) { + continue; + } + inheritedAbstract ??= []; + inheritedAbstract.add(interfaceElement); continue; } diff --git a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart index 234df7e1b4e..4c32c16351b 100644 --- a/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart +++ b/pkg/analyzer/test/src/diagnostics/illegal_enum_values_inheritance_test.dart @@ -87,7 +87,35 @@ abstract class B extends A implements Enum {} ]); } - test_enum_method() async { + test_enum_getter_fromImplements() async { + await assertErrorsInCode(r''' +class A { + int get values => 0; +} + +enum E implements A { + v +} +''', [ + error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1), + ]); + } + + test_enum_method_fromImplements() async { + await assertErrorsInCode(r''' +class A { + int values() => 0; +} + +enum E implements A { + v +} +''', [ + error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 39, 1), + ]); + } + + test_enum_method_fromWith() async { await assertErrorsInCode(r''' mixin M { int values() => 0; @@ -101,6 +129,34 @@ enum E with M { ]); } + test_enum_setter_fromImplements() async { + await assertErrorsInCode(r''' +class A { + set values(int _) {} +} + +enum E implements A { + v +} +''', [ + error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1), + ]); + } + + test_enum_setter_fromWith() async { + await assertErrorsInCode(r''' +mixin M { + set values(int _) {} +} + +enum E with M { + v +} +''', [ + error(CompileTimeErrorCode.ILLEGAL_ENUM_VALUES_INHERITANCE, 41, 1), + ]); + } + test_mixin_field() async { await assertErrorsInCode(r''' class A {