Elements. Restore InstanceElement.augmented

This API was removed in 7.4.0 under the assumption that its removal would not be a breaking change, because it was marked as `@experimental`. But it turns out that some clients had been published to pub that relied on it (for example `drift_dev`).

To avoid breakages in those packages, the API has been restored (by pulling `AugmentedXyz` APIs from the published version `7.3.0`, and re-implementing on top of new `XyzElement2`). However the restored API is still slated for removal in analyzer 8.0.0, so it's been marked as `@deprecated`. Clients relying on this API should migrate away from it as soon as possible.

Bug: https://github.com/dart-lang/sdk/issues/60545
Bug: https://github.com/dart-lang/sdk/issues/60553

Change-Id: If12c1fa37cafa63d0eef121a39350ce6d41ab68f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422846
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index ba26f16..9dc4f2b 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 7.4.1
+* Restore `InstanceElement.augmented` getter.
+  This API was removed in 7.4.0 under the assumption that its removal would
+  not be a breaking change, because it was marked as `@experimental`.
+  But it turns out that some clients had been published to pub that relied
+  on it. So, these APIs were restored, and implemented on top of `Element2`.
+
 ## 7.4.0
 * Updated SDK constraint to `^3.5.0`.
 * Deprecated element model V1.
diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt
index 91921cf..f787bf4 100644
--- a/pkg/analyzer/api.txt
+++ b/pkg/analyzer/api.txt
@@ -3014,10 +3014,54 @@
     toSymbolValue (method: String? Function())
     toTypeValue (method: DartType? Function())
 package:analyzer/dart/element/element.dart:
+  AugmentedClassElement (class extends Object implements AugmentedInterfaceElement, deprecated):
+    new (constructor: AugmentedClassElement Function())
+    firstFragment (getter: ClassElement)
+  AugmentedEnumElement (class extends Object implements AugmentedInterfaceElement, deprecated):
+    new (constructor: AugmentedEnumElement Function())
+    constants (getter: List<FieldElement>)
+    firstFragment (getter: EnumElement)
+  AugmentedExtensionElement (class extends Object implements AugmentedInstanceElement, deprecated):
+    new (constructor: AugmentedExtensionElement Function())
+    extendedType (getter: DartType)
+  AugmentedExtensionTypeElement (class extends Object implements AugmentedInterfaceElement, deprecated):
+    new (constructor: AugmentedExtensionTypeElement Function())
+    firstFragment (getter: ExtensionTypeElement)
+    primaryConstructor (getter: ConstructorElement)
+    representation (getter: FieldElement)
+    typeErasure (getter: DartType)
+  AugmentedInstanceElement (class extends Object, deprecated):
+    new (constructor: AugmentedInstanceElement Function())
+    accessors (getter: List<PropertyAccessorElement>)
+    fields (getter: List<FieldElement>)
+    firstFragment (getter: InstanceElement)
+    metadata (getter: List<ElementAnnotation>)
+    methods (getter: List<MethodElement>)
+    thisType (getter: DartType)
+    getField (method: FieldElement? Function(String))
+    getGetter (method: PropertyAccessorElement? Function(String))
+    getMethod (method: MethodElement? Function(String))
+    getSetter (method: PropertyAccessorElement? Function(String))
+    lookUpGetter (method: PropertyAccessorElement? Function({required LibraryElement library, required String name}))
+    lookUpMethod (method: MethodElement? Function({required LibraryElement library, required String name}))
+    lookUpSetter (method: PropertyAccessorElement? Function({required LibraryElement library, required String name}))
+  AugmentedInterfaceElement (class extends Object implements AugmentedInstanceElement, deprecated):
+    new (constructor: AugmentedInterfaceElement Function())
+    constructors (getter: List<ConstructorElement>)
+    firstFragment (getter: InterfaceElement)
+    interfaces (getter: List<InterfaceType>)
+    mixins (getter: List<InterfaceType>)
+    thisType (getter: InterfaceType)
+    unnamedConstructor (getter: ConstructorElement?)
+    getNamedConstructor (method: ConstructorElement? Function(String))
+  AugmentedMixinElement (class extends AugmentedInterfaceElement, deprecated):
+    new (constructor: AugmentedMixinElement Function())
+    superclassConstraints (getter: List<InterfaceType>)
   BindPatternVariableElement (class extends Object implements PatternVariableElement, deprecated):
     new (constructor: BindPatternVariableElement Function())
   ClassElement (class extends Object implements InterfaceElement, deprecated):
     new (constructor: ClassElement Function())
