[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.