| Index: lib/src/checker/checker.dart
|
| diff --git a/lib/src/checker/checker.dart b/lib/src/checker/checker.dart
|
| index 195478bceeb873aae517db74f6b58f39fc8cf89e..ea070f96aa910d79dbb7ecc948d5fb2d2ed35422 100644
|
| --- a/lib/src/checker/checker.dart
|
| +++ b/lib/src/checker/checker.dart
|
| @@ -340,17 +340,6 @@ class CodeChecker extends RecursiveAstVisitor {
|
| _overrideChecker = new _OverrideChecker(rules, reporter);
|
|
|
| @override
|
| - void visitCompilationUnit(CompilationUnit unit) {
|
| - void report(Expression expr) {
|
| - reporter.onError(new MissingTypeError(expr).toAnalysisError());
|
| - }
|
| - var callback = rules.reportMissingType;
|
| - rules.reportMissingType = report;
|
| - unit.visitChildren(this);
|
| - rules.reportMissingType = callback;
|
| - }
|
| -
|
| - @override
|
| void visitComment(Comment node) {
|
| // skip, no need to do typechecking inside comments (they may contain
|
| // comment references which would require resolution).
|
| @@ -368,7 +357,7 @@ class CodeChecker extends RecursiveAstVisitor {
|
| if (token.type != TokenType.EQ) {
|
| _checkCompoundAssignment(node);
|
| } else {
|
| - DartType staticType = rules.getStaticType(node.leftHandSide);
|
| + DartType staticType = _getStaticType(node.leftHandSide);
|
| checkAssignment(node.rightHandSide, staticType);
|
| }
|
| node.visitChildren(this);
|
| @@ -894,8 +883,8 @@ class CodeChecker extends RecursiveAstVisitor {
|
|
|
| // Check the lhs type
|
| var staticInfo;
|
| - var rhsType = rules.getStaticType(expr.rightHandSide);
|
| - var lhsType = rules.getStaticType(expr.leftHandSide);
|
| + var rhsType = _getStaticType(expr.rightHandSide);
|
| + var lhsType = _getStaticType(expr.leftHandSide);
|
| var returnType = _specializedBinaryReturnType(
|
| op, lhsType, rhsType, functionType.returnType);
|
|
|
| @@ -941,6 +930,14 @@ class CodeChecker extends RecursiveAstVisitor {
|
| return _isObjectGetter(target, id) || _isObjectMethod(target, id);
|
| }
|
|
|
| + DartType _getStaticType(Expression expr) {
|
| + var type = expr.staticType;
|
| + if (type == null) {
|
| + reporter.onError(new MissingTypeError(expr).toAnalysisError());
|
| + }
|
| + return type ?? rules.provider.dynamicType;
|
| + }
|
| +
|
| void _recordDynamicInvoke(AstNode node, AstNode target) {
|
| reporter.onError(new DynamicInvoke(rules, node).toAnalysisError());
|
| // TODO(jmesserly): we may eventually want to record if the whole operation
|
|
|