Skip to content

Commit fee0f5f

Browse files
scheglovCommit Queue
authored andcommitted
Issue 61940. Fix for reporting fieldInitializedInParameterAndInitializer and fieldInitializedByMultipleInitializers when the field declaration has initializer.
Bug: #61940 Change-Id: I682e4a226a3458d1c53dbeb2d7727e03bc34ee65 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/462541 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent ab079ef commit fee0f5f

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

pkg/analyzer/lib/src/error/constructor_fields_verifier.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ class _Constructor {
206206
diag.fieldInitializedInInitializerAndDeclaration,
207207
);
208208
}
209+
fields[fieldElement] = _InitState.initInInitializer;
209210
} else if (state == _InitState.initInFieldFormal) {
210211
diagnosticReporter.atNode(
211212
fieldName,
@@ -244,6 +245,7 @@ class _Constructor {
244245
arguments: [fieldElement.displayName],
245246
);
246247
}
248+
fields[fieldElement] = _InitState.initInFieldFormal;
247249
} else if (state == _InitState.initInFieldFormal) {
248250
// Reported in DuplicateDefinitionVerifier._checkDuplicateIdentifier
249251
}

pkg/analyzer/test/src/diagnostics/field_initialized_by_multiple_initializers_test.dart

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,19 @@ class A {
169169
''');
170170
}
171171

172-
test_class_two_initializers() async {
172+
test_class_two_initializers_initInDeclaration() async {
173+
await assertErrorsInCode(
174+
r'''
175+
class A {
176+
int x = 0;
177+
A() : x = 0, x = 1 {}
178+
}
179+
''',
180+
[error(_errorCode, 38, 1)],
181+
);
182+
}
183+
184+
test_class_two_initializers_noInitInDeclaration() async {
173185
await assertErrorsInCode(
174186
r'''
175187
class A {

pkg/analyzer/test/src/diagnostics/field_initialized_in_parameter_and_initializer_test.dart

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,19 @@ augment class A {
4444
]);
4545
}
4646

47-
test_class_fieldFormalParameter_initializer() async {
47+
test_class_fieldFormalParameter_initializer_initInDeclaration() async {
48+
await assertErrorsInCode(
49+
r'''
50+
class A {
51+
int x = 0;
52+
A(this.x) : x = 1 {}
53+
}
54+
''',
55+
[error(diag.fieldInitializedInParameterAndInitializer, 37, 1)],
56+
);
57+
}
58+
59+
test_class_fieldFormalParameter_initializer_noInitInDeclaration() async {
4860
await assertErrorsInCode(
4961
r'''
5062
class A {

0 commit comments

Comments
 (0)