diff --git a/CHANGELOG.md b/CHANGELOG.md
index 487bc36..bc10a77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
 ## 0.28.5-dev
 * Support the latest version of `package:analyzer`.
+* Fix hyperlinks to overriden methods (#1994).
 
 ## 0.28.4
 * **Breaking change** Change the default for `allow-tools` command line flag to false.
diff --git a/lib/src/markdown_processor.dart b/lib/src/markdown_processor.dart
index 1d0b4bd..90a4a80 100644
--- a/lib/src/markdown_processor.dart
+++ b/lib/src/markdown_processor.dart
@@ -647,6 +647,10 @@
 
     for (Class tryClass in tryClasses) {
       if (tryClass != null) {
+        if (codeRefChomped.contains('.') &&
+            !codeRefChomped.startsWith(tryClass.name)) {
+          continue;
+        }
         _getResultsForClass(tryClass);
       }
       results.remove(null);
diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart
index f49f5b1..29779a0 100644
--- a/test/dartdoc_test.dart
+++ b/test/dartdoc_test.dart
@@ -100,7 +100,8 @@
     });
 
     test('errors generate errors even when warnings are off', () async {
-      Dartdoc dartdoc = await buildDartdoc(['--allow-tools'], testPackageToolError, tempDir);
+      Dartdoc dartdoc =
+          await buildDartdoc(['--allow-tools'], testPackageToolError, tempDir);
       DartdocResults results = await dartdoc.generateDocsBase();
       PackageGraph p = results.packageGraph;
       Iterable<String> unresolvedToolErrors = p
@@ -258,7 +259,7 @@
         expect(p.name, 'test_package');
         expect(p.hasDocumentationFile, isTrue);
         // Total number of public libraries in test_package.
-        expect(packageGraph.defaultPackage.publicLibraries, hasLength(12));
+        expect(packageGraph.defaultPackage.publicLibraries, hasLength(14));
         expect(packageGraph.localPackages.length, equals(1));
       });
 
@@ -327,7 +328,7 @@
       PackageGraph p = results.packageGraph;
       expect(p.defaultPackage.name, 'test_package');
       expect(p.defaultPackage.hasDocumentationFile, isTrue);
-      expect(p.localPublicLibraries, hasLength(11));
+      expect(p.localPublicLibraries, hasLength(13));
       expect(p.localPublicLibraries.map((lib) => lib.name).contains('fake'),
           isFalse);
     });
diff --git a/test/model_test.dart b/test/model_test.dart
index b186657..9fcfb68 100644
--- a/test/model_test.dart
+++ b/test/model_test.dart
@@ -61,6 +61,7 @@
   Library errorLibrary;
   Library twoExportsLib;
   Library interceptorsLib;
+  Library baseClassLib;
   PackageGraph sdkAsPackageGraph;
   Library dartAsync;
 
@@ -82,6 +83,8 @@
         packageGraph.libraries.firstWhere((lib) => lib.name == 'two_exports');
     interceptorsLib = packageGraph.libraries
         .firstWhere((lib) => lib.name == 'dart:_interceptors');
+    baseClassLib =
+        packageGraph.libraries.firstWhere((lib) => lib.name == 'base_class');
     sdkAsPackageGraph = utils.testPackageGraphSdk;
   });
 
@@ -492,7 +495,7 @@
       expect(
           packageGraph
               .localPackages.first.defaultCategory.publicLibraries.length,
-          equals(5));
+          equals(7));
     });
 
     test('Verify libraries with multiple categories show up in multiple places',
@@ -516,7 +519,7 @@
       expect(
           packageGraph
               .localPackages.first.defaultCategory.publicLibraries.length,
-          equals(5));
+          equals(7));
     });
   });
 
@@ -588,7 +591,7 @@
       });
 
       test('libraries', () {
-        expect(packageGraph.localPublicLibraries, hasLength(10));
+        expect(packageGraph.localPublicLibraries, hasLength(12));
         expect(interceptorsLib.isPublic, isFalse);
       });
 
@@ -603,7 +606,7 @@
 
         Package package = packageGraph.localPackages.first;
         expect(package.name, 'test_package');
-        expect(package.publicLibraries, hasLength(10));
+        expect(package.publicLibraries, hasLength(12));
       });
 
       test('multiple packages, sorted default', () {
@@ -1432,6 +1435,15 @@
             contains('<a href="ex/B-class.html">ex.B</a>'));
       });
 
+      test('link to override method in implementer from base class', () {
+        final Class helperClass =
+            baseClassLib.classes.firstWhere((c) => c.name == 'Constraints');
+        expect(
+            helperClass.documentationAsHtml,
+            contains(
+                '<a href="override_class/BoxConstraints/debugAssertIsValid.html">BoxConstraints.debugAssertIsValid</a>'));
+      });
+
       test(
           'link to a name of a class from an imported library that exports the name',
           () {
diff --git a/testing/test_package/lib/base_class.dart b/testing/test_package/lib/base_class.dart
new file mode 100644
index 0000000..d35825e
--- /dev/null
+++ b/testing/test_package/lib/base_class.dart
@@ -0,0 +1,20 @@
+library base_class;
+
+/// Abstract class Constraints
+/// * The [debugAssertIsValid] method, which should assert if there's anything
+///   wrong with the constraints object. (We use this approach rather than
+///   asserting in constructors so that our constructors can be `const` and so
+///   that it is possible to create invalid constraints temporarily while
+///   building valid ones.) See the implementation of
+///   [BoxConstraints.debugAssertIsValid] for an example of the detailed checks
+///   that can be made.
+abstract class Constraints {
+  /// Abstract const constructor. This constructor enables subclasses to provide
+  /// const constructors so that they can be used in const expressions.
+  const Constraints();
+
+  /// Method is overriden in implementations.
+  bool debugAssertIsValid() {
+    return true;
+  }
+}
diff --git a/testing/test_package/lib/override_class.dart b/testing/test_package/lib/override_class.dart
new file mode 100644
index 0000000..3e0bee6
--- /dev/null
+++ b/testing/test_package/lib/override_class.dart
@@ -0,0 +1,12 @@
+import 'base_class.dart';
+
+class BoxConstraints extends Constraints {
+  /// Creates box constraints with the given constraints.
+  const BoxConstraints();
+
+  /// Overrides the method in the superclass.
+  @override
+  bool debugAssertIsValid() {
+    return false;
+  }
+}