+    augmented (getter: AugmentedClassElement, deprecated)
     hasNonFinalField (getter: bool)
     isAbstract (getter: bool)
     isBase (getter: bool)
@@ -3268,6 +3312,7 @@
     visitTypeParameterElement (method: R? Function(TypeParameterElement))
   EnumElement (class extends Object implements InterfaceElement, deprecated):
     new (constructor: EnumElement Function())
+    augmented (getter: AugmentedEnumElement, deprecated)
   ExecutableElement (class extends Object implements FunctionTypedElement, deprecated):
     new (constructor: ExecutableElement Function())
     declaration (getter: ExecutableElement)
@@ -3286,6 +3331,7 @@
     name (getter: String)
   ExtensionElement (class extends Object implements InstanceElement, deprecated):
     new (constructor: ExtensionElement Function())
+    augmented (getter: AugmentedExtensionElement, deprecated)
     extendedType (getter: DartType)
     getField (method: FieldElement? Function(String))
     getGetter (method: PropertyAccessorElement? Function(String))
@@ -3293,6 +3339,7 @@
     getSetter (method: PropertyAccessorElement? Function(String))
   ExtensionTypeElement (class extends Object implements InterfaceElement, deprecated):
     new (constructor: ExtensionTypeElement Function())
+    augmented (getter: AugmentedExtensionTypeElement, deprecated)
     primaryConstructor (getter: ConstructorElement, deprecated)
     representation (getter: FieldElement)
     typeErasure (getter: DartType)
@@ -3332,6 +3379,7 @@
   InstanceElement (class extends Object implements TypeDefiningElement, TypeParameterizedElement, deprecated):
     new (constructor: InstanceElement Function())
     accessors (getter: List<PropertyAccessorElement>)
+    augmented (getter: AugmentedInstanceElement, deprecated)
     enclosingElement3 (getter: CompilationUnitElement, deprecated)
     fields (getter: List<FieldElement>)
     isAugmentation (getter: bool)
@@ -3340,6 +3388,7 @@
   InterfaceElement (class extends Object implements InstanceElement, deprecated):
     new (constructor: InterfaceElement Function())
     allSupertypes (getter: List<InterfaceType>)
+    augmented (getter: AugmentedInterfaceElement, deprecated)
     constructors (getter: List<ConstructorElement>, deprecated)
     interfaces (getter: List<InterfaceType>)
     mixins (getter: List<InterfaceType>, deprecated)
@@ -3425,6 +3474,7 @@
     declaration (getter: MethodElement)
   MixinElement (class extends Object implements InterfaceElement, deprecated):
     new (constructor: MixinElement Function())
+    augmented (getter: AugmentedMixinElement, deprecated)
     isBase (getter: bool)
     superclassConstraints (getter: List<InterfaceType>)
     isImplementableIn (method: bool Function(LibraryElement))
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 0b0b3a0..58321de 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -60,6 +60,186 @@
 import 'package:meta/meta.dart';
 import 'package:pub_semver/pub_semver.dart';
 
