Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2264)

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java

Issue 15745013: Report parameters/arguments count mismatch (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
index 8aced03c7fe908041d73aa1ddcf2d3ab48209b9d..b7be046d418275643b914be90166ef52f5d489a4 100644
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ElementResolver.java
@@ -1901,10 +1901,9 @@ public class ElementResolver extends SimpleASTVisitor<Void> {
NodeList<Expression> arguments = argumentList.getArguments();
int argumentCount = arguments.size();
- if (argumentCount < requiredParameters.size()) {
- // TODO(brianwilkerson) Report this error (not enough arguments)
- }
ParameterElement[] resolvedParameters = new ParameterElement[argumentCount];
+ int positionalArgumentCount = 0;
+ HashSet<String> usedNames = new HashSet<String>();
for (int i = 0; i < argumentCount; i++) {
Expression argument = arguments.get(i);
if (argument instanceof NamedExpression) {
@@ -1912,19 +1911,34 @@ public class ElementResolver extends SimpleASTVisitor<Void> {
String name = nameNode.getName();
ParameterElement element = namedParameters.get(name);
if (element == null) {
- // TODO(brianwilkerson) Report this error (no corresponding parameter for named argument)
+ resolver.reportError(StaticWarningCode.UNDEFINED_NAMED_PARAMETER, nameNode, name);
} else {
resolvedParameters[i] = element;
recordResolution(nameNode, element);
}
+ if (!usedNames.add(name)) {
+ resolver.reportError(CompileTimeErrorCode.DUPLICATE_NAMED_ARGUMENT, nameNode, name);
+ }
} else {
+ positionalArgumentCount++;
if (unnamedIndex < unnamedParameterCount) {
resolvedParameters[i] = unnamedParameters.get(unnamedIndex++);
- } else {
- // TODO(brianwilkerson) Report this error (too many positional arguments) exactly once
}
}
}
+ if (positionalArgumentCount < requiredParameters.size()) {
+ resolver.reportError(
+ StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS,
+ argumentList,
+ requiredParameters.size(),
+ positionalArgumentCount);
+ } else if (positionalArgumentCount > unnamedParameterCount) {
+ resolver.reportError(
+ StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS,
+ argumentList,
+ unnamedParameterCount,
+ positionalArgumentCount);
+ }
argumentList.setCorrespondingParameters(resolvedParameters);
}

Powered by Google App Engine
This is Rietveld 408576698