FIR: introduce not implemented checker
This commit is contained in:
+2
-2
@@ -23,8 +23,8 @@ abstract class D {
|
||||
abstract val d: @An Int
|
||||
}
|
||||
|
||||
class E : D(), A
|
||||
class F : A
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class E<!> : D(), A
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class F<!> : A
|
||||
|
||||
@An
|
||||
interface G {
|
||||
|
||||
@@ -12,9 +12,9 @@ fun foo() {
|
||||
x.foo()
|
||||
}
|
||||
|
||||
object Rr : SomeTrait {}
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>object Rr<!> : SomeTrait {}
|
||||
|
||||
class C : SomeTrait {}
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C<!> : SomeTrait {}
|
||||
|
||||
fun foo2() {
|
||||
val r = object : Runnable {} //no error
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
//KT-559 Forbid abstract method call through super
|
||||
|
||||
package kt559
|
||||
|
||||
abstract class A {
|
||||
abstract val i : Int
|
||||
|
||||
abstract fun foo() : Int
|
||||
|
||||
fun fff() {}
|
||||
}
|
||||
|
||||
abstract class D(): A() {
|
||||
override val i : Int = 34
|
||||
}
|
||||
|
||||
class C() : D() {
|
||||
fun test() {
|
||||
super.i
|
||||
}
|
||||
}
|
||||
|
||||
class B() : A() {
|
||||
override fun foo(): Int {
|
||||
super.<!ABSTRACT_SUPER_CALL!>i<!>
|
||||
|
||||
super.fff() //everything is ok
|
||||
return super.<!ABSTRACT_SUPER_CALL!>foo<!>()
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
//KT-559 Forbid abstract method call through super
|
||||
|
||||
package kt559
|
||||
|
||||
+2
-2
@@ -5,11 +5,11 @@ interface T {
|
||||
val v : Int
|
||||
}
|
||||
|
||||
open class Br(t : T) : T {
|
||||
open <!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Br<!>(t : T) : T {
|
||||
|
||||
}
|
||||
|
||||
class Br3(t : T) : Br(t) {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class Br3<!>(t : T) : Br(t) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -108,7 +108,7 @@ public class A extends AImpl implements List<String> {
|
||||
}
|
||||
|
||||
// FILE: X.kt
|
||||
class X : A()
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class X<!> : A()
|
||||
|
||||
fun main() {
|
||||
val x = X()
|
||||
|
||||
Vendored
+1
-1
@@ -95,7 +95,7 @@ public class A extends AImpl implements List<String> {
|
||||
}
|
||||
|
||||
// FILE: X.kt
|
||||
class X : A()
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class X<!> : A()
|
||||
|
||||
fun main() {
|
||||
val x = X()
|
||||
|
||||
@@ -11,7 +11,7 @@ public abstract class B implements A {
|
||||
|
||||
// FILE: C.kt
|
||||
|
||||
class C : B()
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C<!> : B()
|
||||
|
||||
fun main() {
|
||||
C().a
|
||||
|
||||
@@ -24,7 +24,7 @@ abstract class C {
|
||||
}
|
||||
}
|
||||
|
||||
object D : C() {
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>object D<!> : C() {
|
||||
<!INCOMPATIBLE_MODIFIERS!>override<!> <!INCOMPATIBLE_MODIFIERS!>const<!> val x: Int = 9
|
||||
|
||||
const val inObject = 10
|
||||
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
interface Foo {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
expect class ImplicitFoo : Foo
|
||||
|
||||
expect class ExplicitFoo : Foo {
|
||||
override fun foo()
|
||||
}
|
||||
|
||||
expect 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 class ImplicitFooCheck : Foo
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +MultiPlatformProjects
|
||||
// MODULE: m1-common
|
||||
// FILE: common.kt
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
abstract class A {
|
||||
abstract fun foo(): Int
|
||||
}
|
||||
|
||||
class B() : A() {
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
abstract class A {
|
||||
abstract fun foo(): Int
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
abstract class A {
|
||||
abstract val i: Int
|
||||
}
|
||||
|
||||
class B() : A() {
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
abstract class A {
|
||||
abstract val i: Int
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
abstract class A {
|
||||
abstract var i: Int
|
||||
}
|
||||
|
||||
class B() : A() {
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
abstract class A {
|
||||
abstract var i: Int
|
||||
}
|
||||
|
||||
@@ -21,21 +21,21 @@ open class MyClass() : MyTrait, MyAbstractClass() {
|
||||
|
||||
class MyChildClass() : MyClass() {}
|
||||
|
||||
class MyIllegalClass : MyTrait, MyAbstractClass() {}
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass<!> : MyTrait, MyAbstractClass() {}
|
||||
|
||||
class MyIllegalClass2() : MyTrait, MyAbstractClass() {
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass2<!>() : MyTrait, MyAbstractClass() {
|
||||
override fun foo() {}
|
||||
override val pr : Unit = Unit
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
|
||||
class MyIllegalClass3() : MyTrait, MyAbstractClass() {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass3<!>() : MyTrait, MyAbstractClass() {
|
||||
override fun bar() {}
|
||||
override val pr : Unit = Unit
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
|
||||
class MyIllegalClass4() : MyTrait, MyAbstractClass() {
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass4<!>() : MyTrait, MyAbstractClass() {
|
||||
fun foo() {}
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val pr : Unit<!>
|
||||
override fun other() {}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
abstract class A {
|
||||
abstract override fun toString(): String
|
||||
}
|
||||
|
||||
interface B
|
||||
|
||||
abstract class C : A(), B
|
||||
|
||||
class Test : C()
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
abstract class A {
|
||||
abstract override fun toString(): String
|
||||
}
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
interface A {
|
||||
fun test() {
|
||||
}
|
||||
}
|
||||
|
||||
interface B : A {
|
||||
override fun test()
|
||||
}
|
||||
|
||||
interface C : A
|
||||
|
||||
interface D : C, B
|
||||
|
||||
class K : D
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface A {
|
||||
fun test() {
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
interface Runnable {
|
||||
fun run()
|
||||
}
|
||||
|
||||
class C {
|
||||
fun f() {
|
||||
class MyRunnable(): Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
interface Runnable {
|
||||
fun run()
|
||||
}
|
||||
|
||||
@@ -6,6 +6,6 @@ open class Q {
|
||||
val x: Int = 42
|
||||
}
|
||||
|
||||
class R : P, Q()
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class R<!> : P, Q()
|
||||
|
||||
val s: Q = object : Q(), P {}
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ abstract class A2 {
|
||||
abstract fun foo()
|
||||
}
|
||||
|
||||
class B2 : A2()
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class B2<!> : A2()
|
||||
class C2 : B2() {
|
||||
override fun foo() {}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ class E : D(), B {
|
||||
override fun bar(x: CharSequence?, y: List<*>?): String = ""
|
||||
}
|
||||
|
||||
class E2 : B {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class E2<!> : B {
|
||||
override fun foo(x: Any, y: List<String?>): String = ""
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,6 @@ class E1 : C.D(), B {
|
||||
override fun foo(x: Any, y: Fun<Any?>) {}
|
||||
}
|
||||
|
||||
class E2 : B {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class E2<!> : B {
|
||||
override fun foo(x: Any, y: Fun<String?>) {}
|
||||
}
|
||||
|
||||
+4
-4
@@ -14,20 +14,20 @@ public interface B {
|
||||
|
||||
// FILE: C.kt
|
||||
|
||||
class C1 : A, B {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C1<!> : A, B {
|
||||
override fun foo(x: String) {}
|
||||
}
|
||||
|
||||
class C2 : A, B {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C2<!> : A, B {
|
||||
override fun foo(x: String?) {}
|
||||
}
|
||||
|
||||
interface I : A, B
|
||||
|
||||
class C3 : I {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C3<!> : I {
|
||||
override fun foo(x: String) {}
|
||||
}
|
||||
|
||||
class C4 : I {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class C4<!> : I {
|
||||
override fun foo(x: String?) {}
|
||||
}
|
||||
@@ -57,7 +57,7 @@ interface I {
|
||||
fun foo2()
|
||||
}
|
||||
|
||||
class X : I {
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class X<!> : I {
|
||||
override fun foo1() {
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -10,5 +10,5 @@ class BasicRecord(val x: String)
|
||||
data class BasicDataRecord(val x: String)
|
||||
|
||||
@JvmRecord
|
||||
class BasicRecordWithSuperClass(val x: String) : Record()
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class BasicRecordWithSuperClass<!>(val x: String) : Record()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user