Fix generation of duplicate mock getters and setters from inherited classes.

Fixes https://github.com/dart-lang/mockito/issues/325

PiperOrigin-RevId: 355624817
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2735969..3d8a40f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 5.0.0-nullsafety.7
+
+* Fix generation of duplicate mock getters and setters from inherited classes.
+
 ## 5.0.0-nullsafety.6
 
 * Fix generation of method with a parameter with a default value which includes
diff --git a/lib/src/builder.dart b/lib/src/builder.dart
index 0342bbe..b0fa8ad 100644
--- a/lib/src/builder.dart
+++ b/lib/src/builder.dart
@@ -719,9 +719,10 @@
       if (accessor.isPrivate || accessor.isStatic) {
         continue;
       }
-      if (overriddenFields.contains(accessor)) {
+      if (overriddenFields.contains(accessor.name)) {
         continue;
       }
+      overriddenFields.add(accessor.name);
       if (accessor.isGetter != null && _returnTypeIsNonNullable(accessor)) {
         yield Method((mBuilder) => _buildOverridingGetter(mBuilder, accessor));
       }
diff --git a/lib/src/version.dart b/lib/src/version.dart
index fd3e9bd..f804bd9 100644
--- a/lib/src/version.dart
+++ b/lib/src/version.dart
@@ -1 +1 @@
-const packageVersion = '5.0.0-nullsafety.6';
+const packageVersion = '5.0.0-nullsafety.7';
diff --git a/pubspec.yaml b/pubspec.yaml
index 14d4c09..a8baece 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: mockito
-version: 5.0.0-nullsafety.6
+version: 5.0.0-nullsafety.7
 
 description: A mock framework inspired by Mockito.
 homepage: https://github.com/dart-lang/mockito
diff --git a/test/builder/auto_mocks_test.dart b/test/builder/auto_mocks_test.dart
index 7252a42..df4e8cc 100644
--- a/test/builder/auto_mocks_test.dart
+++ b/test/builder/auto_mocks_test.dart
@@ -1363,6 +1363,19 @@
     );
   });
 
+  test('overrides inherited methods with a non-nullable return type', () async {
+    var mocksContent = await buildWithSingleNonNullableSource(dedent(r'''
+        class FooBase {
+          num m() => 7;
+        }
+        class Foo extends FooBase {
+          int m() => 7;
+        }
+        '''));
+    expect(mocksContent, contains('int m()'));
+    expect(mocksContent, isNot(contains('num m()')));
+  });
+
   test('overrides methods with a potentially non-nullable parameter', () async {
     await testWithNonNullable(
       {
@@ -1430,6 +1443,19 @@
     );
   });
 
+  test('overrides inherited instance getters only once', () async {
+    var mocksContent = await buildWithSingleNonNullableSource(dedent('''
+      class FooBase {
+        num get m => 7;
+      }
+      class Foo extends FooBase {
+        int get m => 7;
+      }
+      '''));
+    expect(mocksContent, contains('int get m'));
+    expect(mocksContent, isNot(contains('num get m')));
+  });
+
   test('overrides non-nullable instance setters', () async {
     await expectSingleNonNullableOutput(
       dedent('''
@@ -1468,6 +1494,19 @@
     );
   });
 
+  test('overrides inherited non-nullable instance setters only once', () async {
+    var mocksContent = await buildWithSingleNonNullableSource(dedent('''
+      class FooBase {
+        set m(int a) {}
+      }
+      class Foo extends FooBase {
+        set m(num a) {}
+      }
+      '''));
+    expect(mocksContent, contains('set m(num? a)'));
+    expect(mocksContent, isNot(contains('set m(int? a)')));
+  });
+
   test('overrides non-nullable fields', () async {
     await expectSingleNonNullableOutput(
       dedent(r'''
@@ -1503,6 +1542,22 @@
     );
   });
 
+  test('overrides inherited non-nullable fields only once', () async {
+    var mocksContent = await buildWithSingleNonNullableSource(dedent('''
+      class FooBase {
+        num m;
+      }
+      class Foo extends FooBase<int> {
+        int get m => 7;
+        void set m(covariant int value) {}
+      }
+      '''));
+    expect(mocksContent, contains('int get m'));
+    expect(mocksContent, contains('set m(int? value)'));
+    expect(mocksContent, isNot(contains('num get m')));
+    expect(mocksContent, isNot(contains('set m(num? value)')));
+  });
+
   test('overrides final non-nullable fields', () async {
     await expectSingleNonNullableOutput(
       dedent(r'''