diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt
index 2176852..7749641 100644
--- a/pkg/analyzer/api.txt
+++ b/pkg/analyzer/api.txt
@@ -4015,7 +4015,6 @@
     element (getter: PropertyAccessorElement)
     nextFragment (getter: PropertyAccessorFragment?)
     previousFragment (getter: PropertyAccessorFragment?)
-    variable3 (getter: PropertyInducingFragment?)
   PropertyInducingElement (class extends Object implements VariableElement, Annotatable, HasSinceSdkVersion):
     new (constructor: PropertyInducingElement Function())
     firstFragment (getter: PropertyInducingFragment)
@@ -4027,14 +4026,12 @@
   PropertyInducingFragment (class extends Object implements VariableFragment, Annotatable):
     new (constructor: PropertyInducingFragment Function())
     element (getter: PropertyInducingElement)
-    getter2 (getter: GetterFragment?)
     hasInitializer (getter: bool)
     isAugmentation (getter: bool)
     isSynthetic (getter: bool)
     libraryFragment (getter: LibraryFragment)
     nextFragment (getter: PropertyInducingFragment?)
     previousFragment (getter: PropertyInducingFragment?)
-    setter2 (getter: SetterFragment?)
   SetterElement (class extends Object implements PropertyAccessorElement):
     new (constructor: SetterElement Function())
     baseElement (getter: SetterElement)
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 8629c9a..4ec23ae 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -3208,12 +3208,6 @@
 
   @override
   PropertyAccessorFragment? get previousFragment;
-
-  /// The field or top-level variable associated with this property accessors.
-  ///
-  /// If this property accessor was explicitly defined (is not synthetic) then
-  /// the variable associated with it will be synthetic.
-  PropertyInducingFragment? get variable3;
 }
 
 /// A variable that has an associated getter and possibly a setter. Note that
@@ -3275,12 +3269,6 @@
   @override
   PropertyInducingElement get element;
 
-  /// The getter associated with this variable.
-  ///
-  /// If this variable was explicitly defined (is not synthetic) then the
-  /// getter associated with it will be synthetic.
-  GetterFragment? get getter2;
-
   /// Whether the variable has an initializer at declaration.
   bool get hasInitializer;
 
@@ -3305,18 +3293,6 @@
 
   @override
   PropertyInducingFragment? get previousFragment;
-
-  /// The setter associated with this variable.
-  ///
-  /// Returns `null` if the variable is effectively `final` and therefore
-  /// doesn't have a setter associated with it.
-  ///
-  /// This can happen either because the variable is explicitly defined as
-  /// being `final` or because the variable is induced by an explicit getter
-  /// that does not have a corresponding setter. If this variable was
-  /// explicitly defined (is not synthetic) then the setter associated with
-  /// it will be synthetic.
-  SetterFragment? get setter2;
 }
 
 /// A setter.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 9fa779c..3872637 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3184,10 +3184,11 @@
   ///
   /// Such fields are `index`, `_name`, and `values`.
   bool get isSyntheticEnumField {
+    // TODO(scheglov): move to element
     return enclosingElement3 is EnumFragmentImpl &&
         isSynthetic &&
         element.getter2?.isSynthetic == true &&
-        setter == null;
+        element.setter2 == null;
   }
 
   @override
@@ -4490,12 +4491,6 @@
   GetterFragmentImpl.forVariable(super.variable) : super.forVariable();
 
   @override
-  PropertyAccessorFragmentImpl? get correspondingGetter => null;
-
-  @override
-  PropertyAccessorFragmentImpl? get correspondingSetter => variable2?.setter;
-
-  @override
   bool get isGetter => true;
 
   @override
@@ -8829,16 +8824,6 @@
 /// `PropertyAccessorElement`.
 abstract class PropertyAccessorElementOrMember
     implements ExecutableElementOrMember {
-  /// The accessor representing the getter that corresponds to (has the same
-  /// name as) this setter, or `null` if this accessor is not a setter or
-  /// if there is no corresponding getter.
-  PropertyAccessorElementOrMember? get correspondingGetter;
-
-  /// The accessor representing the setter that corresponds to (has the same
-  /// name as) this getter, or `null` if this accessor is not a getter or
-  /// if there is no corresponding setter.
-  PropertyAccessorElementOrMember? get correspondingSetter;
-
   /// Whether the accessor represents a getter.
   bool get isGetter;
 
@@ -8847,15 +8832,6 @@
 
   @override
   TypeImpl get returnType;
-
-  /// The field or top-level variable associated with this accessor.
-  ///
-  /// If this accessor was explicitly defined (is not synthetic) then the
-  /// variable associated with it will be synthetic.
-  ///
-  /// If this accessor is an augmentation, and [augmentationTarget] is `null`,
-  /// the variable is `null`.
-  PropertyInducingElementOrMember? get variable2;
 }
 
 sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
