@@ -44,7 +44,8 @@ final PackageMetaProvider pubPackageMetaProvider = PackageMetaProvider(
4444 .getFile (PhysicalResourceProvider .INSTANCE .pathContext
4545 .absolute (Platform .resolvedExecutable))
4646 .parent2
47- .parent2);
47+ .parent2,
48+ messageForMissingPackageMeta: PubPackageMeta .messageForMissingPackageMeta);
4849
4950/// Sets the supported way of constructing [PackageMeta] objects.
5051///
@@ -63,15 +64,30 @@ class PackageMetaProvider {
6364 _fromElement;
6465 final PackageMeta ? Function (String , ResourceProvider ) _fromFilename;
6566 final PackageMeta ? Function (Folder , ResourceProvider ) _fromDir;
67+ final String Function (LibraryElement , DartdocOptionContext )
68+ _messageForMissingPackageMeta;
6669
6770 PackageMeta ? fromElement (LibraryElement library, String s) =>
6871 _fromElement (library, s, resourceProvider);
6972 PackageMeta ? fromFilename (String s) => _fromFilename (s, resourceProvider);
7073 PackageMeta ? fromDir (Folder dir) => _fromDir (dir, resourceProvider);
7174
75+ String getMessageForMissingPackageMeta (
76+ LibraryElement library, DartdocOptionContext optionContext) =>
77+ _messageForMissingPackageMeta (library, optionContext);
78+
7279 PackageMetaProvider (this ._fromElement, this ._fromFilename, this ._fromDir,
7380 this .resourceProvider, this .defaultSdkDir,
74- {this .defaultSdk});
81+ {this .defaultSdk,
82+ String Function (LibraryElement , DartdocOptionContext )?
83+ messageForMissingPackageMeta})
84+ : _messageForMissingPackageMeta = messageForMissingPackageMeta ??
85+ _defaultMessageForMissingPackageMeta;
86+
87+ static String _defaultMessageForMissingPackageMeta (
88+ LibraryElement library, DartdocOptionContext optionContext) {
89+ return 'Unknown package for library: ${library .source .fullName }' ;
90+ }
7591}
7692
7793/// Describes a single package in the context of `dartdoc` .
@@ -252,6 +268,17 @@ abstract class PubPackageMeta extends PackageMeta {
252268 return _packageMetaCache[pathContext.absolute (folder.path)];
253269 }
254270
271+ /// Create a helpful user error message for a case where a package can not
272+ /// be found.
273+ static String messageForMissingPackageMeta (
274+ LibraryElement library, DartdocOptionContext optionContext) {
275+ var libraryString = library.librarySource.fullName;
276+ var dartOrFlutter = optionContext.flutterRoot == null ? 'dart' : 'flutter' ;
277+ return 'Unknown package for library: $libraryString . Consider `$dartOrFlutter pub get` and/or '
278+ '`$dartOrFlutter pub global deactivate dartdoc` followed by `$dartOrFlutter pub global activate dartdoc` to fix. '
279+ 'Also, be sure that `$dartOrFlutter analyze` completes without errors.' ;
280+ }
281+
255282 @override
256283 String ? sdkType (String ? flutterRootPath) {
257284 if (flutterRootPath != null ) {
0 commit comments