Fix links to overriden methods in docs for base class (#1998)
* Fix links to overriden methods in docs for base class
* fix spelling, format test code
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;
+ }
+}