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