Refine modality of fake overrides inherited from abstract expected members
In an open expected class inheriting an expected interface, abstract members are now inherited as _open_ fake overrides, not final. Final was technically safer but also stricter and thus could be unexpected by the user. In a final class, abstract members are still inherited as _final_ fake overrides. So, the general rule is now the following: the modality of an expected fake override, which overrides only abstract members, in a non-abstract class is equal to the modality of that class #KT-22031 Fixed
This commit is contained in:
+2
-2
@@ -17,14 +17,14 @@ public interface Foo {
|
||||
|
||||
public final expect class ImplicitFoo : Foo {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final expect class ImplicitFooCheck : Foo {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public final override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
+9
-2
@@ -9,7 +9,7 @@ expect open class BaseAImpl() : BaseA
|
||||
|
||||
class DerivedA1 : BaseAImpl()
|
||||
class DerivedA2 : BaseAImpl() {
|
||||
<!OVERRIDING_FINAL_MEMBER!>override<!> fun foo() = super.foo()
|
||||
override fun foo() = super.foo()
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ expect open class BaseBImpl() : BaseB
|
||||
|
||||
class DerivedB1 : BaseBImpl()
|
||||
class DerivedB2 : BaseBImpl() {
|
||||
<!OVERRIDING_FINAL_MEMBER!>override<!> fun foo() = super.foo()
|
||||
override fun foo() = super.foo()
|
||||
}
|
||||
|
||||
|
||||
@@ -53,3 +53,10 @@ expect interface BaseE {
|
||||
sealed class BaseEImpl() : BaseE {
|
||||
fun bar() = super.<!ABSTRACT_SUPER_CALL!>foo<!>()
|
||||
}
|
||||
|
||||
|
||||
|
||||
expect interface BaseF {
|
||||
fun foo()
|
||||
}
|
||||
expect class BaseFImpl() : BaseF
|
||||
|
||||
+19
-4
@@ -11,7 +11,7 @@ public abstract expect class BaseA {
|
||||
public open expect class BaseAImpl : BaseA {
|
||||
public constructor BaseAImpl()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public expect interface BaseB {
|
||||
public open expect class BaseBImpl : BaseB {
|
||||
public constructor BaseBImpl()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -78,10 +78,25 @@ public sealed class BaseEImpl : BaseE {
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public expect interface BaseF {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract expect fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final expect class BaseFImpl : BaseF {
|
||||
public constructor BaseFImpl()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class DerivedA1 : BaseAImpl {
|
||||
public constructor DerivedA1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
@@ -97,7 +112,7 @@ public final class DerivedA2 : BaseAImpl {
|
||||
public final class DerivedB1 : BaseBImpl {
|
||||
public constructor DerivedB1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open expect override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user