[FIR] Add 3 type mismatch diagnostics

This commit is contained in:
Nick
2020-08-12 14:45:57 +03:00
parent c8f8908a01
commit 61e21dadec
27 changed files with 736 additions and 114 deletions
@@ -13,14 +13,14 @@ interface A<H> {
abstract class B<H>() : A<H> {
override fun foo() {
}
override fun foo2() : Unit {
override fun foo2() : <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Unit<!> {
}
override val a : Double = 1.toDouble()
override val a : <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>Double<!> = 1.toDouble()
override val a1 = 1.toDouble()
abstract override fun <X> g() : Int
abstract override fun <X> g1() : List<X>
abstract override fun <X> g() : <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Int<!>
abstract override fun <X> g1() : <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>List<X><!>
abstract override val g : Iterator<Int>
abstract override val g : <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>Iterator<Int><!>
}
@@ -1,9 +0,0 @@
abstract class A {
abstract var x: Int;
abstract fun foo() : Int;
}
abstract class C : A() {
override abstract var x: String =<!SYNTAX!><!> <!SYNTAX!>?<!>
override abstract fun foo(): String =<!SYNTAX!><!> <!SYNTAX!>?<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
abstract class A {
abstract var x: Int;
abstract fun foo() : Int;
@@ -15,12 +15,12 @@ interface A {
@An
interface B : A {
override val p1: Int
override val p1: <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>Int<!>
@An
override val p2: @An String
override fun test(arg: String): Int
override fun test(arg: String): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Int<!>
}
interface C : A {
override var p2: Int
override var p2: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>Int<!>
}
@@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull;
annotation class An
class B : A {
override fun foo(): String? = null
override fun foo(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = null
}
@An
@@ -38,5 +38,5 @@ public interface C {
}
class D : C {
override fun foo(): String? = null
override fun foo(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>String?<!> = null
}
@@ -21,5 +21,5 @@ data class FooImplAll(val num: Int) : Foo {
data class WrongSignatures(val num: Int) : Foo {
override fun equals(other: WrongSignatures) = false
override fun hashCode(): Boolean = true
override fun hashCode(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Boolean<!> = true
}
@@ -15,7 +15,7 @@ fun foo() {
}
class Delegate {
operator fun getValue(t: Any?, p: KProperty<*>): String {
operator fun getValue(t: Any?, p: KProperty<*>): <!PROPERTY_TYPE_MISMATCH_ON_OVERRIDE!>String<!> {
return ""
}
}
@@ -13,5 +13,5 @@ object AImpl : IA {
open class C : IA by AImpl, IB
class D : C() {
override fun foo(): Double = 3.14
override fun foo(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Double<!> = 3.14
}
@@ -11,7 +11,16 @@ import java.util.*;
abstract class B : MutableList<Int>, AbstractList<Int>() {
override fun removeAt(index: Int): Int = null!!
override fun remove(element: Int): Boolean = null!!
override fun remove(element: Int): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Boolean<!> = null!!
}
abstract class D : AbstractList<Int>() {
// removeAt() doesn't exist in java/util/AbstractList, it's a
// fake override of the method from kotlin/collections/MutableList
override fun removeAt(index: Int): Int = null!!
// AbstractList::remove() should return Int here. No fake overrides created.
// This may be a bug because the old compiler doesn't report a diagnostic here.
override fun remove(element: Int): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Boolean<!> = null!!
}
fun main(a: A, b: B, c: ArrayList<Int>) {
@@ -1,49 +0,0 @@
package test
interface X {
fun foo(): String? {
return null
}
}
interface Y {
fun foo(): String {
return "foo"
}
}
interface Incompatible {
fun foo(): Int {
return 3
}
}
class Test1(val x: X) : X by x, Y {
override fun foo(): String? {
return null
}
}
class Test2(val x: X) : X by x, Y {
override fun foo(): String {
return "foo"
}
}
class Test3(val y: Y) : X, Y by y {
override fun foo(): String? {
return null
}
}
class Test4(val y: Y) : X, Y by y {
override fun foo(): String {
return "foo"
}
}
class Test5(val y: Y, val x: X) : X by x, Y by y, Incompatible {
override fun foo(): Int {
return 3
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
package test
interface X {
@@ -3,7 +3,7 @@ interface A {
}
interface B : A {
override fun test(): Unit = "B"
override fun test(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Unit<!> = "B"
}
open class C : A
@@ -1,35 +0,0 @@
// FILE: A.java
import org.jetbrains.annotations.*;
public interface A {
@Nullable
String foo();
}
// FILE: B.java
import org.jetbrains.annotations.*;
public interface B {
@NotNull
String foo();
}
// FILE: C.kt
class C1 : A, B {
override fun foo(): String? = ""
}
class C2 : A, B {
override fun foo(): String = ""
}
interface I : A, B
class C3 : I {
override fun foo(): String? = ""
}
class C4 : I {
override fun foo(): String = ""
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: A.java
import org.jetbrains.annotations.*;