Update unnecessary_getters_setters to allow for non-basic assignments (#2724)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ee59cc..e2fc7f8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,8 @@
and setters with annotations.
- update `missing_whitespace_between_adjacent_strings` to allow String
interpolations at the beginning and end of String literals.
+- update `unnecessary_getters_setters` to allow for setters with non-basic
+ assignments (for example, `??=` or `+=`).
# 1.6.1
diff --git a/lib/src/ast.dart b/lib/src/ast.dart
index ad5572f..8f1b09a 100644
--- a/lib/src/ast.dart
+++ b/lib/src/ast.dart
@@ -162,11 +162,17 @@
///
/// A simple getter takes one of these basic forms:
///
-/// get x => _simpleIdentifier;
+/// ```dart
+/// get x => _simpleIdentifier;
+/// ```
+///
/// or
-/// get x {
-/// return _simpleIdentifier;
-/// }
+///
+/// ```dart
+/// get x {
+/// return _simpleIdentifier;
+/// }
+/// ```
bool isSimpleGetter(MethodDeclaration declaration) {
if (!declaration.isGetter) {
return false;
@@ -190,14 +196,18 @@
///
/// A simple setter takes this basic form:
///
-/// var _x;
-/// set(x) {
-/// _x = x;
-/// }
+/// ```dart
+/// var _x;
+/// set(x) {
+/// _x = x;
+/// }
+/// ```
///
/// or:
///
-/// set(x) => _x = x;
+/// ```dart
+/// set(x) => _x = x;
+/// ```
///
/// where the static type of the left and right hand sides must be the same.
bool isSimpleSetter(MethodDeclaration setter) {
@@ -274,18 +284,20 @@
if (expression is! AssignmentExpression) {
return false;
}
- var assignment = expression;
+ if (expression.operator.type != TokenType.EQ) {
+ return false;
+ }
- var leftHandSide = assignment.leftHandSide;
- var rightHandSide = assignment.rightHandSide;
+ var leftHandSide = expression.leftHandSide;
+ var rightHandSide = expression.rightHandSide;
if (leftHandSide is SimpleIdentifier && rightHandSide is SimpleIdentifier) {
- var leftElement = assignment.writeElement;
+ var leftElement = expression.writeElement;
if (leftElement is! PropertyAccessorElement || !leftElement.isSynthetic) {
return false;
}
// To guard against setters used as type constraints
- if (assignment.writeType != rightHandSide.staticType) {
+ if (expression.writeType != rightHandSide.staticType) {
return false;
}
diff --git a/test_data/rules/unnecessary_getters_setters.dart b/test_data/rules/unnecessary_getters_setters.dart
index 40c59b3..346bade 100644
--- a/test_data/rules/unnecessary_getters_setters.dart
+++ b/test_data/rules/unnecessary_getters_setters.dart
@@ -74,6 +74,14 @@
}
}
+class Box8 {
+ var _contents;
+ get contents => _contents; //OK (setter uses `??=`)
+ set contents(value) {
+ _contents ??= value;
+ }
+}
+
class LowerCase {
var _contents;
get contents => _contents;