Fix unused elements when setter used

Fixes #35677

Change-Id: I2daf8b4e2cc8e1a11ed0dde730d4126154b60910
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125620
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
Sam Rawlins
2019-11-19 17:44:19 +00:00
committed by commit-bot@chromium.org
parent 2c5705ad23
commit db166e423e
3 changed files with 38 additions and 4 deletions
@@ -2089,6 +2089,7 @@ class GatherUsedLocalElementsVisitor extends RecursiveAstVisitor {
if (element is PropertyAccessorElement && element.isSetter) {
element = (element as PropertyAccessorElement).correspondingGetter;
}
usedElements.members.add(element);
usedElements.readMembers.add(element);
}
}
@@ -402,6 +402,43 @@ main() {
''');
}
test_getter_isUsed_invocation_subclass_plusPlus() async {
await assertNoErrorsInCode(r'''
class A {
int __a = 0;
int get _a => __a;
void set _a(int val) {
__a = val;
}
int b() => _a++;
}
class B extends A {
@override
int get _a => 3;
}
''');
}
test_getter_notUsed_invocation_subclass() async {
await assertErrorsInCode(r'''
class A {
int __a = 0;
int get _a => __a;
void set _a(int val) {
__a = val;
}
int b() => _a = 7;
}
class B extends A {
@override
int get _a => 3;
}
''', [
error(HintCode.UNUSED_ELEMENT, 35, 2),
error(HintCode.UNUSED_ELEMENT, 155, 2),
]);
}
test_getter_notUsed_noReference() async {
await assertErrorsInCode(r'''
class A {
@@ -106,8 +106,6 @@ class _FieldNamingScope {
/// The number of locally used fields. Depending on the naming source
/// (e.g. inheritance based or globally unique for mixixns) this
/// might be different from [inheritanceBasedFieldNameCounter].
// TODO(35677): remove
// ignore: unused_element
int get _localFieldNameCounter => _fieldNameCounter;
void set _localFieldNameCounter(int val) {
_fieldNameCounter = val;
@@ -192,8 +190,6 @@ class _FieldNamingScope {
/// in generated names themselves.
class _MixinFieldNamingScope extends _FieldNamingScope {
@override
// TODO(35677): remove
// ignore: unused_element
int get _localFieldNameCounter => registry.globalCount;
@override
void set _localFieldNameCounter(int val) {