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

Unified Diff: compiler/java/com/google/dart/compiler/resolver/Resolver.java

Issue 11309011: Issue 4289. Separate optional positional and named parameters (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 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: compiler/java/com/google/dart/compiler/resolver/Resolver.java
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index b95c72624f1fd0c379217c77478a361b7943534f..2c2f42b44c06a4de3149aecdb7299e4e0e267989 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -281,10 +281,15 @@ public class Resolver {
if (parameter.getQualifier() instanceof DartThisExpression) {
onError(parameter.getName(), ResolverErrorCode.PARAMETER_INIT_OUTSIDE_CONSTRUCTOR);
} else {
- if (parameter.getModifiers().isNamed()
- && DartIdentifier.isPrivateName(parameter.getElement().getName())) {
- onError(parameter.getName(),
- ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER);
+ if (DartIdentifier.isPrivateName(parameter.getElement().getName())) {
+ if (parameter.getModifiers().isOptional()) {
+ onError(parameter.getName(),
+ ResolverErrorCode.OPTIONAL_PARAMETERS_CANNOT_START_WITH_UNDER);
+ }
+ if (parameter.getModifiers().isNamed()) {
+ onError(parameter.getName(),
+ ResolverErrorCode.NAMED_PARAMETERS_CANNOT_START_WITH_UNDER);
+ }
}
getContext().declare(parameter.getElement(), ResolverErrorCode.DUPLICATE_PARAMETER);
}
@@ -575,6 +580,22 @@ public class Resolver {
numReqDefault);
}
}
+ // Validate number of required parameters.
+ {
+ int numInterface = Elements.getNumberOfOptionalPositionalParameters(interfaceConstructor);
+ int numDefault = Elements.getNumberOfOptionalPositionalParameters(defaultConstructor);
+ if (numInterface != numDefault) {
+ onError(
+ interfaceConstructor,
+ ResolverErrorCode.DEFAULT_CONSTRUCTOR_OPTIONAL_POSITIONAL_PARAMETERS,
+ Elements.getRawMethodName(interfaceConstructor),
+ interfaceClassName,
+ numInterface,
+ Elements.getRawMethodName(defaultConstructor),
+ defaultClassName,
+ numDefault);
+ }
+ }
// Validate names of named parameters.
{
List<String> interfaceNames = Elements.getNamedParameters(interfaceConstructor);
@@ -2220,14 +2241,7 @@ public class Resolver {
if (superCall != null) {
// Do positional parameters match?
- List<VariableElement> superParameters = superCall.getParameters();
- // Count the number of positional parameters required by super call
- int superPositionalCount = 0;
- for (; superPositionalCount < superParameters.size(); superPositionalCount++) {
- if (superParameters.get(superPositionalCount).isNamed()) {
- break;
- }
- }
+ int superPositionalCount = Elements.getNumberOfRequiredParameters(superCall);
if (superPositionalCount > 0) {
onError(node, ResolverErrorCode.TOO_FEW_ARGUMENTS_IN_IMPLICIT_SUPER,
superCall.getType().toString());

Powered by Google App Engine
This is Rietveld 408576698