[FIR] Add FINAL_UPPER_BOUND checker

This commit is contained in:
Andrey Zinovyev
2021-04-05 14:51:44 +03:00
committed by GitHub
parent d0513c9ece
commit 67505a0071
36 changed files with 232 additions and 180 deletions
@@ -3,7 +3,7 @@
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun <T : Boolean>T.case_1(): Boolean? {
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T.case_1(): Boolean? {
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(null) implies (!this@case_1)<!> }
return if (!this) null else true
}
@@ -9,7 +9,7 @@ fun Boolean?.case_1(): Boolean {
}
// TESTCASE NUMBER: 2
fun <T : Boolean>T?.case_2(): Boolean {
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T?.case_2(): Boolean {
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true) implies (this@case_2 != null && this@case_2 !is Nothing && this@case_2)<!> }
return this != null && this !is Nothing && this
}
@@ -10,7 +10,7 @@ fun <T : Number?> T.case_1() {
}
// TESTCASE NUMBER: 2
fun <T : Number, K : String> T?.case_2(value_1: K?) {
fun <T : Number, K : <!FINAL_UPPER_BOUND!>String<!>> T?.case_2(value_1: K?) {
contract { returns() implies (this@case_2 is T && value_1 is K) }
if (!(this@case_2 is T && value_1 is K)) throw Exception()
}
@@ -36,7 +36,7 @@ class case_4 : ClassLevel3() {
return this == null
}
fun <T : Boolean>T.case_4_2() {
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T.case_4_2() {
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns() implies (!this@case_4_2)<!> }
if (this) throw Exception()
}