[element model] migrate `unnecessary_this`
Bug: https://github.com/dart-lang/linter/issues/5099
Change-Id: I46c62d689518c1091d4aa9262b6939948f6be515
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394562
Auto-Submit: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/linter/analyzer_use_new_elements.txt b/pkg/linter/analyzer_use_new_elements.txt
index 129865e..7204072 100644
--- a/pkg/linter/analyzer_use_new_elements.txt
+++ b/pkg/linter/analyzer_use_new_elements.txt
@@ -1,9 +1,7 @@
lib/src/ast.dart
lib/src/extensions.dart
-lib/src/rules/analyzer_use_new_elements.dart
lib/src/rules/avoid_renaming_method_parameters.dart
lib/src/rules/avoid_setters_without_getters.dart
-lib/src/rules/avoid_types_as_parameter_names.dart
lib/src/rules/avoid_void_async.dart
lib/src/rules/deprecated_member_use_from_same_package.dart
lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
@@ -12,7 +10,6 @@
lib/src/rules/prefer_initializing_formals.dart
lib/src/rules/public_member_api_docs.dart
lib/src/rules/unnecessary_overrides.dart
-lib/src/rules/unnecessary_this.dart
lib/src/rules/use_build_context_synchronously.dart
lib/src/rules/use_key_in_widget_constructors.dart
lib/src/rules/use_late_for_private_fields_and_variables.dart
diff --git a/pkg/linter/lib/src/rules/unnecessary_this.dart b/pkg/linter/lib/src/rules/unnecessary_this.dart
index 6a89ad3..7e4f105 100644
--- a/pkg/linter/lib/src/rules/unnecessary_this.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_this.dart
@@ -4,7 +4,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import '../analyzer.dart';
import '../ast.dart';
@@ -49,11 +49,11 @@
void visitThisExpression(ThisExpression node) {
var parent = node.parent;
- Element? element;
+ Element2? element;
if (parent is PropertyAccess && !parent.isNullAware) {
- element = getWriteOrReadElement(parent.propertyName);
+ element = getWriteOrReadElement2(parent.propertyName);
} else if (parent is MethodInvocation && !parent.isNullAware) {
- element = parent.methodName.staticElement;
+ element = parent.methodName.element;
} else {
return;
}
@@ -63,25 +63,23 @@
}
}
- bool _canReferenceElementWithoutThisPrefix(Element? element, AstNode node) {
- if (element == null) {
- return false;
- }
+ bool _canReferenceElementWithoutThisPrefix(Element2? element, AstNode node) {
+ if (element == null) return false;
var id = element.displayName;
- var isSetter = element is PropertyAccessorElement && element.isSetter;
- var result = resolveNameInScope(id, node, shouldResolveSetter: isSetter);
+ var result = resolveNameInScope(id, node,
+ shouldResolveSetter: element is SetterElement);
// No result, definitely no shadowing.
// The requested element is inherited, or from an extension.
- if (result.isNone) {
- return true;
- }
+ if (result.isNone) return true;
+
+ var resultElement = result.element2;
// The result has the matching name, might be shadowing.
// Check that the element is the same.
if (result.isRequestedName) {
- return result.element == element;
+ return resultElement == element;
}
// The result has the same basename, but not the same name.
@@ -90,8 +88,8 @@
// - prevents us from going up to the library scope;
// - the requested element must be inherited, or from an extension.
if (result.isDifferentName) {
- var enclosing = result.element?.enclosingElement3;
- return enclosing is ClassElement;
+ var enclosing = resultElement?.enclosingElement2;
+ return enclosing is ClassElement2;
}
// Should not happen.