mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:43:57 +00:00
Report DUPLICATE_DEFINITION for 'values' in enums.
Change-Id: I0df2f7286e8913b3a323fd19bb18a8d77f27bbe6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/232025 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
cc93c8815b
commit
6bcc451e59
|
@ -2788,6 +2788,17 @@ class EnumElementImpl extends AbstractClassElementImpl {
|
||||||
return super.typeParameters;
|
return super.typeParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ConstFieldElementImpl? get valuesField {
|
||||||
|
for (var field in fields) {
|
||||||
|
if (field is ConstFieldElementImpl &&
|
||||||
|
field.name == 'values' &&
|
||||||
|
field.isSyntheticEnumField) {
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void appendTo(ElementDisplayStringBuilder builder) {
|
void appendTo(ElementDisplayStringBuilder builder) {
|
||||||
builder.writeEnumElement(this);
|
builder.writeEnumElement(this);
|
||||||
|
|
|
@ -53,6 +53,11 @@ class DuplicateDefinitionVerifier {
|
||||||
var staticGetters = <String, Element>{};
|
var staticGetters = <String, Element>{};
|
||||||
var staticSetters = <String, Element>{};
|
var staticSetters = <String, Element>{};
|
||||||
|
|
||||||
|
var valuesField = enumElement.valuesField;
|
||||||
|
if (valuesField != null) {
|
||||||
|
staticGetters['values'] = valuesField;
|
||||||
|
}
|
||||||
|
|
||||||
for (EnumConstantDeclaration constant in node.constants) {
|
for (EnumConstantDeclaration constant in node.constants) {
|
||||||
_checkDuplicateIdentifier(staticGetters, constant.name);
|
_checkDuplicateIdentifier(staticGetters, constant.name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,6 +329,26 @@ f(,[]) {}
|
||||||
|
|
||||||
@reflectiveTest
|
@reflectiveTest
|
||||||
class DuplicateDefinitionEnumTest extends PubPackageResolutionTest {
|
class DuplicateDefinitionEnumTest extends PubPackageResolutionTest {
|
||||||
|
test_constant() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
foo, foo
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 16, 3),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test_constant_values() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
values
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 11, 6),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
test_instance_field_field() async {
|
test_instance_field_field() async {
|
||||||
await assertErrorsInCode(r'''
|
await assertErrorsInCode(r'''
|
||||||
enum E {
|
enum E {
|
||||||
|
@ -491,6 +511,48 @@ enum E {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test_static_constant_field() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
foo;
|
||||||
|
static int foo = 0;
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 29, 3),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test_static_constant_getter() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
foo;
|
||||||
|
static int get foo => 0;
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 33, 3),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test_static_constant_method() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
foo;
|
||||||
|
static void foo() {}
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 30, 3),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test_static_constant_setter() async {
|
||||||
|
await assertNoErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
foo;
|
||||||
|
static set foo(int _) {}
|
||||||
|
}
|
||||||
|
''');
|
||||||
|
}
|
||||||
|
|
||||||
test_static_field_field() async {
|
test_static_field_field() async {
|
||||||
await assertErrorsInCode(r'''
|
await assertErrorsInCode(r'''
|
||||||
enum E {
|
enum E {
|
||||||
|
@ -527,6 +589,17 @@ enum E {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test_static_field_values() async {
|
||||||
|
await assertErrorsInCode(r'''
|
||||||
|
enum E {
|
||||||
|
v;
|
||||||
|
static int values = 0;
|
||||||
|
}
|
||||||
|
''', [
|
||||||
|
error(CompileTimeErrorCode.DUPLICATE_DEFINITION, 27, 6),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
test_static_fieldFinal_getter() async {
|
test_static_fieldFinal_getter() async {
|
||||||
await assertErrorsInCode(r'''
|
await assertErrorsInCode(r'''
|
||||||
enum E {
|
enum E {
|
||||||
|
|
|
@ -98,16 +98,6 @@ enum E {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// TODO(scheglov) this is wrong, we should get an error
|
|
||||||
test_enum_field_static() async {
|
|
||||||
await assertNoErrorsInCode(r'''
|
|
||||||
enum E {
|
|
||||||
v;
|
|
||||||
static int values = 0;
|
|
||||||
}
|
|
||||||
''');
|
|
||||||
}
|
|
||||||
|
|
||||||
test_enum_getter() async {
|
test_enum_getter() async {
|
||||||
await assertErrorsInCode(r'''
|
await assertErrorsInCode(r'''
|
||||||
enum E {
|
enum E {
|
||||||
|
|
Loading…
Reference in a new issue