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:
committed by
dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
bfca71d6d6
commit
61891e2667
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user