+/// The result of applying augmentations to a [ClassElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedClassElement implements AugmentedInterfaceElement {
+  @override
+  ClassElement get firstFragment;
+}
+
+/// The result of applying augmentations to an [EnumElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedEnumElement implements AugmentedInterfaceElement {
+  /// The enum constants declared in this element.
+  List<FieldElement> get constants;
+
+  @override
+  EnumElement get firstFragment;
+}
+
+/// The result of applying augmentations to an [ExtensionElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedExtensionElement implements AugmentedInstanceElement {
+  /// The type that is extended by this extension.
+  DartType get extendedType;
+}
+
+/// The result of applying augmentations to an [ExtensionTypeElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedExtensionTypeElement
+    implements AugmentedInterfaceElement {
+  @override
+  ExtensionTypeElement get firstFragment;
+
+  /// The primary constructor of this extension.
+  ConstructorElement get primaryConstructor;
+
+  /// The representation of this extension.
+  FieldElement get representation;
+
+  /// The extension type erasure, obtained by recursively replacing every
+  /// subterm which is an extension type by the corresponding representation
+  /// type.
+  DartType get typeErasure;
+}
+
+/// The result of applying augmentations to a [InstanceElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedInstanceElement {
+  /// The accessors (getters and setters) declared in this element.
+  ///
+  /// [PropertyAccessorElement]s replace corresponding elements,
+  /// other [PropertyAccessorElement]s are appended.
+  List<PropertyAccessorElement> get accessors;
+
+  /// The fields declared in this element.
+  ///
+  /// `FieldAugmentationElement`s replace corresponding elements, other
+  /// [FieldElement]s are appended.
+  List<FieldElement> get fields;
+
+  /// The declaration (not augmentation) that owns this result.
+  InstanceElement get firstFragment;
+
+  /// The metadata associated with this element.
+  ///
+  /// This is a union of annotations associated with the class declaration and
+  /// all its augmentations.
+  List<ElementAnnotation> get metadata;
+
+  /// The methods declared in this element.
+  ///
+  /// `MethodAugmentationElement`s replace corresponding elements, other
+  /// [MethodElement]s are appended.
+  List<MethodElement> get methods;
+
+  /// The type of `this` expression.
+  DartType get thisType;
+
+  /// Returns the field from [fields] that has the given [name].
+  FieldElement? getField(String name);
+
+  /// Returns the getter from [accessors] that has the given [name].
+  PropertyAccessorElement? getGetter(String name);
+
+  /// Returns the method from [methods] that has the given [name].
+  MethodElement? getMethod(String name);
+
+  /// Returns the setter from [accessors] that has the given [name].
+  PropertyAccessorElement? getSetter(String name);
+
+  /// Returns the element representing the getter that results from looking up
+  /// the given [name] in this class with respect to the given [library],
+  /// or `null` if the look up fails.
+  ///
+  /// The behavior of this method is defined by the Dart Language Specification
+  /// in section 17.18 Lookup.
+  PropertyAccessorElement? lookUpGetter({
+    required String name,
+    required LibraryElement library,
+  });
+
+  /// Returns the element representing the method that results from looking up
+  /// the given [name] in this class with respect to the given [library],
+  /// or `null` if the look up fails.
+  ///
+  /// The behavior of this method is defined by the Dart Language Specification
+  /// in section 17.18 Lookup.
+  MethodElement? lookUpMethod({
+    required String name,
+    required LibraryElement library,
+  });
+
+  /// Returns the element representing the setter that results from looking up
+  /// the given [name] in this class with respect to the given [library],
+  /// or `null` if the look up fails.
+  ///
+  /// The behavior of this method is defined by the Dart Language Specification
+  /// in section 17.18 Lookup.
+  PropertyAccessorElement? lookUpSetter({
+    required String name,
+    required LibraryElement library,
+  });
+}
+
+/// The result of applying augmentations to a [InterfaceElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedInterfaceElement implements AugmentedInstanceElement {
+  /// The constructors declared in this element.
+  ///
+  /// `ConstructorAugmentationElement`s replace corresponding elements,
+  /// other [ConstructorElement]s are appended.
+  List<ConstructorElement> get constructors;
+
+  @override
+  InterfaceElement get firstFragment;
+
+  /// The interfaces implemented by this element.
+  ///
+  /// This is a union of interfaces declared by the class declaration and
+  /// all its augmentations.
+  List<InterfaceType> get interfaces;
+
+  /// The mixins applied by this class or in its augmentations.
+  ///
+  /// This is a union of mixins applied by the class declaration and all its
+  /// augmentations.
+  List<InterfaceType> get mixins;
+
+  @override
+  InterfaceType get thisType;
+
+  /// The unnamed constructor from [constructors].
+  ConstructorElement? get unnamedConstructor;
+
+  /// Returns the constructor from [constructors] that has the given [name].
+  ConstructorElement? getNamedConstructor(String name);
+}
+
+/// The result of applying augmentations to a [MixinElement].
+///
+/// Clients may not extend, implement or mix-in this class.
+@Deprecated(elementModelDeprecationMsg)
+abstract class AugmentedMixinElement extends AugmentedInterfaceElement {
+  /// The superclass constraints of this element.
+  ///
+  /// This is a union of constraints declared by the class declaration and
+  /// all its augmentations.
+  List<InterfaceType> get superclassConstraints;
+}
+
 /// A pattern variable that is explicitly declared.
 ///
 /// Clients may not extend, implement or mix-in this class.
