Skip to content

Commit 4d1955e

Browse files
jensjohaCommit Queue
authored andcommitted
[analyzer] Report duplicate getter also if setter occurs first
Fixes #59977. Change-Id: I83ea36ff6f30c33625e50628a3bb2392caac9400 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/434061 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent 60b217f commit 4d1955e

File tree

2 files changed

+125
-0
lines changed

2 files changed

+125
-0
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,11 @@ class MemberDuplicateDefinitionVerifier {
615615
[name],
616616
),
617617
);
618+
} else {
619+
// Getter setter pair. Make sure the *getter* is in the getter map.
620+
if (element is PropertyAccessorFragmentImpl && element.isGetter) {
621+
getterScope[name] = element;
622+
}
618623
}
619624
} else {
620625
getterScope[name] = element;

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

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,26 @@ augment class C {
274274
);
275275
}
276276

277+
test_instance_getter_getter_setter() async {
278+
await assertErrorsInCode(
279+
r'''
280+
class A {
281+
int? get b => null;
282+
int? get b => 0;
283+
void set b(int? value) {}
284+
}
285+
''',
286+
[
287+
error(
288+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
289+
43,
290+
1,
291+
contextMessages: [message(testFile, 21, 1)],
292+
),
293+
],
294+
);
295+
}
296+
277297
test_instance_getter_method() async {
278298
await assertErrorsInCode(
279299
r'''
@@ -302,6 +322,46 @@ class C {
302322
''');
303323
}
304324

325+
test_instance_getter_setter_getter() async {
326+
await assertErrorsInCode(
327+
r'''
328+
class A {
329+
int? get b => null;
330+
void set b(int? value) {}
331+
int? get b => 0;
332+
}
333+
''',
334+
[
335+
error(
336+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
337+
71,
338+
1,
339+
contextMessages: [message(testFile, 21, 1)],
340+
),
341+
],
342+
);
343+
}
344+
345+
test_instance_getter_setter_setter() async {
346+
await assertErrorsInCode(
347+
r'''
348+
class A {
349+
int? get b => null;
350+
void set b(int? value) {}
351+
void set b(int? value) {}
352+
}
353+
''',
354+
[
355+
error(
356+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
357+
71,
358+
1,
359+
contextMessages: [message(testFile, 43, 1)],
360+
),
361+
],
362+
);
363+
}
364+
305365
test_instance_method_getter() async {
306366
await assertErrorsInCode(
307367
r'''
@@ -463,6 +523,46 @@ class C {
463523
''');
464524
}
465525

526+
test_instance_setter_getter_getter() async {
527+
await assertErrorsInCode(
528+
r'''
529+
class A {
530+
void set b(int? value) {}
531+
int? get b => null;
532+
int? get b => 0;
533+
}
534+
''',
535+
[
536+
error(
537+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
538+
71,
539+
1,
540+
contextMessages: [message(testFile, 49, 1)],
541+
),
542+
],
543+
);
544+
}
545+
546+
test_instance_setter_getter_setter() async {
547+
await assertErrorsInCode(
548+
r'''
549+
class A {
550+
void set b(int? value) {}
551+
int? get b => null;
552+
void set b(int? value) {}
553+
}
554+
''',
555+
[
556+
error(
557+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
558+
71,
559+
1,
560+
contextMessages: [message(testFile, 21, 1)],
561+
),
562+
],
563+
);
564+
}
565+
466566
test_instance_setter_method() async {
467567
await assertErrorsInCode(
468568
r'''
@@ -537,6 +637,26 @@ augment class C {
537637
''');
538638
}
539639

640+
test_instance_setter_setter_getter() async {
641+
await assertErrorsInCode(
642+
r'''
643+
class A {
644+
void set b(int? value) {}
645+
void set b(int? value) {}
646+
int? get b => null;
647+
}
648+
''',
649+
[
650+
error(
651+
CompileTimeErrorCode.DUPLICATE_DEFINITION,
652+
49,
653+
1,
654+
contextMessages: [message(testFile, 21, 1)],
655+
),
656+
],
657+
);
658+
}
659+
540660
@SkippedTest() // TODO(scheglov): implement augmentation
541661
test_instance_setter_setter_inAugmentation() async {
542662
await assertErrorsInCode(

0 commit comments

Comments
 (0)