[FIR] Add FINAL_UPPER_BOUND checker
This commit is contained in:
+5
-5
@@ -38,15 +38,15 @@ fun test(z: Int, c: Char) {}
|
||||
|
||||
typealias BA = A
|
||||
|
||||
fun <T> kek(t: T) where T : (String) -> Any?, T : Char {}
|
||||
fun <T> kek(t: T) where T : () -> Boolean, T : String {}
|
||||
fun <T : Int> kek(t: T) {}
|
||||
fun <T> kek(t: T) where T : (String) -> Any?, T : <!FINAL_UPPER_BOUND!>Char<!> {}
|
||||
fun <T> kek(t: T) where T : () -> Boolean, T : <!FINAL_UPPER_BOUND!>String<!> {}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>Int<!>> kek(t: T) {}
|
||||
|
||||
fun lol(a: Array<Int>) {}
|
||||
fun lol(a: Array<Boolean>) {}
|
||||
|
||||
<!CONFLICTING_OVERLOADS!>fun <T> mem(t: T)<!> where T : () -> Boolean, T : String {}
|
||||
<!CONFLICTING_OVERLOADS!>fun <T> mem(t: T)<!> where T : String, T : () -> Boolean {}
|
||||
<!CONFLICTING_OVERLOADS!>fun <T> mem(t: T)<!> where T : () -> Boolean, T : <!FINAL_UPPER_BOUND!>String<!> {}
|
||||
<!CONFLICTING_OVERLOADS!>fun <T> mem(t: T)<!> where T : <!FINAL_UPPER_BOUND!>String<!>, T : () -> Boolean {}
|
||||
|
||||
class M {
|
||||
companion <!REDECLARATION!>object<!> {}
|
||||
|
||||
+4
-4
@@ -14,7 +14,7 @@ open class D() : B() {
|
||||
override var test: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>Char<!> = '\n'
|
||||
}
|
||||
|
||||
class E<T : Double>(val value: T) : B() {
|
||||
class E<T : <!FINAL_UPPER_BOUND!>Double<!>>(val value: T) : B() {
|
||||
override var test: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>T<!> = value
|
||||
}
|
||||
|
||||
@@ -22,14 +22,14 @@ open class F<T : Number>(val value: T) {
|
||||
open var rest: T = value
|
||||
}
|
||||
|
||||
class G<E : Double>(val balue: E) : F<E>(balue) {
|
||||
class G<E : <!FINAL_UPPER_BOUND!>Double<!>>(val balue: E) : F<E>(balue) {
|
||||
override var rest: E = balue
|
||||
}
|
||||
|
||||
class H<E : String>(val balue: E) : <!INAPPLICABLE_CANDIDATE!>F<E><!>(balue) {
|
||||
class H<E : <!FINAL_UPPER_BOUND!>String<!>>(val balue: E) : <!INAPPLICABLE_CANDIDATE!>F<E><!>(balue) {
|
||||
override var rest: E = balue // no report because of INAPPLICABLE_CANDIDATE
|
||||
}
|
||||
|
||||
class M<E : String>(val balue: E) : F<Double>(3.14) {
|
||||
class M<E : <!FINAL_UPPER_BOUND!>String<!>>(val balue: E) : F<Double>(3.14) {
|
||||
override var rest: <!VAR_TYPE_MISMATCH_ON_OVERRIDE!>E<!> = balue
|
||||
}
|
||||
|
||||
+4
-4
@@ -15,7 +15,7 @@ open class D() : B() {
|
||||
override fun test(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>Char<!> = '\n'
|
||||
}
|
||||
|
||||
class E<T : Double>(val value: T) : B() {
|
||||
class E<T : <!FINAL_UPPER_BOUND!>Double<!>>(val value: T) : B() {
|
||||
override fun test(): T = value
|
||||
}
|
||||
|
||||
@@ -23,15 +23,15 @@ open class F<T : Number>(val value: T) {
|
||||
open fun rest(): T = value
|
||||
}
|
||||
|
||||
class G<E : Double>(val balue: E) : F<E>(balue) {
|
||||
class G<E : <!FINAL_UPPER_BOUND!>Double<!>>(val balue: E) : F<E>(balue) {
|
||||
override fun rest(): E = balue
|
||||
}
|
||||
|
||||
class H<E : String>(val balue: E) : <!INAPPLICABLE_CANDIDATE!>F<E><!>(balue) {
|
||||
class H<E : <!FINAL_UPPER_BOUND!>String<!>>(val balue: E) : <!INAPPLICABLE_CANDIDATE!>F<E><!>(balue) {
|
||||
override fun rest(): E = balue // no report because of INAPPLICABLE_CANDIDATE
|
||||
}
|
||||
|
||||
class M<E : String>(val balue: E) : F<Double>(3.14) {
|
||||
class M<E : <!FINAL_UPPER_BOUND!>String<!>>(val balue: E) : F<Double>(3.14) {
|
||||
override fun rest(): <!RETURN_TYPE_MISMATCH_ON_OVERRIDE!>E<!> = balue
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user