linter: Simplify code that uses the "write or read element"

Change-Id: I565ce698939c34be0c32dbc0c0204dd6b962fe1d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/503141
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
This commit is contained in:
Sam Rawlins
2026-05-13 09:08:03 -07:00
committed by dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent bfca71d6d6
commit 61891e2667
4 changed files with 11 additions and 44 deletions
-33
View File
@@ -91,12 +91,6 @@ SyntacticEntity getNodeToAnnotate(AstNode node) {
return node;
}
/// If the [node] is the finishing identifier of an assignment, return its
/// "writeElement", otherwise return its "element", which might be
/// thought as the "readElement".
Element? getWriteOrReadElement(SimpleIdentifier node) =>
_getWriteElement(node) ?? node.element;
bool hasConstantError(Expression node) =>
node.computeConstantValue()?.diagnostics.isNotEmpty ?? true;
@@ -293,33 +287,6 @@ int? _getIntValue(
return negated ? -value : value;
}
/// If the [node] is the target of a [CompoundAssignmentExpression],
/// return the corresponding "writeElement", which is the local variable,
/// the setter referenced with a [SimpleIdentifier] or a [PropertyAccess],
/// or the `[]=` operator.
Element? _getWriteElement(AstNode node) {
var parent = node.parent;
if (parent is AssignmentExpression && parent.leftHandSide == node) {
return parent.writeElement;
}
if (parent is PostfixExpression) {
return parent.writeElement;
}
if (parent is PrefixExpression) {
return parent.writeElement;
}
if (parent is PrefixedIdentifier && parent.identifier == node) {
return _getWriteElement(parent);
}
if (parent is PropertyAccess && parent.propertyName == node) {
return _getWriteElement(parent);
}
return null;
}
bool _hasFieldOrMethod(ClassMember element, String name) =>
(element is MethodDeclaration && element.name.lexeme == name) ||
(element is FieldDeclaration && getFieldName(element, name) != null);
@@ -9,9 +9,9 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/dart/ast/extensions.dart'; // ignore: implementation_imports
import '../analyzer.dart';
import '../ast.dart';
import '../diagnostic.dart' as diag;
const _desc = r'Prefer putting asserts in initializer lists.';
@@ -48,7 +48,7 @@ class _AssertVisitor extends RecursiveAstVisitor<void> {
@override
void visitSimpleIdentifier(SimpleIdentifier node) {
var element = getWriteOrReadElement(node);
var element = node.writeOrReadElement;
// use method
needInstance =
@@ -9,9 +9,9 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/dart/ast/extensions.dart'; // ignore: implementation_imports
import '../analyzer.dart';
import '../ast.dart';
import '../diagnostic.dart' as diag;
import '../util/scope.dart';
@@ -56,7 +56,7 @@ class _Visitor extends SimpleAstVisitor<void> {
Element? element;
if (parent is PropertyAccess && !parent.isNullAware) {
element = getWriteOrReadElement(parent.propertyName);
element = parent.propertyName.writeOrReadElement;
} else if (parent is MethodInvocation && !parent.isNullAware) {
element = parent.methodName.element;
} else {
@@ -6,8 +6,8 @@ import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:analyzer/src/dart/ast/extensions.dart'; // ignore: implementation_imports
import '../ast.dart';
import '../extensions.dart';
bool argumentsMatchParameters(
@@ -105,8 +105,8 @@ bool canonicalElementsFromIdentifiersAreEqual(
if (expression1 is SimpleIdentifier) {
return expression2 is SimpleIdentifier &&
canonicalElementsAreEqual(
getWriteOrReadElement(expression1),
getWriteOrReadElement(expression2),
expression1.writeOrReadElement,
expression2.writeOrReadElement,
);
}
@@ -117,8 +117,8 @@ bool canonicalElementsFromIdentifiersAreEqual(
expression2.prefix.element,
) &&
canonicalElementsAreEqual(
getWriteOrReadElement(expression1.identifier),
getWriteOrReadElement(expression2.identifier),
expression1.identifier.writeOrReadElement,
expression2.identifier.writeOrReadElement,
);
}
@@ -127,8 +127,8 @@ bool canonicalElementsFromIdentifiersAreEqual(
var target2 = expression2.target;
return canonicalElementsFromIdentifiersAreEqual(target1, target2) &&
canonicalElementsAreEqual(
getWriteOrReadElement(expression1.propertyName),
getWriteOrReadElement(expression2.propertyName),
expression1.propertyName.writeOrReadElement,
expression2.propertyName.writeOrReadElement,
);
}