| Index: lib/src/checker/checker.dart
|
| diff --git a/lib/src/checker/checker.dart b/lib/src/checker/checker.dart
|
| index 3bd7c88f414eea7d01c504007e755a4f0b4ddfa8..9d328979a5677938e33542f0a601ec3f1ab943b3 100644
|
| --- a/lib/src/checker/checker.dart
|
| +++ b/lib/src/checker/checker.dart
|
| @@ -719,9 +719,12 @@ class CodeChecker extends RecursiveAstVisitor {
|
| // Method invocation.
|
| if (element is MethodElement) {
|
| var type = element.type as FunctionType;
|
| - assert(type.normalParameterTypes.length == 1);
|
| - node.rightOperand =
|
| - checkArgument(node.rightOperand, type.normalParameterTypes[0]);
|
| + // Analyzer should enforce number of parameter types, but check in
|
| + // case we have erroneous input.
|
| + if (type.normalParameterTypes.isNotEmpty) {
|
| + node.rightOperand =
|
| + checkArgument(node.rightOperand, type.normalParameterTypes[0]);
|
| + }
|
| } else {
|
| // TODO(vsm): Assert that the analyzer found an error here?
|
| }
|
| @@ -744,6 +747,26 @@ class CodeChecker extends RecursiveAstVisitor {
|
| node.visitChildren(this);
|
| }
|
|
|
| + @override
|
| + void visitIndexExpression(IndexExpression node) {
|
| + if (_rules.isDynamicTarget(node.target)) {
|
| + _recordDynamicInvoke(node);
|
| + } else {
|
| + var element = node.staticElement;
|
| + if (element is MethodElement) {
|
| + var type = element.type as FunctionType;
|
| + // Analyzer should enforce number of parameter types, but check in
|
| + // case we have erroneous input.
|
| + if (type.normalParameterTypes.isNotEmpty) {
|
| + node.index = checkArgument(node.index, type.normalParameterTypes[0]);
|
| + }
|
| + } else {
|
| + // TODO(vsm): Assert that the analyzer found an error here?
|
| + }
|
| + }
|
| + node.visitChildren(this);
|
| + }
|
| +
|
| DartType getType(TypeName name) {
|
| return (name == null) ? _rules.provider.dynamicType : name.type;
|
| }
|
|
|