@@ -8885,12 +8861,6 @@
   }
 
   @override
-  PropertyAccessorFragmentImpl? get correspondingGetter;
-
-  @override
-  PropertyAccessorFragmentImpl? get correspondingSetter;
-
-  @override
   PropertyAccessorFragmentImpl get declaration => this;
 
   @override
@@ -8946,14 +8916,6 @@
   }
 
   @override
-  PropertyInducingFragmentImpl? get variable2 {
-    return element.variable3?.firstFragment;
-  }
-
-  @override
-  PropertyInducingFragment? get variable3 => variable2;
-
-  @override
   void appendTo(ElementDisplayStringBuilder builder) {
     builder.writeExecutableElement(
       this,
@@ -9088,15 +9050,6 @@
   @override
   Fragment get enclosingFragment => enclosingElement3 as Fragment;
 
-  /// The getter associated with this variable.
-  ///
-  /// If this variable was explicitly defined (is not synthetic) then the
-  /// getter associated with it will be synthetic.
-  GetterFragmentImpl? get getter => element.getter2?.firstFragment;
-
-  @override
-  GetterFragmentImpl? get getter2 => getter;
-
   /// Return `true` if this variable needs the setter.
   bool get hasSetter {
     if (isConst) {
@@ -9127,20 +9080,6 @@
   @override
   MetadataImpl get metadata2 => metadata;
 
-  /// The setter associated with this variable, or `null` if the variable
-  /// is effectively `final` and therefore does not have a setter associated
-  /// with it.
-  ///
-  /// This can happen either because the variable is explicitly defined as
-  /// being `final` or because the variable is induced by an explicit getter
-  /// that does not have a corresponding setter. If this variable was
-  /// explicitly defined (is not synthetic) then the setter associated with
-  /// it will be synthetic.
-  SetterFragmentImpl? get setter => element.setter2?.firstFragment;
-
-  @override
-  SetterFragmentImpl? get setter2 => setter;
-
   bool get shouldUseTypeForInitializerInference {
     return hasModifier(Modifier.SHOULD_USE_TYPE_FOR_INITIALIZER_INFERENCE);
   }
@@ -9310,12 +9249,6 @@
   SetterFragmentImpl.forVariable(super.variable) : super.forVariable();
 
   @override
-  PropertyAccessorFragmentImpl? get correspondingGetter => variable2?.getter;
-
-  @override
-  PropertyAccessorFragmentImpl? get correspondingSetter => null;
-
-  @override
   bool get isGetter => false;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index ec814bc..123c639 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -1026,8 +1026,10 @@
 
       var result = SetterElementImpl(setterReference, resultFragment);
 
-      var field = executable.variable3!;
-      var resultField = FieldFragmentImpl(name2: field.name3, nameOffset: -1);
+      var resultField = FieldFragmentImpl(
+        name2: executable.name3,
+        nameOffset: -1,
+      );
       resultField.enclosingElement3 = class_.firstFragment;
 
       var elementName = executable.name3!;
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index d9c2f37..e052ba6 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -532,15 +532,11 @@
 
   @override
   GetterElement2OrMember? get getter2 {
-    var baseGetter = declaration.getter;
+    var baseGetter = baseElement.getter2;
     if (baseGetter == null) {
       return null;
     }
-    return GetterMember._(
-      declaration: baseGetter,
-      substitution: substitution,
-      typeParameters: baseGetter.typeParameters,
-    );
+    return GetterMember.forSubstitution(baseGetter, substitution);
   }
 
   @override
@@ -586,15 +582,11 @@
 
   @override
   SetterElement2OrMember? get setter2 {
-    var baseSetter = declaration.setter;
+    var baseSetter = baseElement.setter2;
     if (baseSetter == null) {
       return null;
     }
-    return SetterMember._(
-      declaration: baseSetter,
-      substitution: substitution,
-      typeParameters: baseSetter.typeParameters,
-    );
+    return SetterMember.forSubstitution(baseSetter, substitution);
   }
 
   @override
@@ -676,11 +668,11 @@
 
   @override
   SetterElement2OrMember? get correspondingSetter2 {
-    var setter = correspondingSetter;
-    if (setter is SetterMember) {
-      return setter;
+    var baseSetter = baseElement.variable3!.setter2;
+    if (baseSetter == null) {
+      return null;
     }
-    return setter?.asElement2 as SetterElementImpl?;
+    return SetterMember.forSubstitution(baseSetter, substitution);
   }
 
   @override
@@ -721,14 +713,21 @@
     return visitor.visitGetterElement(this);
   }
 
+  static GetterElement2OrMember forSubstitution(
+    GetterElement2OrMember element,
+    MapSubstitution substitution,
+  ) {
+    // TODO(scheglov): avoid type cast
+    return ExecutableMember.from(element, substitution)
+        as GetterElement2OrMember;
+  }
+
   static GetterElement2OrMember forTargetType(
     GetterElement2OrMember element,
     InterfaceType targetType,
   ) {
     var substitution = Substitution.fromInterfaceType(targetType);
-    // TODO(scheglov): avoid type cast
-    return ExecutableMember.from(element, substitution)
-        as GetterElement2OrMember;
+    return forSubstitution(element, substitution);
   }
 }
 
@@ -1216,30 +1215,6 @@
   });
 
   @override
-  PropertyAccessorElementOrMember? get correspondingGetter {
-    var baseGetter = declaration.correspondingGetter;
-    if (baseGetter == null) {
-      return null;
-    }
-    return PropertyAccessorMember(
-      declaration: baseGetter,
-      substitution: substitution,
-    );
-  }
-
-  @override
-  PropertyAccessorElementOrMember? get correspondingSetter {
-    var baseSetter = declaration.correspondingSetter;
-    if (baseSetter == null) {
-      return null;
-    }
-    return PropertyAccessorMember(
-      declaration: baseSetter,
-      substitution: substitution,
-    );
-  }
-
-  @override
   PropertyAccessorFragmentImpl get declaration =>
       _declaration as PropertyAccessorFragmentImpl;
 
@@ -1265,17 +1240,6 @@
   Source get source => _declaration.source!;
 
   @override
-  PropertyInducingElementOrMember? get variable2 {
-    var variable = declaration.variable2;
-    switch (variable) {
-      case FieldFragmentImpl():
-        return FieldMember(declaration: variable, substitution: substitution);
-      default:
-        return variable;
-    }
-  }
-
-  @override
   PropertyInducingElement2OrMember? get variable3 {
     var variable = baseElement.variable3;
     switch (variable) {
@@ -1332,11 +1296,11 @@
 
   @override
   GetterElement2OrMember? get correspondingGetter2 {
-    var getter = correspondingGetter;
-    if (getter is GetterMember) {
-      return getter;
+    var baseGetter = baseElement.variable3!.getter2;
+    if (baseGetter == null) {
+      return null;
     }
-    return getter?.asElement2 as GetterElementImpl?;
+    return GetterMember.forSubstitution(baseGetter, substitution);
   }
 
   @override
@@ -1377,14 +1341,21 @@
     return visitor.visitSetterElement(this);
   }
 
+  static SetterElement2OrMember forSubstitution(
+    SetterElement2OrMember element,
+    MapSubstitution substitution,
+  ) {
+    // TODO(scheglov): avoid type cast
+    return ExecutableMember.from(element, substitution)
+        as SetterElement2OrMember;
+  }
+
   static SetterElement2OrMember forTargetType(
     SetterElement2OrMember element,
     InterfaceType targetType,
   ) {
     var substitution = Substitution.fromInterfaceType(targetType);
-    // TODO(scheglov): avoid type cast
-    return ExecutableMember.from(element, substitution)
-        as SetterElement2OrMember;
+    return forSubstitution(element, substitution);
   }
 }
 
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index 0b3a574..19b614e 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -597,7 +597,7 @@
       if (!definesSetter) {
         // The field just defines a getter, so treat it as a getter for
         // duplicate checking purposes.
-        fragment = fragment.getter!;
+        fragment = fragment.element.getter2!.firstFragment;
       }
     }
 
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index 3290e12..73b9aaa 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -154,7 +154,9 @@
     deprecatedElement.fields = [_field('message', stringType, isFinal: true)];
 
     deprecatedElement.getters =
-        deprecatedElement.fields.map((f) => f.getter!).toList();
+        deprecatedElement.fields
+            .map((f) => f.element.getter2!.firstFragment)
+            .toList();
 
     deprecatedElement.constructors = [
       _constructor(
@@ -192,7 +194,9 @@
     ];
 
     doubleElement.getters =
-        doubleElement.fields.map((field) => field.getter!).toList();
+        doubleElement.fields
+            .map((field) => field.element.getter2!.firstFragment)
+            .toList();
 
     doubleElement.methods = [
       _method(
@@ -1217,8 +1221,8 @@
     );
 
     _coreUnit.getters = <GetterFragmentImpl>[
-      deprecatedVariable.getter!,
-      overrideVariable.getter!,
+      deprecatedVariable.element.getter2!.firstFragment,
+      overrideVariable.element.getter2!.firstFragment,
     ];
 
     _coreUnit.topLevelVariables = <TopLevelVariableFragmentImpl>[
@@ -1259,7 +1263,7 @@
     classElement.getters = getters;
     classElement.fields =
         getters
-            .map((accessor) => accessor.variable2)
+            .map((accessor) => accessor.element.variable3!.firstFragment)
             .cast<FieldFragmentImpl>()
             .toList();
   }
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 5789929..591d79f 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -361,8 +361,18 @@
     expect(fooNode.length, 7);
 
     // Synthetic elements don't have nodes.
-    expect(parsedLibrary.getFragmentDeclaration(fooElement.getter2!), isNull);
-    expect(parsedLibrary.getFragmentDeclaration(fooElement.setter2!), isNull);
+    expect(
+      parsedLibrary.getFragmentDeclaration(
+        fooElement.element.getter2!.firstFragment,
+      ),
+      isNull,
+    );
+    expect(
+      parsedLibrary.getFragmentDeclaration(
+        fooElement.element.setter2!.firstFragment,
+      ),
+      isNull,
+    );
   }
 
   test_getParsedLibrary_inconsistent() async {
@@ -621,8 +631,18 @@
     expect(fooNode.declaredFragment!.name2, 'foo');
 
     // Synthetic elements don't have nodes.
-    expect(resolvedLibrary.getFragmentDeclaration(fooElement.getter2!), isNull);
-    expect(resolvedLibrary.getFragmentDeclaration(fooElement.setter2!), isNull);
+    expect(
+      resolvedLibrary.getFragmentDeclaration(
+        fooElement.element.getter2!.firstFragment,
+      ),
+      isNull,
+    );
+    expect(
+      resolvedLibrary.getFragmentDeclaration(
+        fooElement.element.setter2!.firstFragment,
+      ),
+      isNull,
+    );
   }
 
   test_getResolvedLibrary_inconsistent() async {
diff --git a/pkg/linter/lib/src/rules/analyzer_public_api.dart b/pkg/linter/lib/src/rules/analyzer_public_api.dart
index 1734f43..1b27267 100644
--- a/pkg/linter/lib/src/rules/analyzer_public_api.dart
+++ b/pkg/linter/lib/src/rules/analyzer_public_api.dart
@@ -276,11 +276,10 @@
         offset = fragment.nameOffset2!;
         length = fragment.name2!.length;
         break;
-      } else if (fragment case PropertyAccessorFragment(
-        :var variable3?,
-      ) when variable3.nameOffset2 != null) {
-        offset = variable3.nameOffset2!;
-        length = variable3.name2!.length;
+      } else if (fragment case PropertyAccessorFragment()
+          when fragment.element.variable3!.firstFragment.nameOffset2 != null) {
+        offset = fragment.element.variable3!.firstFragment.nameOffset2!;
+        length = fragment.element.variable3!.name3!.length;
         break;
       } else if (fragment is ConstructorFragment &&
           fragment.typeNameOffset != null) {
