From db166e423efd545ea1845619f88fdff89dbd9363 Mon Sep 17 00:00:00 2001 From: Sam Rawlins Date: Tue, 19 Nov 2019 17:44:19 +0000 Subject: [PATCH] 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 Commit-Queue: Samuel Rawlins --- pkg/analyzer/lib/src/generated/resolver.dart | 1 + .../src/diagnostics/unused_element_test.dart | 37 +++++++++++++++++++ .../src/js_backend/field_naming_mixin.dart | 4 -- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart index e59b861995d..e6af5202b55 100644 --- a/pkg/analyzer/lib/src/generated/resolver.dart +++ b/pkg/analyzer/lib/src/generated/resolver.dart @@ -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); } } diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart index 650ecc80ca9..66f4f049816 100644 --- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart +++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart @@ -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 { diff --git a/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart b/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart index 7e7bb4284c9..a0fb0b3ad16 100644 --- a/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart +++ b/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart @@ -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) {