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

Unified Diff: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java

Issue 8632020: Make method overrides with differing parameters a compile-time error (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Report on function name, not entire function! Created 9 years 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/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);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698