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:
Brian Wilkerson 2019-06-13 18:51:44 +00:00 committed by commit-bot@chromium.org
parent 9b55e3027a
commit e9f17ae8e8
2 changed files with 39 additions and 0 deletions

View file

@ -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;

View file

@ -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