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