mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:31:58 +00:00
Convert some NPEs into explicit throws and add the missing visit methods discovered by doing so
Change-Id: I0613614168a7373a460d05cf8470f9b59264de0b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105970 Reviewed-by: Paul Berry <paulberry@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
9b55e3027a
commit
e9f17ae8e8
|
@ -173,6 +173,11 @@ class GraphBuilder extends GeneralizingAstVisitor<DecoratedType> {
|
|||
return expressionType;
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitAwaitExpression(AwaitExpression node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitBinaryExpression(BinaryExpression node) {
|
||||
switch (node.operator.type) {
|
||||
|
@ -370,6 +375,11 @@ class GraphBuilder extends GeneralizingAstVisitor<DecoratedType> {
|
|||
return DecoratedType(node.staticType, _graph.never);
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitListLiteral(ListLiteral node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitMethodDeclaration(MethodDeclaration node) {
|
||||
node.parameters?.accept(this);
|
||||
|
@ -450,6 +460,11 @@ $stackTrace''');
|
|||
}
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitPrefixExpression(PrefixExpression node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitPropertyAccess(PropertyAccess node) {
|
||||
return _handlePropertyAccess(node, node.realTarget, node.propertyName);
|
||||
|
@ -484,6 +499,11 @@ $stackTrace''');
|
|||
return DecoratedType(node.staticType, _graph.never);
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitSuperExpression(SuperExpression node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitThisExpression(ThisExpression node) {
|
||||
return DecoratedType(node.staticType, _graph.never);
|
||||
|
@ -599,6 +619,10 @@ $stackTrace''');
|
|||
DecoratedType destinationType, Expression expression,
|
||||
{bool canInsertChecks = true}) {
|
||||
var sourceType = expression.accept(this);
|
||||
if (sourceType == null) {
|
||||
throw StateError('No type computed for ${expression.runtimeType} '
|
||||
'(${expression.toSource()}) offset=${expression.offset}');
|
||||
}
|
||||
_checkAssignment(
|
||||
destinationType, sourceType, canInsertChecks ? expression : null);
|
||||
return sourceType;
|
||||
|
|
|
@ -80,11 +80,26 @@ class NodeBuilder extends GeneralizingAstVisitor<DecoratedType> {
|
|||
if (node.declaredElement.hasRequired || node.defaultValue != null) {
|
||||
return null;
|
||||
}
|
||||
if (decoratedType == null) {
|
||||
throw StateError('No type computed for ${node.parameter.runtimeType} '
|
||||
'(${node.parent.parent.toSource()}) offset=${node.offset}');
|
||||
}
|
||||
decoratedType.node.trackPossiblyOptional();
|
||||
_variables.recordPossiblyOptional(_source, node, decoratedType.node);
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitFieldFormalParameter(FieldFormalParameter node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitFunctionTypedFormalParameter(
|
||||
FunctionTypedFormalParameter node) {
|
||||
throw new UnimplementedError('TODO(brianwilkerson)');
|
||||
}
|
||||
|
||||
@override
|
||||
DecoratedType visitFormalParameter(FormalParameter node) {
|
||||
// Do not visit children
|
||||
|
|
Loading…
Reference in a new issue