Skip to content

Commit 086815c

Browse files
authored
convert assert into a warning (#2178)
1 parent 1cd44e6 commit 086815c

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

lib/src/model/getter_setter_combo.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:analyzer/source/line_info.dart';
1010
import 'package:analyzer/src/dart/element/element.dart';
1111
import 'package:dartdoc/src/model/model.dart';
1212
import 'package:dartdoc/src/utils.dart';
13+
import 'package:dartdoc/src/warnings.dart';
1314

1415
/// Mixin for top-level variables and fields (aka properties)
1516
mixin GetterSetterCombo on ModelElement {
@@ -47,14 +48,13 @@ mixin GetterSetterCombo on ModelElement {
4748

4849
String linkifyConstantValue(String original) {
4950
if (constantInitializer is! InstanceCreationExpression) return original;
50-
String constructorName = (constantInitializer as InstanceCreationExpression)
51-
.constructorName
52-
.toString();
53-
Element staticElement =
54-
(constantInitializer as InstanceCreationExpression).staticElement;
55-
assert(staticElement != null,
56-
'${original} should be able to be resolved but an analysis error prevents this');
57-
if (staticElement == null) return original;
51+
var creationExpression = constantInitializer as InstanceCreationExpression;
52+
String constructorName = creationExpression.constructorName.toString();
53+
Element staticElement = creationExpression.staticElement;
54+
if (staticElement == null) {
55+
warn(PackageWarning.missingConstantConstructor, message: constructorName);
56+
return original;
57+
}
5858
Constructor target = ModelElement.fromElement(staticElement, packageGraph);
5959
Class targetClass = target.enclosingElement;
6060
// TODO(jcollins-g): this logic really should be integrated into Constructor,

lib/src/model/package_graph.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,9 @@ class PackageGraph {
418418
warnablePrefix = 'for symbol';
419419
referredFromPrefix = 'conflicting with file already generated by';
420420
break;
421+
case PackageWarning.missingConstantConstructor:
422+
warningMessage = 'constant constructor missing: ${message}';
423+
break;
421424
}
422425

423426
List<String> messageParts = [warningMessage];

lib/src/warnings.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,19 @@ final Map<PackageWarning, PackageWarningDefinition> packageWarningDefinitions =
206206
"documentation comments to hide it."
207207
],
208208
defaultWarningMode: PackageWarningMode.error),
209+
PackageWarning.missingConstantConstructor: PackageWarningDefinition(
210+
PackageWarning.missingConstantConstructor,
211+
"missing-constant-constructor",
212+
"Dartdoc can not show the value of a constant because its constructor could not be resolved.",
213+
longHelp: [
214+
"To resolve a constant into its literal value, Dartdoc relies on the",
215+
"analyzer to resolve the constructor. The analyzer didn't provide",
216+
"the constructor for @@name@@, which is usually due to an error in the",
217+
"code. Use the analyzer to find missing imports.",
218+
],
219+
// Defaults to ignore as this doesn't impact the docs severely but is
220+
// useful for debugging package structure.
221+
defaultWarningMode: PackageWarningMode.ignore),
209222
};
210223

211224
/// Something that package warnings can be called on. Optionally associated
@@ -244,6 +257,7 @@ enum PackageWarning {
244257
toolError,
245258
deprecated,
246259
unresolvedExport,
260+
missingConstantConstructor,
247261
}
248262

249263
/// Used to declare defaults for a particular package warning.

0 commit comments

Comments
 (0)