@@ -74,6 +254,10 @@
 /// Clients may not extend, implement or mix-in this class.
 @Deprecated('Use ClassElement2 instead')
 abstract class ClassElement implements InterfaceElement {
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedClassElement get augmented;
+
   /// Whether the class or its superclass declares a non-final instance field.
   bool get hasNonFinalField;
 
@@ -1079,7 +1263,11 @@
 ///
 /// Clients may not extend, implement or mix-in this class.
 @Deprecated('Use EnumElement2 instead')
-abstract class EnumElement implements InterfaceElement {}
+abstract class EnumElement implements InterfaceElement {
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedEnumElement get augmented;
+}
 
 /// An element representing an executable object, including functions, methods,
 /// constructors, getters, and setters.
@@ -1150,6 +1338,10 @@
 /// Clients may not extend, implement or mix-in this class.
 @Deprecated('Use ExtensionElement2 instead')
 abstract class ExtensionElement implements InstanceElement {
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedExtensionElement get augmented;
+
   /// The type that is extended by this extension.
   DartType get extendedType;
 
@@ -1179,6 +1371,10 @@
 /// Clients may not extend, implement or mix-in this class.
 @Deprecated('Use ExtensionTypeElement2 instead')
 abstract class ExtensionTypeElement implements InterfaceElement {
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedExtensionTypeElement get augmented;
+
   /// The primary constructor of this extension.
   @Deprecated(elementModelDeprecationMsg)
   ConstructorElement get primaryConstructor;
@@ -1320,6 +1516,13 @@
   /// The declared accessors (getters and setters).
   List<PropertyAccessorElement> get accessors;
 
+  /// The result of merging augmentations.
+  ///
+  /// It includes the members of the base element and its augmentations as
+  /// specified by the merge operations.
+  @Deprecated(elementModelDeprecationMsg)
+  AugmentedInstanceElement get augmented;
+
   @Deprecated(elementModelDeprecationMsg)
   @override
   CompilationUnitElement get enclosingElement3;
@@ -1351,6 +1554,10 @@
   /// This includes superclasses, mixins, interfaces, and superclass constraints.
   List<InterfaceType> get allSupertypes;
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedInterfaceElement get augmented;
+
   /// The declared constructors.
   ///
   /// The list is empty for [MixinElement].
@@ -1838,6 +2045,10 @@
 /// Clients may not extend, implement or mix-in this class.
 @Deprecated('Use MixinElement2 instead')
 abstract class MixinElement implements InterfaceElement {
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedMixinElement get augmented;
+
   /// Whether the mixin is a base mixin.
   ///
   /// A mixin is a base mixin if it has an explicit `base` modifier.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index bd185ad..89b1815 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -89,6 +89,185 @@
   }
 }
 
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedClassElementImpl extends AugmentedInterfaceElementImpl
+    implements AugmentedClassElement {
+  AugmentedClassElementImpl(super.firstFragment);
+
+  @override
+  ClassElementImpl get firstFragment {
+    return super.firstFragment as ClassElementImpl;
+  }
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedEnumElementImpl extends AugmentedInterfaceElementImpl
+    implements AugmentedEnumElement {
+  AugmentedEnumElementImpl(super.firstFragment);
+
+  @override
+  List<FieldElement> get constants => firstFragment.constants;
+
+  @override
+  EnumElementImpl get firstFragment {
+    return super.firstFragment as EnumElementImpl;
+  }
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedExtensionElementImpl extends AugmentedInstanceElementImpl
+    implements AugmentedExtensionElement {
+  AugmentedExtensionElementImpl(super.firstFragment);
+
+  @override
+  DartType get extendedType => firstFragment.extendedType;
+
+  @override
+  ExtensionElementImpl get firstFragment {
+    return super.firstFragment as ExtensionElementImpl;
+  }
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedExtensionTypeElementImpl extends AugmentedInterfaceElementImpl
+    implements AugmentedExtensionTypeElement {
+  AugmentedExtensionTypeElementImpl(super.firstFragment);
+
+  @override
+  ExtensionTypeElementImpl get firstFragment {
+    return super.firstFragment as ExtensionTypeElementImpl;
+  }
+
+  @override
+  ConstructorElement get primaryConstructor => firstFragment.primaryConstructor;
+
+  @override
+  FieldElement get representation => firstFragment.representation;
+
+  @override
+  DartType get typeErasure => firstFragment.typeErasure;
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedInstanceElementImpl implements AugmentedInstanceElement {
+  @override
+  final InstanceElementImpl firstFragment;
+
+  AugmentedInstanceElementImpl(this.firstFragment);
+
+  @override
+  List<PropertyAccessorElement> get accessors => firstFragment.accessors;
+
+  @override
+  List<FieldElement> get fields => firstFragment.fields;
+
+  @override
+  List<ElementAnnotation> get metadata => firstFragment.metadata;
+
+  @override
+  List<MethodElement> get methods => firstFragment.methods;
+
+  @override
+  DartType get thisType => firstFragment.thisType;
+
+  @override
+  FieldElement? getField(String name) {
+    return fields.firstWhereOrNull((e) => e.name == name);
+  }
+
+  @override
+  PropertyAccessorElement? getGetter(String name) {
+    return accessors
+        .where((e) => e.isGetter)
+        .firstWhereOrNull((e) => e.name == name);
+  }
+
+  @override
+  MethodElement? getMethod(String name) {
+    return methods.firstWhereOrNull((e) => e.name == name);
+  }
+
+  @override
+  PropertyAccessorElement? getSetter(String name) {
+    return accessors
+        .where((e) => e.isSetter)
+        .firstWhereOrNull((e) => e.name == name);
+  }
+
+  @override
+  PropertyAccessorElement? lookUpGetter(
+      {required String name, required LibraryElement library}) {
+    return firstFragment.element
+        .lookUpGetter2(name: name, library: library as LibraryElement2)
+        ?.asElement as PropertyAccessorElement?;
+  }
+
+  @override
+  MethodElement? lookUpMethod(
+      {required String name, required LibraryElement library}) {
+    return firstFragment.element
+        .lookUpMethod2(name: name, library: library as LibraryElement2)
+        ?.asElement;
+  }
+
+  @override
+  PropertyAccessorElement? lookUpSetter(
+      {required String name, required LibraryElement library}) {
+    return firstFragment.element
+        .lookUpSetter2(name: name, library: library as LibraryElement2)
+        ?.asElement as PropertyAccessorElement?;
+  }
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedInterfaceElementImpl extends AugmentedInstanceElementImpl
+    implements AugmentedInterfaceElement {
+  AugmentedInterfaceElementImpl(super.firstFragment);
+
+  @override
+  List<ConstructorElement> get constructors => firstFragment.constructors;
+
+  @override
+  InterfaceElementImpl get firstFragment {
+    return super.firstFragment as InterfaceElementImpl;
+  }
+
+  @override
+  List<InterfaceType> get interfaces => firstFragment.interfaces;
+
+  @override
+  List<InterfaceType> get mixins => firstFragment.mixins;
+
+  @override
+  InterfaceType get thisType {
+    return super.thisType as InterfaceType;
+  }
+
+  @override
+  ConstructorElement? get unnamedConstructor =>
+      firstFragment.unnamedConstructor;
+
+  @override
+  ConstructorElement? getNamedConstructor(String name) {
+    return constructors.firstWhereOrNull((e) => e.name == name);
+  }
+}
+
+@Deprecated(elementModelDeprecationMsg)
+class AugmentedMixinElementImpl extends AugmentedInterfaceElementImpl
+    implements AugmentedMixinElement {
+  AugmentedMixinElementImpl(super.firstFragment);
+
+  @override
+  MixinElementImpl get firstFragment {
+    return super.firstFragment as MixinElementImpl;
+  }
+
+  @override
+  List<InterfaceType> get superclassConstraints =>
+      firstFragment.superclassConstraints;
+}
+
 class BindPatternVariableElementImpl extends PatternVariableElementImpl
     implements
         // ignore: deprecated_member_use_from_same_package,analyzer_use_new_elements
@@ -168,6 +347,10 @@
     super.accessors = accessors;
   }
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedClassElement get augmented => AugmentedClassElementImpl(this);
+
   @override
   set constructors(List<ConstructorElementImpl> constructors) {
     assert(!isMixinApplication);
@@ -3550,6 +3733,10 @@
   /// given [offset] in the file that contains the declaration of this element.
   EnumElementImpl(super.name, super.offset);
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedEnumElement get augmented => AugmentedEnumElementImpl(this);
+
   List<FieldElementImpl> get constants {
     return fields.where((field) => field.isEnumConstant).toList();
   }
@@ -3940,6 +4127,11 @@
   /// element.
   ExtensionElementImpl(super.name, super.nameOffset);
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedExtensionElement get augmented =>
+      AugmentedExtensionElementImpl(this);
+
   @Deprecated('Use Element2 instead')
   @override
   List<Element> get children => [
@@ -4111,6 +4303,11 @@
 
   ExtensionTypeElementImpl(super.name, super.nameOffset);
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedExtensionTypeElement get augmented =>
+      AugmentedExtensionTypeElementImpl(this);
+
   @override
   ExtensionTypeElementImpl2 get element {
     linkedData?.read(this);
@@ -5707,6 +5904,10 @@
     _accessors = accessors;
   }
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedInstanceElement get augmented => AugmentedInstanceElementImpl(this);
+
   @override
   InstanceElementImpl2 get element;
 
@@ -6091,6 +6292,11 @@
         library.session.classHierarchy.implementedInterfaces(element);
   }
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedInterfaceElement get augmented =>
+      AugmentedInterfaceElementImpl(this);
+
   @Deprecated('Use Element2 instead')
   @override
   List<Element> get children => [
@@ -8626,6 +8832,10 @@
   /// given [offset] in the file that contains the declaration of this element.
   MixinElementImpl(super.name, super.offset);
 
+  @Deprecated(elementModelDeprecationMsg)
+  @override
+  AugmentedMixinElement get augmented => AugmentedMixinElementImpl(this);
+
   @override
   MixinElementImpl2 get element {
     linkedData?.read(this);
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 614adaf..aa24200 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/utilities/extensions/collection.dart';
 import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:analyzer/src/utilities/extensions/object.dart';
+import 'package:analyzer/src/utilities/extensions/string.dart';
 import 'package:collection/collection.dart';
 
 /// Returns a [List] of fixed length with given types.
@@ -951,8 +952,9 @@
   @Deprecated('Use lookUpConstructor2() instead')
   @override
   ConstructorElementMixin? lookUpConstructor(
-      String? constructorName, covariant LibraryElementImpl library) {
-    return lookUpConstructor2(constructorName ?? 'new', library)?.asElement;
+      String? name, covariant LibraryElementImpl library) {
+    var name2 = (name ?? 'new').ifNotEmptyOrElse('new');
+    return lookUpConstructor2(name2, library)?.asElement;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index d97e7e9..3c955b7 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -382,6 +382,14 @@
 }
 
 extension FormalParameterElementExtension on FormalParameterElement {
+  @Deprecated(elementModelDeprecationMsg)
+  ParameterElement get asElement {
+    if (this case ParameterMember member) {
+      return member;
+    }
+    return firstFragment as ParameterElement;
+  }
+
   void appendToWithoutDelimiters(
     StringBuffer buffer, {
     @Deprecated('Only non-nullable by default mode is supported')