[FE] Stop ignoring ABSTRACT_MEMBER_NOT_IMPLEMENTED for expect classes

^KT-59739 Fixed
Review: https://jetbrains.team/p/kt/reviews/11038/timeline
This commit is contained in:
Nikita Bobko
2023-07-10 11:23:25 +02:00
committed by Space Team
parent bfcb90c716
commit 4f3ecedbca
25 changed files with 161 additions and 42 deletions
@@ -0,0 +1,22 @@
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
interface B {
override fun toString(): String
}
expect value <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C<!>(val s: String) : B
expect value <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class D<!>(val s: String) : B
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
@JvmInline
actual value class C(actual val s: String) : B {
override fun toString(): String = s
}
@JvmInline
actual value class D(actual val s: String) : B
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// WITH_STDLIB
// MODULE: m1-common
// FILE: common.kt
@@ -0,0 +1,17 @@
// MODULE: m1-common
// FILE: common.kt
interface Base {
fun foo()
}
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object Implementation<!> : Base
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
abstract class RealImplementation : Base {
override fun foo() {}
}
actual object Implementation : RealImplementation(), Base
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
@@ -6,7 +5,7 @@ interface Base {
fun foo()
}
expect object Implementation : Base
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED, ABSTRACT_MEMBER_NOT_IMPLEMENTED{JVM}!>object Implementation<!> : Base
// MODULE: m1-jvm()()(m1-common)
// FILE: jvm.kt
@@ -0,0 +1,27 @@
// MODULE: m1-common
// FILE: common.kt
interface Foo {
fun foo()
}
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class ImplicitFoo<!> : Foo
expect class ExplicitFoo : Foo {
override fun foo()
}
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class ImplicitFooCheck<!> : Foo
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
actual class ImplicitFoo : Foo {
override fun foo() {}
}
actual class ExplicitFoo : Foo {
actual override fun foo() {}
}
actual <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class ImplicitFooCheck<!> : Foo
@@ -1,4 +1,3 @@
// FIR_IDENTICAL
// MODULE: m1-common
// FILE: common.kt
@@ -6,13 +5,13 @@ interface Foo {
fun foo()
}
expect class ImplicitFoo : Foo
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED, ABSTRACT_MEMBER_NOT_IMPLEMENTED{JVM}!>class ImplicitFoo<!> : Foo
expect class ExplicitFoo : Foo {
override fun foo()
}
expect class ImplicitFooCheck : Foo
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED, ABSTRACT_MEMBER_NOT_IMPLEMENTED{JVM}!>class ImplicitFooCheck<!> : Foo
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
@@ -4,9 +4,9 @@
<!NO_ACTUAL_FOR_EXPECT!>expect abstract class BaseA() {
abstract fun foo()
}<!>
<!NO_ACTUAL_FOR_EXPECT!>expect open class BaseAImpl() : BaseA<!>
<!NO_ACTUAL_FOR_EXPECT!>expect open <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class BaseAImpl<!>() : BaseA<!>
class DerivedA1 : BaseAImpl()
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class DerivedA1<!> : BaseAImpl()
class DerivedA2 : BaseAImpl() {
override fun foo() = super.<!ABSTRACT_SUPER_CALL!>foo<!>()
}
@@ -16,9 +16,9 @@ class DerivedA2 : BaseAImpl() {
<!NO_ACTUAL_FOR_EXPECT!>expect interface BaseB {
fun foo()
}<!>
<!NO_ACTUAL_FOR_EXPECT!>expect open class BaseBImpl() : BaseB<!>
<!NO_ACTUAL_FOR_EXPECT!>expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class BaseBImpl<!>() : BaseB<!>
class DerivedB1 : BaseBImpl()
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class DerivedB1<!> : BaseBImpl()
class DerivedB2 : BaseBImpl() {
override fun foo() = super.<!ABSTRACT_SUPER_CALL!>foo<!>()
}
@@ -30,7 +30,7 @@ class DerivedB2 : BaseBImpl() {
}<!>
<!NO_ACTUAL_FOR_EXPECT!>expect abstract class BaseCImpl() : BaseC<!>
class DerivedC1 : BaseCImpl()
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class DerivedC1<!> : BaseCImpl()
class DerivedC2 : BaseCImpl() {
override fun foo() = super.<!ABSTRACT_SUPER_CALL!>foo<!>()
}
@@ -58,4 +58,14 @@ sealed class BaseEImpl() : BaseE {
<!NO_ACTUAL_FOR_EXPECT!>expect interface BaseF {
fun foo()
}<!>
<!NO_ACTUAL_FOR_EXPECT!>expect class BaseFImpl() : BaseF<!>
<!NO_ACTUAL_FOR_EXPECT!>expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class BaseFImpl<!>() : BaseF<!>
<!NO_ACTUAL_FOR_EXPECT!>expect abstract class BaseG() {
abstract fun foo()
}<!>
<!NO_ACTUAL_FOR_EXPECT!>expect open class BaseGImpl() : BaseG {
override fun foo()
}<!>
class DerivedG1 : BaseGImpl()
@@ -4,9 +4,9 @@
expect abstract class BaseA() {
abstract fun foo()
}
expect open class BaseAImpl() : BaseA
expect open <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class BaseAImpl<!>() : BaseA
class DerivedA1 : BaseAImpl()
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class DerivedA1<!> : BaseAImpl()
class DerivedA2 : BaseAImpl() {
override fun foo() = super.foo()
}
@@ -16,7 +16,7 @@ class DerivedA2 : BaseAImpl() {
expect interface BaseB {
fun foo()
}
expect open class BaseBImpl() : BaseB
expect open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class BaseBImpl<!>() : BaseB
class DerivedB1 : BaseBImpl()
class DerivedB2 : BaseBImpl() {
@@ -58,4 +58,14 @@ sealed class BaseEImpl() : BaseE {
expect interface BaseF {
fun foo()
}
expect class BaseFImpl() : BaseF
expect <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class BaseFImpl<!>() : BaseF
expect abstract class BaseG() {
abstract fun foo()
}
expect open class BaseGImpl() : BaseG {
override fun foo()
}
class DerivedG1 : BaseGImpl()
@@ -93,6 +93,22 @@ public final expect class BaseFImpl : BaseF {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract expect class BaseG {
public constructor BaseG()
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 open expect class BaseGImpl : BaseG {
public constructor BaseGImpl()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open expect override /*1*/ 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
@@ -141,3 +157,11 @@ public final class DerivedC2 : BaseCImpl {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class DerivedG1 : BaseGImpl {
public constructor DerivedG1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
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
}
@@ -5,7 +5,7 @@ expect abstract class Base {
abstract fun foo()
}
expect class DerivedImplicit : Base
expect <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class DerivedImplicit<!> : Base
expect class DerivedExplicit : Base {
override fun foo()
@@ -5,7 +5,7 @@ expect abstract class Base {
abstract fun foo()
}
expect class DerivedImplicit : Base
expect <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED, ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED{JVM}!>class DerivedImplicit<!> : Base
expect class DerivedExplicit : Base {
override fun foo()
@@ -19,6 +19,7 @@ expect class FastArrayList<E> : MutableListEx<E>, RandomAccess {
constructor(elements: Collection<E>)
fun trimToSize()
override fun removeRange(fromIndex: Int, toIndex: Int)
fun ensureCapacity(minCapacity: Int)
override val size: Int
override fun isEmpty(): Boolean
@@ -66,7 +67,7 @@ public actual open class FastArrayList<E> internal constructor(
actual override fun addAll(index: Int, elements: Collection<E>): Boolean = true
actual override fun remove(element: E): Boolean = true
@Suppress("UNCHECKED_CAST") actual override fun removeAt(index: Int): E = array[0] as E
override fun removeRange(fromIndex: Int, toIndex: Int) {}
actual override fun removeRange(fromIndex: Int, toIndex: Int) {}
override fun setAll(index: Int, elements: FastArrayList<E>, offset: Int, size: Int) {}
override fun addAll(elements: FastArrayList<E>, offset: Int, size: Int) {}
actual override fun clear() {}