KT-13355
An overridden abstract member with a more specific "return type" than an overridden concrete member should be explicitly overridden even if the class in question can have abstract members.
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
interface IFooAny {
|
||||
val foo: Any
|
||||
}
|
||||
|
||||
interface IFooStr : IFooAny {
|
||||
override val foo: String
|
||||
}
|
||||
|
||||
abstract class BaseAny(override val foo: Any): IFooAny
|
||||
|
||||
abstract <!PROPERTY_TYPE_MISMATCH_ON_INHERITANCE!>class BaseStr<!> : BaseAny(42), IFooStr
|
||||
|
||||
class C : BaseStr()
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package
|
||||
|
||||
public abstract class BaseAny : IFooAny {
|
||||
public constructor BaseAny(/*0*/ foo: kotlin.Any)
|
||||
public open override /*1*/ val foo: kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public abstract class BaseStr : BaseAny, IFooStr {
|
||||
public constructor BaseStr()
|
||||
public open override /*2*/ /*fake_override*/ val foo: kotlin.String
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class C : BaseStr {
|
||||
public constructor C()
|
||||
public open override /*1*/ /*fake_override*/ val foo: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface IFooAny {
|
||||
public abstract val foo: kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface IFooStr : IFooAny {
|
||||
public abstract override /*1*/ val foo: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
// FILE: K.kt
|
||||
abstract class ATest1 : TestNN.JNullVsNotNull()
|
||||
|
||||
abstract <!RETURN_TYPE_MISMATCH_ON_INHERITANCE!>class ATest2<!> : TestNN.JUnknownImpl(), TestNN.JNotNull
|
||||
|
||||
abstract class ATest3 : TestNN.JUnknownVsNotNull()
|
||||
|
||||
class CTest1 : TestNN.JNullVsNotNull()
|
||||
|
||||
<!RETURN_TYPE_MISMATCH_ON_INHERITANCE!>class CTest2<!> : TestNN.JUnknownImpl(), TestNN.JNotNull
|
||||
|
||||
class CTest3 : TestNN.JUnknownVsNotNull()
|
||||
|
||||
// FILE: TestNN.java
|
||||
import org.jetbrains.annotations.*;
|
||||
|
||||
public class TestNN {
|
||||
public interface JNull {
|
||||
@Nullable Object foo();
|
||||
}
|
||||
|
||||
public interface JNotNull {
|
||||
@NotNull Object foo();
|
||||
}
|
||||
|
||||
public static class JNullVsNotNull implements JNull, JNotNull {
|
||||
public Object foo() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public static class JNullBase {
|
||||
@Nullable public Object foo() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static class JUnknownImpl extends JNullBase {
|
||||
public Object foo() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public static class JUnknownVsNotNull extends JUnknownImpl implements JNotNull {
|
||||
}
|
||||
}
|
||||
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
package
|
||||
|
||||
public abstract class ATest1 : TestNN.JNullVsNotNull {
|
||||
public constructor ATest1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public abstract class ATest2 : TestNN.JUnknownImpl, TestNN.JNotNull {
|
||||
public constructor ATest2()
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public abstract class ATest3 : TestNN.JUnknownVsNotNull {
|
||||
public constructor ATest3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class CTest1 : TestNN.JNullVsNotNull {
|
||||
public constructor CTest1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class CTest2 : TestNN.JUnknownImpl, TestNN.JNotNull {
|
||||
public constructor CTest2()
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class CTest3 : TestNN.JUnknownVsNotNull {
|
||||
public constructor CTest3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class TestNN {
|
||||
public constructor TestNN()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public interface JNotNull {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public abstract fun foo(): kotlin.Any
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface JNull {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.Nullable public abstract fun foo(): kotlin.Any?
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class JNullBase {
|
||||
public constructor JNullBase()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.Nullable public open fun foo(): kotlin.Any?
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class JNullVsNotNull : TestNN.JNull, TestNN.JNotNull {
|
||||
public constructor JNullVsNotNull()
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*2*/ fun foo(): kotlin.Any
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class JUnknownImpl : TestNN.JNullBase {
|
||||
public constructor JUnknownImpl()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ fun foo(): kotlin.Any?
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class JUnknownVsNotNull : TestNN.JUnknownImpl, TestNN.JNotNull {
|
||||
public constructor JUnknownVsNotNull()
|
||||
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
@org.jetbrains.annotations.NotNull public open override /*2*/ /*fake_override*/ fun foo(): kotlin.Any
|
||||
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
// Static members
|
||||
public final /*synthesized*/ fun JNotNull(/*0*/ function: () -> kotlin.Any): TestNN.JNotNull
|
||||
public final /*synthesized*/ fun JNull(/*0*/ function: () -> kotlin.Any?): TestNN.JNull
|
||||
}
|
||||
+2
-2
@@ -6,6 +6,6 @@ open class B {
|
||||
open fun f(): CharSequence = "charSequence"
|
||||
}
|
||||
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C<!> : B(), A
|
||||
<!RETURN_TYPE_MISMATCH_ON_INHERITANCE!>class C<!> : B(), A
|
||||
|
||||
val d: A = <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object<!> : B(), A {}
|
||||
val d: A = <!RETURN_TYPE_MISMATCH_ON_INHERITANCE!>object<!> : B(), A {}
|
||||
|
||||
Reference in New Issue
Block a user