[migrate] lib/src/dart/element/extensions.dart

Change-Id: If40593231395c8277a8b2fbb520bc0a77c518367
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/414901
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Devon Carew <devoncarew@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index e216a8a..7a50f3b 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -2,10 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// ignore_for_file: analyzer_use_new_elements
-
 import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/element2.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -23,6 +20,14 @@
 }
 
 extension Element2Extension on Element2 {
+  TypeImpl? get firstParameterType {
+    var self = this;
+    if (self is MethodElement2OrMember) {
+      return self.formalParameters.firstOrNull?.type;
+    }
+    return null;
+  }
+
   /// Return `true` if this element, the enclosing class (if there is one), or
   /// the enclosing library, has been annotated with the `@doNotStore`
   /// annotation.
@@ -139,78 +144,11 @@
   }
 }
 
-extension ElementExtension on Element {
-  /// Return `true` if this element, the enclosing class (if there is one), or
-  /// the enclosing library, has been annotated with the `@doNotStore`
-  /// annotation.
-  bool get hasOrInheritsDoNotStore {
-    if (hasDoNotStore) {
-      return true;
-    }
-
-    var ancestor = enclosingElement3;
-    if (ancestor is InterfaceElement) {
-      if (ancestor.hasDoNotStore) {
-        return true;
-      }
-      ancestor = ancestor.enclosingElement3;
-    } else if (ancestor is ExtensionElement) {
-      if (ancestor.hasDoNotStore) {
-        return true;
-      }
-      ancestor = ancestor.enclosingElement3;
-    }
-
-    return ancestor is CompilationUnitElement && ancestor.library.hasDoNotStore;
-  }
-
-  /// Return `true` if this element is an instance member of a class or mixin.
-  ///
-  /// Only [MethodElement]s and [PropertyAccessorElement]s are supported.
-  /// We intentionally exclude [ConstructorElement]s - they can only be
-  /// invoked in instance creation expressions, and [FieldElement]s - they
-  /// cannot be invoked directly and are always accessed using corresponding
-  /// [PropertyAccessorElement]s.
-  bool get isInstanceMember {
-    assert(this is! PropertyInducingElement,
-        'Check the PropertyAccessorElement instead');
-    var this_ = this;
-    var enclosing = this_.enclosingElement3;
-    if (enclosing is InterfaceElement) {
-      return this_ is MethodElement && !this_.isStatic ||
-          this_ is PropertyAccessorElement && !this_.isStatic;
-    }
-    return false;
-  }
-}
-
-extension ExecutableElement2OrMemberQuestionExtension
-    on ExecutableElement2OrMember? {
-  TypeImpl? get firstParameterType {
-    var self = this;
-    if (self is MethodElement2OrMember) {
-      return self.formalParameters.firstOrNull?.type;
-    }
-    return null;
-  }
-}
-
-extension ExecutableElementExtension on ExecutableElement {
+extension ExecutableElement2Extension on ExecutableElement2 {
   /// Whether the enclosing element is the class `Object`.
   bool get isObjectMember {
-    var enclosing = enclosingElement3;
-    return enclosing is ClassElement && enclosing.isDartCoreObject;
-  }
-}
-
-extension ExecutableElementOrMemberQuestionExtension
-    on ExecutableElementOrMember? {
-  TypeImpl? get firstParameterType {
-    var self = this;
-    if (self is MethodElementOrMember) {
-      return self.parameters.firstOrNull?.type;
-    }
-    return null;
+    var enclosing = enclosingElement2;
+    return enclosing is ClassElement2 && enclosing.isDartCoreObject;
   }
 }
 
@@ -222,7 +160,7 @@
     ParameterKind? kind,
     bool? isCovariant,
   }) {
-    var firstFragment = this.firstFragment as ParameterElementMixin;
+    var firstFragment = this.firstFragment as ParameterElementImpl;
     return FormalParameterElementImpl(
       firstFragment.copyWith(
         type: type,
@@ -245,7 +183,7 @@
 }
 
 extension ParameterElementMixinExtension on ParameterElementMixin {
-  /// Return [ParameterElement] with the specified properties replaced.
+  /// Return [ParameterElementImpl] with the specified properties replaced.
   ParameterElementImpl copyWith({
     TypeImpl? type,
     ParameterKind? kind,
@@ -257,15 +195,6 @@
       kind ?? parameterKind,
     )..isExplicitlyCovariant = isCovariant ?? this.isCovariant;
   }
-
-  /// Returns `this`, converted to a [ParameterElementImpl] if it isn't one
-  /// already.
-  ParameterElementImpl toImpl() {
-    return switch (this) {
-      ParameterElementImpl p => p,
-      _ => copyWith(),
-    };
-  }
 }
 
 extension RecordTypeExtension on RecordType {
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 164cfe8..5a02508 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -1066,9 +1066,9 @@
       );
       if (parameter.isCovariant != shouldBeCovariant) {
         transformedParameters ??= [
-          for (var parameter in parameters) parameter.toImpl()
+          for (var parameter in parameters) parameter.declaration
         ];
-        transformedParameters[index] = parameter.copyWith(
+        transformedParameters[index] = parameter.declaration.copyWith(
           isCovariant: shouldBeCovariant,
         );
       }
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index 8b7175c..bf5875d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -23,7 +23,6 @@
 import 'package:analyzer/src/generated/resolver.dart';
 import 'package:analyzer/src/generated/scope_helpers.dart';
 import 'package:analyzer/src/generated/super_context.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
 
 class PropertyElementResolver with ScopeHelpers {
   final ResolverVisitor _resolver;
@@ -897,17 +896,17 @@
     required bool hasRead,
     required bool hasWrite,
   }) {
-    var readElement = result.getter2?.asElement;
-    var writeElement = result.setter2?.asElement;
+    var readElement = result.getter2;
+    var writeElement = result.setter2;
 
     var contextType = hasRead
-        ? readElement.firstParameterType
-        : writeElement.firstParameterType;
+        ? readElement?.firstParameterType
+        : writeElement?.firstParameterType;
 
     return PropertyElementResolverResult(
       atDynamicTarget: atDynamicTarget,
-      readElementRequested2: readElement?.asElement2,
-      writeElementRequested2: writeElement?.asElement2,
+      readElementRequested2: readElement,
+      writeElementRequested2: writeElement,
       indexContextType: contextType ?? UnknownInferredType.instance,
     );
   }
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index 5802d35..d26b941 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -11,6 +11,7 @@
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/extensions.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer_utilities/testing/tree_string_sink.dart';
 import 'package:collection/collection.dart';
 import 'package:test/test.dart';
@@ -4533,7 +4534,8 @@
   }
 
   bool _shouldWrite(ExecutableElement element) {
-    return _configuration.withObjectMembers || !element.isObjectMember;
+    return _configuration.withObjectMembers ||
+        !element.asElement2.isObjectMember;
   }
 
   List<MapEntry<Name, T>> _sortedEntries<T>(
@@ -4612,7 +4614,7 @@
   ) {
     var isEmpty = map.values.flattenedToList.where((element) {
       if (_configuration.withObjectMembers) return true;
-      return !element.isObjectMember;
+      return !element.asElement2.isObjectMember;
     }).isEmpty;
     if (isEmpty) return;