diff --git a/pkg/linter/lib/src/ast.dart b/pkg/linter/lib/src/ast.dart index b0ed598d163..c34b72055c6 100644 --- a/pkg/linter/lib/src/ast.dart +++ b/pkg/linter/lib/src/ast.dart @@ -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); diff --git a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart index b24be18be3c..9dd3890d1c4 100644 --- a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart +++ b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart @@ -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 { @override void visitSimpleIdentifier(SimpleIdentifier node) { - var element = getWriteOrReadElement(node); + var element = node.writeOrReadElement; // use method needInstance = diff --git a/pkg/linter/lib/src/rules/unnecessary_this.dart b/pkg/linter/lib/src/rules/unnecessary_this.dart index c11d4aff650..ecbe595ea12 100644 --- a/pkg/linter/lib/src/rules/unnecessary_this.dart +++ b/pkg/linter/lib/src/rules/unnecessary_this.dart @@ -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 { 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 { diff --git a/pkg/linter/lib/src/util/dart_type_utilities.dart b/pkg/linter/lib/src/util/dart_type_utilities.dart index 583f37ef7e7..dcb6de2daab 100644 --- a/pkg/linter/lib/src/util/dart_type_utilities.dart +++ b/pkg/linter/lib/src/util/dart_type_utilities.dart @@ -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, ); }