Index: lib/src/checker/checker.dart |
diff --git a/lib/src/checker/checker.dart b/lib/src/checker/checker.dart |
index 024a066ca63de43dfab84015068e927b21c4657c..ef030ec7c7c2fef6a1671d4594fb5f12694cd8a3 100644 |
--- a/lib/src/checker/checker.dart |
+++ b/lib/src/checker/checker.dart |
@@ -456,19 +456,21 @@ class CodeChecker extends RecursiveAstVisitor { |
} |
// Check invocations |
- bool checkArgumentList(ArgumentList node, FunctionType type) { |
+ bool checkArgumentList(ArgumentList node, DartType type) { |
NodeList<Expression> list = node.arguments; |
int len = list.length; |
+ if (len == 0) return true; |
+ FunctionType ft = type; |
for (int i = 0; i < len; ++i) { |
Expression arg = list[i]; |
ParameterElement element = node.getStaticParameterElementFor(arg); |
if (element == null) { |
- if (type.parameters.length < len) { |
+ if (ft.parameters.length < len) { |
// We found an argument mismatch, the analyzer will report this too, |
// so no need to insert an error for this here. |
continue; |
} |
- element = type.parameters[i]; |
+ element = ft.parameters[i]; |
// TODO(vsm): When can this happen? |
assert(element != null); |
} |
@@ -566,7 +568,7 @@ class CodeChecker extends RecursiveAstVisitor { |
} |
visitPropertyAccess(PropertyAccess node) { |
- if (_rules.isDynamicGet(node.realTarget)) { |
+ if (_rules.isDynamicGet(node.realTarget, node.propertyName.name)) { |
_recordDynamicInvoke(node); |
} |
node.visitChildren(this); |
@@ -576,7 +578,8 @@ class CodeChecker extends RecursiveAstVisitor { |
final target = node.prefix; |
// Check if the prefix is a library - PrefixElement denotes a library |
// access. |
- if (target.staticElement is! PrefixElement && _rules.isDynamicGet(target)) { |
+ if (target.staticElement is! PrefixElement && |
+ _rules.isDynamicGet(target, node.identifier.name)) { |
_recordDynamicInvoke(node); |
} |
node.visitChildren(this); |