@@ -44,7 +44,8 @@ final PackageMetaProvider pubPackageMetaProvider = PackageMetaProvider(
44
44
.getFile (PhysicalResourceProvider .INSTANCE .pathContext
45
45
.absolute (Platform .resolvedExecutable))
46
46
.parent2
47
- .parent2);
47
+ .parent2,
48
+ messageForMissingPackageMeta: PubPackageMeta .messageForMissingPackageMeta);
48
49
49
50
/// Sets the supported way of constructing [PackageMeta] objects.
50
51
///
@@ -63,15 +64,32 @@ class PackageMetaProvider {
63
64
_fromElement;
64
65
final PackageMeta Function (String , ResourceProvider ) _fromFilename;
65
66
final PackageMeta Function (Folder , ResourceProvider ) _fromDir;
67
+ final String Function (LibraryElement , DartdocOptionContext )
68
+ _messageForMissingPackageMeta;
66
69
67
70
PackageMeta fromElement (LibraryElement library, String s) =>
68
71
_fromElement (library, s, resourceProvider);
72
+
69
73
PackageMeta fromFilename (String s) => _fromFilename (s, resourceProvider);
74
+
70
75
PackageMeta fromDir (Folder dir) => _fromDir (dir, resourceProvider);
71
76
77
+ String getMessageForMissingPackageMeta (
78
+ LibraryElement library, DartdocOptionContext optionContext) =>
79
+ _messageForMissingPackageMeta (library, optionContext);
80
+
72
81
PackageMetaProvider (this ._fromElement, this ._fromFilename, this ._fromDir,
73
82
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
+ }
75
93
}
76
94
77
95
/// Describes a single package in the context of `dartdoc` .
@@ -255,6 +273,17 @@ abstract class PubPackageMeta extends PackageMeta {
255
273
return _packageMetaCache[pathContext.absolute (folder.path)];
256
274
}
257
275
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
+
258
287
@override
259
288
String sdkType (String flutterRootPath) {
260
289
if (flutterRootPath != null ) {
0 commit comments