@@ -292,8 +292,8 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder {
292
292
293
293
void warnOnElement (Warnable ? warnable, PackageWarning kind,
294
294
{String ? message,
295
- Iterable <Locatable >? referredFrom,
296
- Iterable <String >? extendedDebug}) {
295
+ Iterable <Locatable > referredFrom = const [] ,
296
+ Iterable <String > extendedDebug = const [] }) {
297
297
var newEntry = Tuple3 (warnable? .element, kind, message);
298
298
if (_warnAlreadySeen.contains (newEntry)) {
299
299
return ;
@@ -310,16 +310,14 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder {
310
310
311
311
void _warnOnElement (Warnable ? warnable, PackageWarning kind,
312
312
{required String message,
313
- Iterable <Locatable >? referredFrom,
314
- Iterable <String >? extendedDebug}) {
315
- if (warnable is ModelElement ) {
313
+ Iterable <Locatable > referredFrom = const [] ,
314
+ Iterable <String > extendedDebug = const [] }) {
315
+ if (warnable is ModelElement && kind == PackageWarning .ambiguousReexport ) {
316
316
// This sort of warning is only applicable to top level elements.
317
- if (kind == PackageWarning .ambiguousReexport) {
318
- var enclosingElement = warnable.enclosingElement;
319
- while (enclosingElement != null && enclosingElement is ! Library ) {
320
- warnable = enclosingElement;
321
- enclosingElement = warnable.enclosingElement;
322
- }
317
+ var enclosingElement = warnable.enclosingElement;
318
+ while (enclosingElement != null && enclosingElement is ! Library ) {
319
+ warnable = enclosingElement;
320
+ enclosingElement = warnable.enclosingElement;
323
321
}
324
322
}
325
323
@@ -329,165 +327,72 @@ class PackageGraph with CommentReferable, Nameable, ModelBuilder {
329
327
if (packageWarningCounter.hasWarning (warnable, kind, message)) {
330
328
return ;
331
329
}
332
- // Some kinds of warnings it is OK to drop if we're not documenting them.
330
+ // Some kinds of warnings are OK to drop if we're not documenting them.
333
331
// TODO(jcollins-g): drop this and use new flag system instead.
334
332
if (warnable != null &&
335
333
skipWarningIfNotDocumentedFor.contains (kind) &&
336
334
! warnable.isDocumented) {
337
335
return ;
338
336
}
339
337
// Elements that are part of the Dart SDK can have colons in their FQNs.
340
- // This confuses IntelliJ and makes it so it can't link to the location
341
- // of the error in the console window, so separate out the library from
342
- // the path.
343
- // TODO(jcollins-g): What about messages that may include colons? Substituting
344
- // them out doesn't work as well there since it might confuse
345
- // the user, yet we still want IntelliJ to link properly.
346
- final warnableName = _safeWarnableName (warnable);
347
-
348
- var warnablePrefix = 'from' ;
349
- var referredFromPrefix = 'referred to by' ;
338
+ // This confuses IntelliJ and makes it so it can't link to the location of
339
+ // the error in the console window, so separate out the library from the
340
+ // path.
341
+ // TODO(jcollins-g): What about messages that may include colons?
342
+ // Substituting them out doesn't work as well there since it might confuse
343
+ // the user, yet we still want IntelliJ to link properly.
344
+ final warnableName = warnable.safeWarnableName;
345
+
350
346
String warningMessage;
351
347
switch (kind) {
352
- case PackageWarning .noCanonicalFound:
353
- // Fix these warnings by adding libraries with --include, or by using
354
- // --auto-include-dependencies.
355
- // TODO(jcollins-g): pipeline references through linkedName for error
356
- // messages and warn for non-public canonicalization
357
- // errors.
358
- warningMessage =
359
- 'no canonical library found for $warnableName , not linking' ;
360
- break ;
361
348
case PackageWarning .ambiguousReexport:
362
- // Fix these warnings by adding the original library exporting the
363
- // symbol with --include, by using --auto-include-dependencies,
364
- // or by using --exclude to hide one of the libraries involved
365
- warningMessage =
366
- 'ambiguous reexport of $warnableName , canonicalization candidates: $message ' ;
349
+ warningMessage = kind.messageFor ([warnableName, message]);
367
350
break ;
351
+ case PackageWarning .noCanonicalFound:
368
352
case PackageWarning .noDefiningLibraryFound:
369
- warningMessage =
370
- 'could not find the defining library for $warnableName ; the '
371
- 'library may be imported or exported with a non-standard URI' ;
353
+ warningMessage = kind.messageFor ([warnableName]);
372
354
break ;
373
355
case PackageWarning .noLibraryLevelDocs:
374
- warningMessage =
375
- '${warnable !.fullyQualifiedName } has no library level documentation comments' ;
376
- break ;
377
356
case PackageWarning .noDocumentableLibrariesInPackage:
378
- warningMessage =
379
- '${warnable !.fullyQualifiedName } has no documentable libraries' ;
357
+ warningMessage = kind.messageFor ([warnable! .fullyQualifiedName]);
380
358
break ;
381
359
case PackageWarning .ambiguousDocReference:
382
- warningMessage = 'ambiguous doc reference $message ' ;
383
- break ;
384
360
case PackageWarning .ignoredCanonicalFor:
385
- warningMessage =
386
- "library says it is {@canonicalFor $message } but $message can't be canonical there" ;
387
- break ;
388
361
case PackageWarning .packageOrderGivesMissingPackageName:
389
- warningMessage =
390
- "--package-order gives invalid package name: '$message '" ;
391
- break ;
392
362
case PackageWarning .reexportedPrivateApiAcrossPackages:
393
- warningMessage =
394
- 'private API of $message is reexported by libraries in other packages: ' ;
395
- break ;
396
363
case PackageWarning .notImplemented:
397
- warningMessage = message;
398
- break ;
399
364
case PackageWarning .unresolvedDocReference:
400
- warningMessage = 'unresolved doc reference [$message ]' ;
401
- referredFromPrefix = 'in documentation inherited from' ;
402
- break ;
403
365
case PackageWarning .unknownDirective:
404
- warningMessage = 'undefined directive: $message ' ;
405
- break ;
406
366
case PackageWarning .unknownMacro:
407
- warningMessage = 'undefined macro [$message ]' ;
408
- break ;
409
367
case PackageWarning .unknownHtmlFragment:
410
- warningMessage = 'undefined HTML fragment identifier [$message ]' ;
411
- break ;
412
368
case PackageWarning .brokenLink:
413
- warningMessage = 'dartdoc generated a broken link to: $message ' ;
414
- warnablePrefix = 'to element' ;
415
- referredFromPrefix = 'linked to from' ;
416
- break ;
369
+ case PackageWarning .duplicateFile:
417
370
case PackageWarning .orphanedFile:
418
- warningMessage = 'dartdoc generated a file orphan: $message ' ;
419
- break ;
420
371
case PackageWarning .unknownFile:
421
- warningMessage =
422
- 'dartdoc detected an unknown file in the doc tree: $message ' ;
423
- break ;
424
372
case PackageWarning .missingFromSearchIndex:
425
- warningMessage =
426
- 'dartdoc generated a file not in the search index: $message ' ;
427
- break ;
428
373
case PackageWarning .typeAsHtml:
429
- // The message for this warning can contain many punctuation and other symbols,
430
- // so bracket with a triple quote for defense.
431
- warningMessage = 'generic type handled as HTML: """$message """' ;
432
- break ;
433
374
case PackageWarning .invalidParameter:
434
- warningMessage = 'invalid parameter to dartdoc directive: $message ' ;
435
- break ;
436
375
case PackageWarning .toolError:
437
- warningMessage = 'tool execution failed: $message ' ;
438
- break ;
439
376
case PackageWarning .deprecated:
440
- warningMessage = 'deprecated dartdoc usage: $message ' ;
441
- break ;
442
377
case PackageWarning .unresolvedExport:
443
- warningMessage = 'unresolved export uri: $message ' ;
444
- break ;
445
- case PackageWarning .duplicateFile:
446
- warningMessage = 'failed to write file at: $message ' ;
447
- warnablePrefix = 'for symbol' ;
448
- referredFromPrefix = 'conflicting with file already generated by' ;
449
- break ;
450
378
case PackageWarning .missingConstantConstructor:
451
- warningMessage = 'constant constructor missing: $message ' ;
452
- break ;
453
379
case PackageWarning .missingExampleFile:
454
- warningMessage = 'example file not found: $message ' ;
455
- break ;
456
380
case PackageWarning .missingCodeBlockLanguage:
457
- warningMessage = 'missing code block language: $message ' ;
458
- break ;
381
+ warningMessage = kind.messageFor ([message]);
459
382
}
460
383
461
- var messageParts = < String > [warningMessage];
462
- if (warnable != null ) {
463
- messageParts.add ('$warnablePrefix $warnableName : ${warnable .location }' );
464
- }
465
- if (referredFrom != null ) {
466
- for (var referral in referredFrom) {
467
- if (referral != warnable) {
468
- var referredFromStrings = _safeWarnableName (referral);
469
- messageParts.add (
470
- '$referredFromPrefix $referredFromStrings : ${referral .location }' );
471
- }
472
- }
473
- }
474
- if (config.verboseWarnings && extendedDebug != null ) {
475
- messageParts.addAll (extendedDebug.map ((s) => ' $s ' ));
476
- }
477
- var fullMessage = messageParts.join ('\n ' );
384
+ var fullMessage = [
385
+ warningMessage,
386
+ if (warnable != null ) kind.messageForWarnable (warnable),
387
+ for (var referral in referredFrom)
388
+ if (referral != warnable) kind.messageForReferral (referral),
389
+ if (config.verboseWarnings) ...extendedDebug.map ((s) => ' $s ' )
390
+ ].join ('\n ' );
478
391
479
392
packageWarningCounter.addWarning (warnable, kind, message, fullMessage);
480
393
}
481
394
482
- String _safeWarnableName (Locatable ? locatable) {
483
- if (locatable == null ) {
484
- return '<unknown>' ;
485
- }
486
-
487
- return locatable.fullyQualifiedName.replaceFirst (':' , '-' );
488
- }
489
-
490
- List <Package > get packages => packageMap.values.toList (growable: false );
395
+ Iterable <Package > get packages => packageMap.values;
491
396
492
397
late final List <Package > publicPackages = () {
493
398
assert (allLibrariesAdded);
0 commit comments