@@ -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,32 @@ 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);
72+
6973 PackageMeta fromFilename (String s) => _fromFilename (s, resourceProvider);
74+
7075 PackageMeta fromDir (Folder dir) => _fromDir (dir, resourceProvider);
7176
77+ String getMessageForMissingPackageMeta (
78+ LibraryElement library, DartdocOptionContext optionContext) =>
79+ _messageForMissingPackageMeta (library, optionContext);
80+
7281 PackageMetaProvider (this ._fromElement, this ._fromFilename, this ._fromDir,
7382 this .resourceProvider, this .defaultSdkDir,
74- {this .defaultSdk});
83+ {this .defaultSdk,
84+ Function (LibraryElement , DartdocOptionContext )
85+ messageForMissingPackageMeta})
86+ : _messageForMissingPackageMeta = messageForMissingPackageMeta ??
87+ _defaultMessageForMissingPackageMeta;
88+
89+ static String _defaultMessageForMissingPackageMeta (
90+ LibraryElement library, DartdocOptionContext optionContext) {
91+ return 'Unknown package for library: ${library .source .fullName }' ;
92+ }
7593}
7694
7795/// Describes a single package in the context of `dartdoc` .
@@ -255,6 +273,17 @@ abstract class PubPackageMeta extends PackageMeta {
255273 return _packageMetaCache[pathContext.absolute (folder.path)];
256274 }
257275
276+ /// Create a helpful user error message for a case where a package can not
277+ /// be found.
278+ static String messageForMissingPackageMeta (
279+ LibraryElement library, DartdocOptionContext optionContext) {
280+ var libraryString = library.librarySource.fullName;
281+ var dartOrFlutter = optionContext.flutterRoot == null ? 'dart' : 'flutter' ;
282+ return 'Unknown package for library: $libraryString . Consider `$dartOrFlutter pub get` and/or '
283+ '`$dartOrFlutter pub global deactivate dartdoc` followed by `$dartOrFlutter pub global activate dartdoc` to fix. '
284+ 'Also, be sure that `$dartOrFlutter analyze` completes without errors.' ;
285+ }
286+
258287 @override
259288 String sdkType (String flutterRootPath) {
260289 if (flutterRootPath != null ) {
0 commit comments