| Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| index cb3b360b243223821d7f7ebe3d35926c89c213fe..9b219e567a598cfe1d70ea6037cfea9d57c59884 100644
|
| --- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| +++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
|
| @@ -741,7 +741,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
| sb);
|
| }
|
| }
|
| - // Finish current class.
|
| + // Finish current class.
|
| setCurrentClass(null);
|
| return type;
|
| }
|
| @@ -1693,23 +1693,26 @@ public class TypeAnalyzer implements DartCompilationPhase {
|
| }
|
|
|
| /**
|
| - * Report a static type error if member cannot override superElement, that is, they are not
|
| - * assignable.
|
| + * Report a static type error if member cannot override superElement, that
|
| + * is, they are not assignable.
|
| */
|
| private void checkOverride(DartExpression node, Element member, Element superElement) {
|
| String name = member.getName();
|
| Type superMember = typeAsMemberOf(superElement, currentClass);
|
| - if (member.getKind() == ElementKind.METHOD
|
| - && superElement.getKind() == ElementKind.METHOD) {
|
| + if (member.getKind() == ElementKind.METHOD && superElement.getKind() == ElementKind.METHOD) {
|
| if (!types.isSubtype(member.getType(), superMember)) {
|
| - typeError(node, TypeErrorCode.CANNOT_OVERRIDE_METHOD_NOT_SUBTYPE,
|
| - name, superElement.getEnclosingElement().getName(),
|
| - member.getType(), superMember);
|
| + MethodElement method = (MethodElement) member;
|
| + MethodElement superMethod = (MethodElement) superElement;
|
| + // Wrong # of parameters is a compile-time error and has already
|
| + // been checked.
|
| + if (method.getParameters().size() == superMethod.getParameters().size()) {
|
| + typeError(node, TypeErrorCode.CANNOT_OVERRIDE_METHOD_NOT_SUBTYPE, name, superElement
|
| + .getEnclosingElement().getName(), member.getType(), superMember);
|
| + }
|
| }
|
| } else if (!types.isAssignable(superMember, member.getType())) {
|
| - typeError(node, TypeErrorCode.CANNOT_OVERRIDE_TYPED_MEMBER,
|
| - name, superElement.getEnclosingElement().getName(),
|
| - member.getType(), superMember);
|
| + typeError(node, TypeErrorCode.CANNOT_OVERRIDE_TYPED_MEMBER, name, superElement
|
| + .getEnclosingElement().getName(), member.getType(), superMember);
|
| }
|
| }
|
| }
|
|
|