[FIR] Implement checks for contract not allowed
^KT-55423 Fixed
This commit is contained in:
committed by
Space Team
parent
b2fbf8bed5
commit
f946ddeb40
+9
-9
@@ -6,14 +6,14 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
val value_1 = 1
|
||||
contract { }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
10 - 1
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
@@ -22,7 +22,7 @@ inline fun case_2(block: () -> Unit) {
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
throw Exception()
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.UNKNOWN)
|
||||
}
|
||||
return block()
|
||||
@@ -34,7 +34,7 @@ inline fun case_3(block: () -> Unit) {
|
||||
*/
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
.0009
|
||||
return contract {
|
||||
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
@@ -45,7 +45,7 @@ inline fun case_4(block: () -> Unit) {
|
||||
*/
|
||||
fun case_5(value_1: Int?) {
|
||||
println("!")
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns(true) implies (value_1 != null)
|
||||
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
|
||||
}
|
||||
@@ -56,7 +56,7 @@ fun case_5(value_1: Int?) {
|
||||
*/
|
||||
fun case_6(value_1: Int?) {
|
||||
100 + 10
|
||||
throw Exception(contract {
|
||||
throw Exception(<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns(true) implies (value_1 != null)
|
||||
}.toString())
|
||||
}
|
||||
@@ -69,7 +69,7 @@ fun case_7(value_1: Int?) {
|
||||
for (i in 0..10) {
|
||||
println(i)
|
||||
}
|
||||
return contract {
|
||||
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,7 @@ fun case_7(value_1: Int?) {
|
||||
*/
|
||||
fun case_8(value_1: Int?) {
|
||||
val f = 10 - 20
|
||||
val g = contract {
|
||||
val g = <!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
@@ -91,7 +91,7 @@ fun case_8(value_1: Int?) {
|
||||
*/
|
||||
fun case_9(number: Int?): Boolean {
|
||||
val value_1 = number != null
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns(false) implies (value_1)
|
||||
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
|
||||
return number == null
|
||||
|
||||
+5
-5
@@ -5,17 +5,17 @@ import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
return contract {
|
||||
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() = contract { }
|
||||
fun case_2() = <!CONTRACT_NOT_ALLOWED!>contract<!> { }
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
val value_1 = contract {
|
||||
val value_1 = <!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
block()
|
||||
@@ -39,14 +39,14 @@ inline fun case_5(block: () -> Unit) {
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
inline fun case_6(block: () -> Unit) {
|
||||
throw Exception(contract {
|
||||
throw Exception(<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
inline fun case_7(block: () -> Unit) {
|
||||
funWithAnyArg(contract {
|
||||
funWithAnyArg(<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
})
|
||||
}
|
||||
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !OPT_IN: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
println("!")
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
100 + 10
|
||||
throw Exception(contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?) {
|
||||
for (i in 0..10) {
|
||||
println(i)
|
||||
}
|
||||
return contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Int?) {
|
||||
val f = 10 - 20
|
||||
val g = contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(number: Int?): Boolean {
|
||||
val value_1 = number != null
|
||||
contract {
|
||||
returns(false) implies (value_1)
|
||||
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
|
||||
return number == null
|
||||
}
|
||||
+1
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !OPT_IN: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ fun case_5(): Boolean? {
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Boolean): Boolean? {
|
||||
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(null) implies <!ARGUMENT_TYPE_MISMATCH!>contract { returns(null) implies (!value_1) }<!><!> }
|
||||
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(null) implies <!ARGUMENT_TYPE_MISMATCH!><!CONTRACT_NOT_ALLOWED!>contract<!> { returns(null) implies (!value_1) }<!><!> }
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ class case_2(value_5: Boolean, val value_1: Boolean) {
|
||||
|
||||
init {
|
||||
fun case_2_1(): Boolean {
|
||||
contract { returns(false) implies (value_5) }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(false) implies (value_5)<!> }
|
||||
return !(value_5)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1() {
|
||||
fun <K> K?.case_1_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_1 != null) }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true) implies (this@case_1 != null)<!> }
|
||||
return this@case_1 != null
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) = {
|
||||
contract {
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlace(block, InvocationKind.EXACTLY_ONCE)<!>
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -6,7 +6,7 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val fun_1 = fun(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ fun case_1() {
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val lambda_1 = { block: () -> Unit ->
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
block()
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ class case_4 : ClassLevel3() {
|
||||
|
||||
fun <T>T.case_4_3_wrap() {
|
||||
fun case_4_3_contract() {
|
||||
contract { returns() implies (this@case_4_3_wrap is ClassLevel1) }
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { <!ERROR_IN_CONTRACT_DESCRIPTION!>returns() implies (this@case_4_3_wrap is ClassLevel1)<!> }
|
||||
if (this@case_4_3_wrap !is ClassLevel1) throw Exception()
|
||||
}
|
||||
case_4_3_contract()
|
||||
|
||||
+5
-5
@@ -6,7 +6,7 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
val Boolean.case_1: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns() implies (this@case_1)
|
||||
}
|
||||
return {}
|
||||
@@ -15,7 +15,7 @@ val Boolean.case_1: () -> Unit
|
||||
// TESTCASE NUMBER: 2
|
||||
val (() -> Unit).case_2: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(this@case_2, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return {}
|
||||
@@ -27,7 +27,7 @@ var Boolean.case_3: () -> Unit
|
||||
return {}
|
||||
}
|
||||
set(value) {
|
||||
<!WRONG_INVOCATION_KIND!>contract {
|
||||
<!WRONG_INVOCATION_KIND!><!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(value, InvocationKind.EXACTLY_ONCE)
|
||||
}<!>
|
||||
}
|
||||
@@ -38,7 +38,7 @@ var (() -> Unit).case_4: () -> Unit
|
||||
return {}
|
||||
}
|
||||
set(value) {
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(this@case_4, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ var (() -> Unit).case_4: () -> Unit
|
||||
// TESTCASE NUMBER: 5
|
||||
val Boolean.case_5: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
returns() implies (this@case_5)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user