diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index d304457ec8..42e95bb0f7 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -26156,6 +26156,7 @@ const _invisibleGetters = { 'libraryCount', 'libraryExports', 'libraryExports2', + 'localLibraries', 'localPackages', 'localPublicLibraries', 'name', diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 485ef28ece..5b69c36b1b 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -512,11 +512,15 @@ abstract class ModelElement // This is not accurate if we are still constructing the Package. assert(packageGraph.allLibrariesAdded); - var definingLibraryIsLocalPublic = - packageGraph.localPublicLibraries.contains(library); - var possibleCanonicalLibrary = definingLibraryIsLocalPublic - ? library - : canonicalLibraryCandidate(this); + var isLocalLibrary = packageGraph.localLibraries.contains(library); + if (!isLocalLibrary && !config.linkToRemote) { + return null; + } + + var definingLibraryIsPublic = + packageGraph.publicLibraries.contains(library); + var possibleCanonicalLibrary = + definingLibraryIsPublic ? library : canonicalLibraryCandidate(this); if (possibleCanonicalLibrary != null) return possibleCanonicalLibrary; diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index 4c0de5897a..5eb01a6cce 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -679,7 +679,7 @@ class PackageGraph with CommentReferable, Nameable { return libraries.wherePublic.toSet(); }(); - late final List _localLibraries = () { + late final List localLibraries = () { assert(allLibrariesAdded); return localPackages.expand((p) => p.libraries).toList(growable: false) ..sort(); @@ -687,7 +687,7 @@ class PackageGraph with CommentReferable, Nameable { late final Set localPublicLibraries = () { assert(allLibrariesAdded); - return _localLibraries.wherePublic.toSet(); + return localLibraries.wherePublic.toSet(); }(); /// The String name representing the `Object` type. diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index 482ae95815..d600d13ce5 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -1834,7 +1834,7 @@ void main() async { group('Class', () { late final List classes; - late final Class Apple, B, Cat, Dog, F, Dep, SpecialList; + late final Class Apple, B, Cat, Dog, F, Helper, SpecialList; late final Class ExtendingClass, CatString; setUpAll(() { @@ -1844,7 +1844,7 @@ void main() async { Cat = classes.named('Cat'); Dog = classes.named('Dog'); F = classes.named('F'); - Dep = classes.named('Deprecated'); + Helper = classes.named('Helper'); SpecialList = fakeLibrary.classes.named('SpecialList'); ExtendingClass = twoExportsLib.classes.named('ExtendingClass'); CatString = exLibrary.classes.named('CatString'); @@ -1879,7 +1879,7 @@ void main() async { }); test('correctly finds all the classes', () { - expect(classes, hasLength(34)); + expect(classes, hasLength(33)); }); test('abstract', () { @@ -1982,10 +1982,9 @@ void main() async { }); test('exported class should have hrefs from the current library', () { - expect( - Dep.href, equals('${htmlBasePlaceholder}ex/Deprecated-class.html')); - expect(Dep.instanceMethods.named('toString').href, - equals('${htmlBasePlaceholder}ex/Deprecated/toString.html')); + expect(Helper.href, equals('${htmlBasePlaceholder}ex/Helper-class.html')); + expect(Helper.instanceMethods.named('toString').href, + equals('${htmlBasePlaceholder}ex/Helper/toString.html')); }); test('F has a single instance method', () { diff --git a/test/packages_test.dart b/test/packages_test.dart index c6861a8f43..ef15937e50 100644 --- a/test/packages_test.dart +++ b/test/packages_test.dart @@ -263,6 +263,7 @@ library bar; .writeAsStringSync(''' /// Documentation comment. library one; +export 'some_other_lib.dart' show Exported; class One {} '''); @@ -276,6 +277,10 @@ library script; class Script {} '''); + packageOneRoot + .getChildAssumingFolder('lib') + .getChildAssumingFile('some_other_lib.dart') + .writeAsStringSync('''class Exported {}'''); packageTwoRoot = utils.writePackage('two', resourceProvider, packageConfigProvider); @@ -316,6 +321,12 @@ dartdoc: expect(packageOne.documentedWhere, equals(DocumentLocation.remote)); expect(classOne.href, equals('https://mypub.topdomain/one/0.0.1/one/One-class.html')); + // Validate that canonicalization takes place for remote packages. + var exported = libraryOne.classes.named('Exported'); + expect( + exported.href, + equals( + 'https://mypub.topdomain/one/0.0.1/some_other_lib/Exported-class.html')); }); test(