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')
