KT-1141 No check that object in 'object expression' implements all abstract members of supertype

This commit is contained in:
svtk
2012-01-26 15:22:16 +04:00
parent 9b2e4c7d16
commit fc8bc52ea2
5 changed files with 39 additions and 2 deletions
@@ -401,10 +401,14 @@ public interface Errors {
ParameterizedDiagnosticFactory2<PropertyDescriptor, PropertyDescriptor> VAR_OVERRIDDEN_BY_VAL = new ParameterizedDiagnosticFactory2<PropertyDescriptor, PropertyDescriptor>(ERROR, "Var-property {0} cannot be overridden by val-property {1}", DescriptorRenderer.TEXT);
ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor> ABSTRACT_MEMBER_NOT_IMPLEMENTED = new ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor>(ERROR, "Class ''{0}'' must be declared abstract or implement abstract member {1}") {
ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor> ABSTRACT_MEMBER_NOT_IMPLEMENTED = new ParameterizedDiagnosticFactory2<JetClassOrObject, CallableMemberDescriptor>(ERROR, "{0} must be declared abstract or implement abstract member {1}") {
@Override
protected String makeMessageForA(@NotNull JetClassOrObject jetClassOrObject) {
return JetPsiUtil.safeName(jetClassOrObject.getName());
String name = jetClassOrObject.getName() != null ? " '" + jetClassOrObject.getName() + "'" : "";
if (jetClassOrObject instanceof JetClass) {
return "Class" + name;
}
return "Object" + name;
}
@Override
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.JetNodeTypes;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collections;
import java.util.List;
@@ -96,4 +97,9 @@ public class JetObjectDeclaration extends JetNamedDeclaration implements JetClas
public boolean isObjectLiteral() {
return getNameAsDeclaration() == null;
}
@NotNull
public PsiElement getObjectKeyword() {
return findChildByType(JetTokens.OBJECT_KEYWORD);
}
}
@@ -121,6 +121,9 @@ public class OverrideResolver {
}
else if (klass instanceof JetObjectDeclaration) {
nameIdentifier = ((JetObjectDeclaration) klass).getNameIdentifier();
if (nameIdentifier == null) {
nameIdentifier = ((JetObjectDeclaration) klass).getObjectKeyword();
}
}
if (nameIdentifier == null) return;
@@ -8,6 +8,8 @@ fun box() : String {
val l2 = o2?.length ?: 0
return l1 - l2
}
override fun equals(obj: Any?): Boolean = obj === this
}
w.compare("aaa", "bbb")
@@ -0,0 +1,22 @@
//KT-1141 No check that object in 'object expression' implements all abstract members of supertype
//+JDK
package kt1141
public trait SomeTrait {
fun foo()
}
fun foo() {
val x = <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object<!> : SomeTrait {
}
x.foo()
}
object <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>Rr<!> : SomeTrait {}
class <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>C<!> : SomeTrait {}
fun foo2() {
val <!UNUSED_VARIABLE!>r<!> = <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object<!> : Runnable {} //no error
}