Add spec tests for contracts
This commit is contained in:
+44
@@ -0,0 +1,44 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Contract isn't first statement.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
val value_1 = 1
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
10 - 1
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
throw Exception()
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(block, InvocationKind.UNKNOWN)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
// это в негативные,
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
.0009
|
||||
return contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 10
|
||||
DESCRIPTION: Contract with label after 'contract' keyword.
|
||||
ISSUES: KT-26153
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract <!ERROR_IN_CONTRACT_DESCRIPTION!>test@ {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}<!>
|
||||
return block()
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 11
|
||||
DESCRIPTION: Functions with contracts and external contract builder.
|
||||
ISSUES: KT-26186
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
internal inline fun contractBuilder(block: () -> Unit): ContractBuilder.() -> Unit = {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
internal inline fun case_1(block: () -> Unit) {
|
||||
contract(<!ERROR_IN_CONTRACT_DESCRIPTION!>contractBuilder(block)<!>)
|
||||
return block()
|
||||
}
|
||||
|
||||
internal inline fun case_2(block: () -> Unit) {
|
||||
contract(builder = <!ERROR_IN_CONTRACT_DESCRIPTION!>contractBuilder(block)<!>)
|
||||
return block()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun contractBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.ContractBuilder.() -> kotlin.Unit
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 12
|
||||
DESCRIPTION: Functions with contracts and external effect builder.
|
||||
ISSUES: KT-26186
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
internal inline fun ContractBuilder.callsInPlaceEffectBuilder(block: () -> Unit) =
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
|
||||
internal fun ContractBuilder.returnsEffectBuilder(value_1: Int?) =
|
||||
returns(true) implies (value_1 != null)
|
||||
|
||||
internal inline fun case_1(block: () -> Unit) {
|
||||
contract(builder = { <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
|
||||
return block()
|
||||
}
|
||||
|
||||
internal inline fun case_2(block: () -> Unit) {
|
||||
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> }
|
||||
return block()
|
||||
}
|
||||
|
||||
internal inline fun case_3(value_1: Int?, block: () -> Unit) {
|
||||
contract({ <!ERROR_IN_CONTRACT_DESCRIPTION!>returnsEffectBuilder(value_1)<!>; <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
|
||||
return block()
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package
|
||||
|
||||
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun case_3(/*0*/ value_1: kotlin.Int?, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun kotlin.contracts.ContractBuilder.callsInPlaceEffectBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.CallsInPlace
|
||||
internal fun kotlin.contracts.ContractBuilder.returnsEffectBuilder(/*0*/ value_1: kotlin.Int?): kotlin.contracts.ConditionalEffect
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 2
|
||||
DESCRIPTION: contracts with not allowed simple conditions in implies
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(value_1: Boolean): Boolean {
|
||||
contract { returns(true) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 == true<!>) }
|
||||
return value_1 == true
|
||||
}
|
||||
|
||||
fun case_2(value_1: Boolean): Boolean? {
|
||||
contract { returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 != false<!>) }
|
||||
return if (value_1 != false) true else null
|
||||
}
|
||||
|
||||
fun case_3(value_1: String): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(false) implies (value_1 != "") }
|
||||
return !(value_1 != "")
|
||||
}
|
||||
|
||||
fun case_4(value_1: Int): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_1 == 0) }
|
||||
return if (value_1 == 0) null else true
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Boolean): kotlin.Boolean
|
||||
public fun case_2(/*0*/ value_1: kotlin.Boolean): kotlin.Boolean?
|
||||
public fun case_3(/*0*/ value_1: kotlin.String): kotlin.Boolean
|
||||
public fun case_4(/*0*/ value_1: kotlin.Int): kotlin.Boolean?
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 3
|
||||
DESCRIPTION: contracts with not allowed complex conditions in implies.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(value_1: Boolean?): Boolean {
|
||||
contract { returns(true) implies (value_1 != null && <!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 == false<!>) }
|
||||
return value_1 != null && value_1 == false
|
||||
}
|
||||
|
||||
fun case_2(value_1: Boolean, value_2: Boolean): Boolean? {
|
||||
contract { returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 != false<!> || value_2) }
|
||||
return if (value_1 != false || value_2) true else null
|
||||
}
|
||||
|
||||
fun case_3(value_1: String?, value_2: Boolean): Boolean {
|
||||
contract { returns(false) implies (value_1 != null && <!ERROR_IN_CONTRACT_DESCRIPTION!>value_2 != true<!>) }
|
||||
return !(value_1 != null && value_2 != true)
|
||||
}
|
||||
|
||||
fun case_4(value_1: Nothing?, value_2: Boolean?): Boolean? {
|
||||
contract { returns(null) implies (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>value_1<!> == null<!> || value_2 != null || <!ERROR_IN_CONTRACT_DESCRIPTION!><!DEBUG_INFO_CONSTANT!>value_2<!> == false<!>) }
|
||||
return if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>value_1<!> == null<!> || value_2 != null || <!DEBUG_INFO_CONSTANT!>value_2<!> == false) null else true
|
||||
}
|
||||
|
||||
fun case_5(value_1: Any?, value_2: String?): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_1 != null && value_2 != null || value_2 == ".") }
|
||||
return if (value_1 != null && value_2 != null || value_2 == ".") null else true
|
||||
}
|
||||
|
||||
fun case_6(value_1: Boolean, value_2: Int?): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_2 == null && value_1 || value_2 == 0) }
|
||||
return if (value_2 == null && value_1 || value_2 == 0) null else true
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Boolean?): kotlin.Boolean
|
||||
public fun case_2(/*0*/ value_1: kotlin.Boolean, /*1*/ value_2: kotlin.Boolean): kotlin.Boolean?
|
||||
public fun case_3(/*0*/ value_1: kotlin.String?, /*1*/ value_2: kotlin.Boolean): kotlin.Boolean
|
||||
public fun case_4(/*0*/ value_1: kotlin.Nothing?, /*1*/ value_2: kotlin.Boolean?): kotlin.Boolean?
|
||||
public fun case_5(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.String?): kotlin.Boolean?
|
||||
public fun case_6(/*0*/ value_1: kotlin.Boolean, /*1*/ value_2: kotlin.Int?): kotlin.Boolean?
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 4
|
||||
DESCRIPTION: contracts with not allowed conditions with constants in implies.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (<!NULL_FOR_NONNULL_TYPE!>null<!>) }
|
||||
return true
|
||||
}
|
||||
|
||||
fun case_2(): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(false) implies <!CONSTANT_EXPECTED_TYPE_MISMATCH!>0.000001<!> }
|
||||
return true
|
||||
}
|
||||
|
||||
fun case_3(): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies <!TYPE_MISMATCH!>""<!> }
|
||||
return null
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public fun case_1(): kotlin.Boolean?
|
||||
public fun case_2(): kotlin.Boolean
|
||||
public fun case_3(): kotlin.Boolean?
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 5
|
||||
DESCRIPTION: contracts with not allowed expressions in implies.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(): Boolean {
|
||||
contract { returns(true) implies (<!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>-10<!>) }
|
||||
return true
|
||||
}
|
||||
|
||||
fun case_2(): Boolean {
|
||||
contract { returnsNotNull() implies (return return <!RETURN_TYPE_MISMATCH!>return<!>) }
|
||||
return true
|
||||
}
|
||||
|
||||
fun case_3(): Boolean {
|
||||
contract { returns(false) implies (<!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>"..." + "$<!UNRESOLVED_REFERENCE!>value_1<!>"<!>) }
|
||||
return true
|
||||
}
|
||||
|
||||
/*
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-25948
|
||||
*/
|
||||
fun case_4(): Boolean {
|
||||
contract { returns(null) implies throw Exception() }
|
||||
return true
|
||||
}
|
||||
|
||||
/*
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26386
|
||||
*/
|
||||
fun case_5(): Boolean? {
|
||||
contract { returns(null) implies case_5() }
|
||||
return null
|
||||
}
|
||||
|
||||
fun case_6(): Boolean? {
|
||||
contract { returns(null) implies <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>listOf(0)<!> }
|
||||
return null
|
||||
}
|
||||
|
||||
fun case_7(value_1: Boolean): Boolean? {
|
||||
contract { returns(null) implies <!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>contract { returns(null) implies (!value_1) }<!> }
|
||||
return null
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public fun case_1(): kotlin.Boolean
|
||||
public fun case_2(): kotlin.Boolean
|
||||
public fun case_3(): kotlin.Boolean
|
||||
public fun case_4(): kotlin.Boolean
|
||||
public fun case_6(): kotlin.Boolean?
|
||||
public fun case_7(/*0*/ value_1: kotlin.Boolean): kotlin.Boolean?
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_BASIC_TYPES
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 6
|
||||
DESCRIPTION: contracts with not function parameters in implies.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
object case_1 {
|
||||
val value_1 = getBoolean()
|
||||
const val value_2 = true
|
||||
private const val value_3 = false
|
||||
|
||||
fun case_1_1(): Boolean? {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returnsNotNull() implies (value_1) }
|
||||
return if (value_1) true else null
|
||||
}
|
||||
|
||||
fun case_1_2(): Boolean? {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(null) implies (value_2) }
|
||||
return if (value_2) null else true
|
||||
}
|
||||
|
||||
fun case_1_3(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(true) implies (value_3) }
|
||||
return value_3
|
||||
}
|
||||
}
|
||||
|
||||
class case_2(value_5: Boolean, val value_1: Boolean) {
|
||||
val value_2 = getBoolean()
|
||||
|
||||
companion object {
|
||||
const val value_3 = false
|
||||
private const val value_4 = true
|
||||
}
|
||||
|
||||
init {
|
||||
fun case_2_1(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (value_5) }
|
||||
return !(value_5)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_2_2(): Boolean? {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(null) implies (value_1) }
|
||||
return if (value_1) null else true
|
||||
}
|
||||
|
||||
fun case_2_3(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(true) implies (value_2) }
|
||||
return value_2
|
||||
}
|
||||
|
||||
fun case_2_4(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (value_3) }
|
||||
return !(value_3)
|
||||
}
|
||||
|
||||
inline fun <reified K : Number> K.case_2_5(): Boolean? {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returnsNotNull() implies (<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>value_4<!>) }
|
||||
return if (<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>value_4<!>) true else null
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
package
|
||||
|
||||
public fun getAny(): kotlin.Any
|
||||
public fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
|
||||
public fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
|
||||
public fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
|
||||
public fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
|
||||
public fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
|
||||
public fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
|
||||
public fun getList(): kotlin.collections.MutableList<kotlin.Int>
|
||||
public fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
|
||||
public fun getNothing(): kotlin.Nothing
|
||||
public fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
|
||||
public fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
|
||||
public fun getUnit(): () -> kotlin.Unit
|
||||
|
||||
public final class _BasicTypesProvider {
|
||||
public constructor _BasicTypesProvider()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun getAny(): kotlin.Any
|
||||
public final fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
|
||||
public final fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
|
||||
public final fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
|
||||
public final fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
|
||||
public final fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
|
||||
public final fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
|
||||
public final fun getList(): kotlin.collections.MutableList<kotlin.Int>
|
||||
public final fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
|
||||
public final fun getNothing(): kotlin.Nothing
|
||||
public final fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
|
||||
public final fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
|
||||
public final fun getUnit(): () -> kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public object case_1 {
|
||||
private constructor case_1()
|
||||
public final val value_1: kotlin.Boolean
|
||||
public const final val value_2: kotlin.Boolean = true
|
||||
private const final val value_3: kotlin.Boolean = false
|
||||
public final fun case_1_1(): kotlin.Boolean?
|
||||
public final fun case_1_2(): kotlin.Boolean?
|
||||
public final fun case_1_3(): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class case_2 {
|
||||
public constructor case_2(/*0*/ value_5: kotlin.Boolean, /*1*/ value_1: kotlin.Boolean)
|
||||
public final val value_1: kotlin.Boolean
|
||||
public final val value_2: kotlin.Boolean
|
||||
public final fun case_2_2(): kotlin.Boolean?
|
||||
public final fun case_2_3(): kotlin.Boolean
|
||||
public final fun case_2_4(): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
public final inline fun </*0*/ reified K : kotlin.Number> K.case_2_5(): kotlin.Boolean?
|
||||
|
||||
public companion object Companion {
|
||||
private constructor Companion()
|
||||
public const final val value_3: kotlin.Boolean = false
|
||||
private const final val value_4: kotlin.Boolean = true
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_BASIC_TYPES
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Contract function with 'this' labeled by not current extensible object
|
||||
ISSUES: KT-26149
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun <T> T?.case_3() {
|
||||
fun <K> K?.case_3_1(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(true) implies (this@case_3 != null) }
|
||||
return this@case_3 != null
|
||||
}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
package
|
||||
|
||||
public fun getAny(): kotlin.Any
|
||||
public fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
|
||||
public fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
|
||||
public fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
|
||||
public fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
|
||||
public fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
|
||||
public fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
|
||||
public fun getList(): kotlin.collections.MutableList<kotlin.Int>
|
||||
public fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
|
||||
public fun getNothing(): kotlin.Nothing
|
||||
public fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
|
||||
public fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
|
||||
public fun getUnit(): () -> kotlin.Unit
|
||||
public fun </*0*/ T> T?.case_3(): kotlin.Unit
|
||||
|
||||
public final class _BasicTypesProvider {
|
||||
public constructor _BasicTypesProvider()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun getAny(): kotlin.Any
|
||||
public final fun getBoolean(/*0*/ arg: kotlin.Any = ...): kotlin.Boolean
|
||||
public final fun getByte(/*0*/ arg: kotlin.Any = ...): kotlin.Byte
|
||||
public final fun getChar(/*0*/ arg: kotlin.Any = ...): kotlin.Char
|
||||
public final fun getDouble(/*0*/ arg: kotlin.Any = ...): kotlin.Double
|
||||
public final fun getFloat(/*0*/ arg: kotlin.Any = ...): kotlin.Float
|
||||
public final fun getInt(/*0*/ arg: kotlin.Any = ...): kotlin.Int
|
||||
public final fun getList(): kotlin.collections.MutableList<kotlin.Int>
|
||||
public final fun getLong(/*0*/ arg: kotlin.Any = ...): kotlin.Long
|
||||
public final fun getNothing(): kotlin.Nothing
|
||||
public final fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
|
||||
public final fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
|
||||
public final fun getUnit(): () -> kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 8
|
||||
DESCRIPTION: Not allowed empty contract.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!>({ })
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!>(builder = { })
|
||||
return block()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 9
|
||||
DESCRIPTION: Function with contract as returned expression.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) = {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): () -> kotlin.Unit
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Functions with simple contracts.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(value_1: Int?, block: () -> Unit): Boolean {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
block()
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
inline fun <T> T?.case_3(value_1: Int?, value_2: Boolean, value_3: Int?, block: () -> Unit): Boolean? {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
returns(true) implies (value_1 != null)
|
||||
returns(false) implies (!value_2)
|
||||
returnsNotNull() implies (this@case_3 != null && value_3 != null)
|
||||
}
|
||||
block()
|
||||
return value_1 != null
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public inline fun case_2(/*0*/ value_1: kotlin.Int?, /*1*/ block: () -> kotlin.Unit): kotlin.Boolean
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
Returns(TRUE) -> value_1 != null
|
||||
|
||||
public inline fun </*0*/ T> T?.case_3(/*0*/ value_1: kotlin.Int?, /*1*/ value_2: kotlin.Boolean, /*2*/ value_3: kotlin.Int?, /*3*/ block: () -> kotlin.Unit): kotlin.Boolean?
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
Returns(TRUE) -> value_1 != null
|
||||
Returns(FALSE) -> !value_2
|
||||
Returns(NOT_NULL) -> <this> != null && value_3 != null
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_FUNCTIONS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26153
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
internal inline fun case_1(block: () -> Unit) {
|
||||
return contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_2() = contract { }
|
||||
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
val value_1 = contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
block()
|
||||
}
|
||||
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
})
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_5(block: () -> Unit) {
|
||||
<!REDUNDANT_LABEL_WARNING!>test@<!> contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_6(block: () -> Unit) {
|
||||
throw Exception(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
inline fun case_7(block: () -> Unit) {
|
||||
_funWithAnyArg(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
})
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public fun _funWithAnyArg(/*0*/ value_1: kotlin.Any): kotlin.Int
|
||||
public fun _funWithoutArgs(): kotlin.Int
|
||||
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun case_2(): kotlin.Unit
|
||||
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_5(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_6(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun case_7(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Functions with contract and builder lambda in parentheses.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract({ callsInPlace(block, InvocationKind.EXACTLY_ONCE) })
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract(builder = { callsInPlace(block, InvocationKind.EXACTLY_ONCE) })
|
||||
return block()
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 4
|
||||
DESCRIPTION: Contract isn't in the first position.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26191
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(value_1: Int?) {
|
||||
println("!")
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
|
||||
}
|
||||
|
||||
fun case_2(value_1: Int?) {
|
||||
100 + 10
|
||||
throw Exception(contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
fun case_3(value_1: Int?) {
|
||||
for (i in 0..10) {
|
||||
println(i)
|
||||
}
|
||||
return contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_4(value_1: Int?) {
|
||||
val f = 10 - 20
|
||||
val g = contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Int?): kotlin.Unit
|
||||
public fun case_2(/*0*/ value_1: kotlin.Int?): kotlin.Unit
|
||||
public fun case_3(/*0*/ value_1: kotlin.Int?): kotlin.Unit
|
||||
public fun case_4(/*0*/ value_1: kotlin.Int?): kotlin.Unit
|
||||
public fun case_5(/*0*/ number: kotlin.Int?): kotlin.Boolean
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Contract function with CallsInPlace effect with not allowed implies.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26409
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(value_1: Any?, block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) implies (value_1 != null) }
|
||||
if (value_1 != null) block()
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Any?, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE) -> value_1 != null
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, common
|
||||
NUMBER: 6
|
||||
DESCRIPTION: contracts with not allowed conditions with boolean constants or constant expressions in implies.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26491
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(): Boolean {
|
||||
contract { returns(true) implies true }
|
||||
return true
|
||||
}
|
||||
|
||||
fun case_2(): Boolean {
|
||||
contract { returns(true) implies (true || false) }
|
||||
return true || false
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package
|
||||
|
||||
public fun case_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> TRUE
|
||||
|
||||
public fun case_2(): kotlin.Boolean
|
||||
Returns(TRUE) -> TRUE || FALSE
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, callsInPlace
|
||||
NUMBER: 1
|
||||
DESCRIPTION: contract functions with CallsInPlace with dynamic InvocationKind.
|
||||
ISSUES: KT-26152
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
internal val invocationKind: InvocationKind = InvocationKind.EXACTLY_ONCE
|
||||
|
||||
internal object SampleObject {
|
||||
val invocationKind = InvocationKind.EXACTLY_ONCE
|
||||
}
|
||||
|
||||
internal inline fun case_1(invocationKind: InvocationKind, block: () -> Unit) {
|
||||
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun <T : InvocationKind> case_2(invocationKind: T, block: () -> Unit) {
|
||||
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
|
||||
return block()
|
||||
}
|
||||
|
||||
internal inline fun case_3(block: () -> Unit) {
|
||||
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
|
||||
return block()
|
||||
}
|
||||
|
||||
internal inline fun case_4(block: () -> Unit) {
|
||||
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>SampleObject.invocationKind<!>) }
|
||||
return block()
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package
|
||||
|
||||
internal val invocationKind: kotlin.contracts.InvocationKind
|
||||
internal inline fun case_1(/*0*/ invocationKind: kotlin.contracts.InvocationKind, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public inline fun </*0*/ T : kotlin.contracts.InvocationKind> case_2(/*0*/ invocationKind: T, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
internal inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
|
||||
internal object SampleObject {
|
||||
private constructor SampleObject()
|
||||
public final val invocationKind: kotlin.contracts.InvocationKind
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, callsInPlace
|
||||
NUMBER: 1
|
||||
DESCRIPTION: contract functions with CallsInPlace effects with different invocation kinds.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.AT_LEAST_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.UNKNOWN) }
|
||||
return block()
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, AT_MOST_ONCE)
|
||||
|
||||
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, AT_LEAST_ONCE)
|
||||
|
||||
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, UNKNOWN)
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, callsInPlace
|
||||
NUMBER: 2
|
||||
DESCRIPTION: functions with contract and duplicate CallsInPlace.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26150
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
CallsInPlace(block, AT_MOST_ONCE)
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, callsInPlace
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Contract with 'this' in first parameter of CallsInPlace.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26294
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun <T : Function<*>> T.case_1(block: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(this@case_1, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
block()
|
||||
(this@case_1 as kotlin.reflect.KFunction<*>).call()
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public inline fun </*0*/ T : kotlin.Function<*>> T.case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(<this>, EXACTLY_ONCE)
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, common
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Indirect effect functions call.
|
||||
ISSUES: KT-26175
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>{ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }()<!>
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
fun case_2(x: Any?): Boolean {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).apply { implies (x is Number) }<!> // 'Returns' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
fun case_3(x: Any?): Boolean {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).also { it implies (x is Number) }<!> // 'Returns' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
fun case_4(x: Any?): Boolean {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).let { it implies (x is Number) }<!> // 'ConditionalEffect' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
fun case_5(x: Any?): Boolean {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).run { implies (x is Number) }<!> // 'ConditionalEffect' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
fun case_6(x: Any?): Boolean {
|
||||
contract {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).takeIf { it implies (x is Number); false }<!> // null, must be unrecognized effect
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public fun case_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_3(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_4(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_5(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_6(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Using equality with expressions in implies.
|
||||
ISSUES: KT-26178
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>-.15f<!>) }
|
||||
return x !is Number
|
||||
}
|
||||
|
||||
fun case_2(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>"..." + "."<!>) }
|
||||
return x !is Number
|
||||
}
|
||||
|
||||
fun case_3(x: Int, y: Int): Boolean {
|
||||
contract { returns(true) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>x > y<!>) }
|
||||
return x > y
|
||||
}
|
||||
|
||||
fun case_4(x: Any?, y: Any?): Boolean {
|
||||
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>y.toString()<!>) }
|
||||
return x !is Number
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_3(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int): kotlin.Boolean
|
||||
public fun case_4(/*0*/ x: kotlin.Any?, /*1*/ y: kotlin.Any?): kotlin.Boolean
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Using equality with not labeled 'this' in implies.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun Any?.case_1(): Boolean {
|
||||
contract {
|
||||
returns(true) implies (<!SENSELESS_COMPARISON!><!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> != null<!>)
|
||||
}
|
||||
return this != null
|
||||
}
|
||||
|
||||
fun Any?.case_2(): Boolean {
|
||||
contract {
|
||||
returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> is Number<!USELESS_NULLABLE_CHECK!>?<!>)
|
||||
}
|
||||
return this is Number?
|
||||
}
|
||||
|
||||
fun <T> T?.case_3(): Boolean {
|
||||
contract {
|
||||
returnsNotNull() implies (<!SENSELESS_COMPARISON!><!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> != null<!>)
|
||||
}
|
||||
return this != null
|
||||
}
|
||||
|
||||
inline fun <reified T : Number> T.case_4(): Boolean {
|
||||
contract {
|
||||
returns(null) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> is <!INCOMPATIBLE_TYPES!>Int<!>)
|
||||
}
|
||||
return this is Int
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun kotlin.Any?.case_1(): kotlin.Boolean
|
||||
public fun kotlin.Any?.case_2(): kotlin.Boolean
|
||||
public fun </*0*/ T> T?.case_3(): kotlin.Boolean
|
||||
public inline fun </*0*/ reified T : kotlin.Number> T.case_4(): kotlin.Boolean
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_OBJECTS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Using reference equality in implies.
|
||||
ISSUES: KT-26177
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true) implies (x === <!ERROR_IN_CONTRACT_DESCRIPTION!>_EmptyObject<!>) // should be not allowed
|
||||
}
|
||||
return x === _EmptyObject
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
|
||||
public object _EmptyObject {
|
||||
private constructor _EmptyObject()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 4
|
||||
DESCRIPTION: Using equality with literals in implies.
|
||||
ISSUES: KT-26178
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(x: Any?): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (x == .15f) }
|
||||
return x == .15f
|
||||
}
|
||||
|
||||
fun case_2(x: Any?) {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns() implies (x == "...") }
|
||||
if (x != "...") throw Exception()
|
||||
}
|
||||
|
||||
fun case_3(x: Any?): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (x == '-') }
|
||||
return x == '-'
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_2(/*0*/ x: kotlin.Any?): kotlin.Unit
|
||||
public fun case_3(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Contract on the extension function with Boolean upper bound (Boolean or Nothing) or smartcast to Boolean.
|
||||
DISCUSSION
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T.case_1(): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (!this@case_1) }
|
||||
return if (!this) null else true
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T : kotlin.Boolean> T.case_1(): kotlin.Boolean?
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Contract on the extension function with smartcast to Boolean.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun Boolean?.case_1(): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (this@case_1 != null && <!DEBUG_INFO_SMARTCAST!>this@case_1<!>) }
|
||||
return this != null && <!DEBUG_INFO_SMARTCAST!>this<!>
|
||||
}
|
||||
|
||||
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T?.case_2(): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (this@case_2 != null && this@case_2 !is Nothing && <!DEBUG_INFO_SMARTCAST!>this@case_2<!>) }
|
||||
return this != null && this !is Nothing && <!DEBUG_INFO_SMARTCAST!>this<!>
|
||||
}
|
||||
|
||||
fun <T>T?.case_3() {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns() implies (this@case_3 == null || this@case_3 is Boolean? && !<!DEBUG_INFO_SMARTCAST!>this@case_3<!>) }
|
||||
if (!(this == null || this is Boolean? && !<!DEBUG_INFO_SMARTCAST!>this<!>)) throw Exception()
|
||||
}
|
||||
|
||||
fun case_4(value_1: Boolean?): Boolean {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (value_1 != null && !<!DEBUG_INFO_SMARTCAST!>value_1<!>) }
|
||||
return value_1 != null && !<!DEBUG_INFO_SMARTCAST!>value_1<!>
|
||||
}
|
||||
|
||||
fun Boolean.case_5(value_1: Any?): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!>) }
|
||||
return if (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!>) true else null
|
||||
}
|
||||
|
||||
fun Boolean?.case_6(): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (this@case_6 != null && <!DEBUG_INFO_SMARTCAST!>this@case_6<!>) }
|
||||
return if (this@case_6 != null && <!DEBUG_INFO_SMARTCAST!>this@case_6<!>) true else null
|
||||
}
|
||||
|
||||
fun <T : Boolean?> T.case_7(value_1: Any?): Boolean? {
|
||||
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!> && this@case_7 != null && <!DEBUG_INFO_SMARTCAST!>this@case_7<!>) }
|
||||
return if (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!> && this@case_7 != null && <!DEBUG_INFO_SMARTCAST!>this@case_7<!>) true else null
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package
|
||||
|
||||
public fun case_4(/*0*/ value_1: kotlin.Boolean?): kotlin.Boolean
|
||||
public fun kotlin.Boolean?.case_1(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.Boolean> T?.case_2(): kotlin.Boolean
|
||||
public fun </*0*/ T> T?.case_3(): kotlin.Unit
|
||||
public fun kotlin.Boolean.case_5(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
public fun kotlin.Boolean?.case_6(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.Boolean?> T.case_7(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Returns effect with type checking with generic parameter
|
||||
ISSUES: KT-26296
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun <T : Number?> T.case_1() {
|
||||
contract { returns() implies (<!USELESS_IS_CHECK!>this@case_1 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!><!>) }
|
||||
if (!(<!USELESS_IS_CHECK!>this@case_1 is T<!>)) throw Exception()
|
||||
}
|
||||
|
||||
fun <T : Number, K : <!FINAL_UPPER_BOUND!>String<!>> T?.case_2(value_1: K?) {
|
||||
contract { returns() implies (this@case_2 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!> && value_1 is K) }
|
||||
if (!(this@case_2 is T && value_1 is K)) throw Exception()
|
||||
}
|
||||
|
||||
inline fun <reified T : Number> T?.case_3(value_1: Any?) {
|
||||
contract { returns() implies (value_1 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!>) }
|
||||
if (!(value_1 is T)) throw Exception()
|
||||
}
|
||||
|
||||
inline fun <reified T : Number, K> K?.case_4(value_1: Any?) {
|
||||
contract { returns() implies (this@case_4 !is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!> || value_1 is T) }
|
||||
if (!(this@case_4 !is T || value_1 is T)) throw Exception()
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_1(): kotlin.Unit
|
||||
public fun </*0*/ T : kotlin.Number, /*1*/ K : kotlin.String> T?.case_2(/*0*/ value_1: K?): kotlin.Unit
|
||||
public inline fun </*0*/ reified T : kotlin.Number> T?.case_3(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public inline fun </*0*/ reified T : kotlin.Number, /*1*/ K> K?.case_4(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -FINAL_UPPER_BOUND
|
||||
// !WITH_CLASSES
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Returns effect with simple conditions.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(value_1: Boolean) {
|
||||
contract { returns() implies (value_1) }
|
||||
if (!value_1) throw Exception()
|
||||
}
|
||||
|
||||
fun case_2(value_1: Boolean): Boolean {
|
||||
contract { returns(false) implies (!value_1) }
|
||||
return value_1
|
||||
}
|
||||
|
||||
fun Boolean.case_3() {
|
||||
contract { returns() implies (!this@case_3) }
|
||||
if (this@case_3) throw Exception()
|
||||
}
|
||||
|
||||
fun case_5(value_1: Any?) {
|
||||
contract { returns() implies (value_1 is String) }
|
||||
if (value_1 !is String) throw Exception()
|
||||
}
|
||||
|
||||
fun case_6(value_1: Any?) {
|
||||
contract { returns() implies (value_1 !is String?) }
|
||||
if (value_1 is String?) throw Exception()
|
||||
}
|
||||
|
||||
fun Any?.case_7() {
|
||||
contract { returns() implies (this@case_7 is Number) }
|
||||
if (this !is Number) throw Exception()
|
||||
}
|
||||
|
||||
fun <T>T?.case_8() {
|
||||
contract { returns() implies (this@case_8 !is _ClassLevel3?) }
|
||||
if (this is _ClassLevel3?) throw Exception()
|
||||
}
|
||||
|
||||
fun <T : Number?>T.case_9(): Boolean? {
|
||||
contract { returns(null) implies (this@case_9 is Byte?) }
|
||||
return if (this is Byte?) null else true
|
||||
}
|
||||
|
||||
fun case_10(value_1: Any?) {
|
||||
contract { returns() implies (value_1 == null) }
|
||||
if (value_1 != null) throw Exception()
|
||||
}
|
||||
|
||||
fun case_11(value_1: Any?): Boolean? {
|
||||
contract { returns(null) implies (value_1 != null) }
|
||||
return if (value_1 != null) null else true
|
||||
}
|
||||
|
||||
fun Char.case_12() {
|
||||
contract { returns() implies (<!SENSELESS_COMPARISON!>this@case_12 == null<!>) }
|
||||
if (<!SENSELESS_COMPARISON!>this@case_12 != null<!>) throw Exception()
|
||||
}
|
||||
|
||||
fun <T : Number>T?.case_13() {
|
||||
contract { returns() implies (this@case_13 == null) }
|
||||
if (this != null) throw Exception()
|
||||
}
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Boolean): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1
|
||||
|
||||
public fun case_10(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 == null
|
||||
|
||||
public fun case_11(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 != null
|
||||
|
||||
public fun case_2(/*0*/ value_1: kotlin.Boolean): kotlin.Boolean
|
||||
Returns(FALSE) -> !value_1
|
||||
|
||||
public fun case_5(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 is String
|
||||
|
||||
public fun case_6(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 !is String?
|
||||
|
||||
public fun kotlin.Char.case_12(): kotlin.Unit
|
||||
Returns(WILDCARD) -> <this> == null
|
||||
|
||||
public fun </*0*/ T : kotlin.Number> T?.case_13(): kotlin.Unit
|
||||
Returns(WILDCARD) -> <this> == null
|
||||
|
||||
public fun kotlin.Boolean.case_3(): kotlin.Unit
|
||||
Returns(WILDCARD) -> !<this>
|
||||
|
||||
public fun kotlin.Any?.case_7(): kotlin.Unit
|
||||
Returns(WILDCARD) -> <this> is Number
|
||||
|
||||
public fun </*0*/ T> T?.case_8(): kotlin.Unit
|
||||
Returns(WILDCARD) -> <this> !is _ClassLevel3?
|
||||
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_9(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> is Byte?
|
||||
|
||||
public final class _Class {
|
||||
public constructor _Class()
|
||||
public final val prop_1: kotlin.Int = 1
|
||||
public final val prop_2: kotlin.Int = 2
|
||||
public final val prop_3: kotlin.Int = 3
|
||||
public final operator fun contains(/*0*/ a: kotlin.Char): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Int): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Long): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun fun_1(): (kotlin.Int) -> (kotlin.Int) -> kotlin.Int
|
||||
public final fun fun_2(/*0*/ value_1: kotlin.Int): kotlin.Int
|
||||
public final fun fun_3(/*0*/ value_1: kotlin.Int): (kotlin.Int) -> kotlin.Int
|
||||
public final fun getCharArray(/*0*/ value_1: kotlin.Char): kotlin.CharArray
|
||||
public final fun getIntArray(/*0*/ value_1: kotlin.Int): kotlin.IntArray
|
||||
public final fun getLongArray(/*0*/ value_1: kotlin.Long): kotlin.LongArray
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final class _NestedClass {
|
||||
public constructor _NestedClass()
|
||||
public final val prop_4: kotlin.Int = 4
|
||||
public final val prop_5: kotlin.Int = 5
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public open class _ClassLevel1 {
|
||||
public constructor _ClassLevel1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel2 : _ClassLevel1 {
|
||||
public constructor _ClassLevel2()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel3 : _ClassLevel2 {
|
||||
public constructor _ClassLevel3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel4 : _ClassLevel3 {
|
||||
public constructor _ClassLevel4()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel5 : _ClassLevel4 {
|
||||
public constructor _ClassLevel5()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassLevel6 : _ClassLevel5 {
|
||||
public constructor _ClassLevel6()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassWithCompanionObject {
|
||||
public constructor _ClassWithCompanionObject()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public companion object Companion {
|
||||
private constructor Companion()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public final class _EmptyClass {
|
||||
public constructor _EmptyClass()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER -FINAL_UPPER_BOUND
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_CLASSES
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Returns effect with complex conditions (using conjunction and disjuntion).
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1(cond1: Boolean, cond2: Boolean, cond3: Boolean) {
|
||||
contract { returns() implies (cond1 && !cond2 || cond3) }
|
||||
if (!(cond1 && !cond2 || cond3)) throw Exception()
|
||||
}
|
||||
|
||||
fun case_2(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
contract { returns() implies (value_1 is String? || value_2 !is Int && value_3 !is Nothing?) }
|
||||
if (!(value_1 is String? || value_2 !is Int && value_3 !is Nothing?)) throw Exception()
|
||||
}
|
||||
|
||||
fun case_3(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
contract { returns() implies (value_1 == null || value_2 != null && value_3 == null) }
|
||||
if (!(value_1 == null || value_2 != null && value_3 == null)) throw Exception()
|
||||
}
|
||||
|
||||
fun <T>T.case_4(): Boolean {
|
||||
contract { returns(false) implies (this@case_4 is Char || this@case_4 == null) }
|
||||
return !(this is Char || this == null)
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ cond1: kotlin.Boolean, /*1*/ cond2: kotlin.Boolean, /*2*/ cond3: kotlin.Boolean): kotlin.Unit
|
||||
Returns(WILDCARD) -> (cond1 && (!cond2)) || cond3
|
||||
|
||||
public fun case_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 is String? || (value_2 !is Int && value_3 !is Nothing?)
|
||||
|
||||
public fun case_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 == null || (value_2 != null && value_3 == null)
|
||||
|
||||
public fun </*0*/ T> T.case_4(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> is Char || <this> == null
|
||||
|
||||
public final class _Class {
|
||||
public constructor _Class()
|
||||
public final val prop_1: kotlin.Int = 1
|
||||
public final val prop_2: kotlin.Int = 2
|
||||
public final val prop_3: kotlin.Int = 3
|
||||
public final operator fun contains(/*0*/ a: kotlin.Char): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Int): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Long): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun fun_1(): (kotlin.Int) -> (kotlin.Int) -> kotlin.Int
|
||||
public final fun fun_2(/*0*/ value_1: kotlin.Int): kotlin.Int
|
||||
public final fun fun_3(/*0*/ value_1: kotlin.Int): (kotlin.Int) -> kotlin.Int
|
||||
public final fun getCharArray(/*0*/ value_1: kotlin.Char): kotlin.CharArray
|
||||
public final fun getIntArray(/*0*/ value_1: kotlin.Int): kotlin.IntArray
|
||||
public final fun getLongArray(/*0*/ value_1: kotlin.Long): kotlin.LongArray
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final class _NestedClass {
|
||||
public constructor _NestedClass()
|
||||
public final val prop_4: kotlin.Int = 4
|
||||
public final val prop_5: kotlin.Int = 5
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public open class _ClassLevel1 {
|
||||
public constructor _ClassLevel1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel2 : _ClassLevel1 {
|
||||
public constructor _ClassLevel2()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel3 : _ClassLevel2 {
|
||||
public constructor _ClassLevel3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel4 : _ClassLevel3 {
|
||||
public constructor _ClassLevel4()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel5 : _ClassLevel4 {
|
||||
public constructor _ClassLevel5()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassLevel6 : _ClassLevel5 {
|
||||
public constructor _ClassLevel6()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassWithCompanionObject {
|
||||
public constructor _ClassWithCompanionObject()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public companion object Companion {
|
||||
private constructor Companion()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public final class _EmptyClass {
|
||||
public constructor _EmptyClass()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractBuilder, effects, returns
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Returns effect with conditions on receiver.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun Any?.case_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_1 != null) }
|
||||
return this == null
|
||||
}
|
||||
|
||||
fun <T> T?.case_2(value_1: Any?, value_2: Any?) {
|
||||
contract { returns() implies (this@case_2 is String? || value_1 !is Int && value_2 !is Nothing?) }
|
||||
if (!(this@case_2 is String? || value_1 !is Int && value_2 !is Nothing?)) throw Exception()
|
||||
}
|
||||
|
||||
inline fun <reified T : Number?> T.case_3(value_1: Any?) {
|
||||
contract { returns() implies (value_1 == null || this@case_3 != null && this@case_3 is Int) }
|
||||
if (!(value_1 == null || this@case_3 != null && this@case_3 is Int)) throw Exception()
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public fun kotlin.Any?.case_1(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> != null
|
||||
|
||||
public fun </*0*/ T> T?.case_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> <this> is String? || (value_1 !is Int && value_2 !is Nothing?)
|
||||
|
||||
public inline fun </*0*/ reified T : kotlin.Number?> T.case_3(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 == null || (<this> != null && <this> is Int)
|
||||
|
||||
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractFunction
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Check that recursion isn't allowed in contract functions with CallsInPlace effect.
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
block()
|
||||
<!RECURSION_IN_INLINE!>case_1<!>(block)
|
||||
}
|
||||
compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractFunction/neg/1.txt
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
Vendored
+98
@@ -0,0 +1,98 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_CLASSES
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractFunction
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Check report about use contracts in literal functions, lambdas or not top-level functions.
|
||||
ISSUES: KT-26149
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1() {
|
||||
val fun_1 = fun(block: () -> Unit) {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
fun_1 { throw Exception() }
|
||||
println("1")
|
||||
}
|
||||
|
||||
fun case_2() {
|
||||
val lambda_1 = { block: () -> Unit ->
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
block()
|
||||
}
|
||||
|
||||
lambda_1 { throw Exception() }
|
||||
println("1")
|
||||
}
|
||||
|
||||
object case_3 {
|
||||
fun case_3(block: () -> Unit) {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26244
|
||||
*/
|
||||
class case_4 : _ClassLevel3() {
|
||||
fun <T : Number?>T.case_4_1(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (<!USELESS_IS_CHECK!>this@case_4 !is _ClassLevel1<!>) }
|
||||
return this == null
|
||||
}
|
||||
|
||||
fun case_4_2(number: Int?): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (number != null) }
|
||||
return number == null
|
||||
}
|
||||
|
||||
fun <T>T?.case_4_3(): Boolean {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (this@case_4_3 !is Number) }
|
||||
return this@case_4_3 is Number
|
||||
}
|
||||
|
||||
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T.case_4_4() {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (!this@case_4_4) }
|
||||
if (this) throw Exception()
|
||||
}
|
||||
|
||||
fun <T>T.case_4_5_wrap() {
|
||||
fun case_4_5_contract() {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (this@case_4_5_wrap is _ClassLevel1) }
|
||||
if (this@case_4_5_wrap !is _ClassLevel1) throw Exception()
|
||||
}
|
||||
case_4_5_contract()
|
||||
println("!")
|
||||
}
|
||||
|
||||
fun case_4_5() = _ClassLevel3().case_4_5_wrap()
|
||||
}
|
||||
|
||||
/*
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26244
|
||||
*/
|
||||
class case_5<T> : _ClassLevel5() {
|
||||
inner class case_5_1 {
|
||||
fun <K : Number?>K.case_5_1_1() {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (this@case_5_1 !is _ClassLevel1 && <!SENSELESS_COMPARISON!>this@case_5_1 != null<!> || <!USELESS_IS_CHECK!>this@case_5 is _ClassLevel1<!> && this@case_5_1_1 is Float) }
|
||||
if (!(this@case_5_1 !is _ClassLevel1 && <!SENSELESS_COMPARISON!>this@case_5_1 != null<!> || <!USELESS_IS_CHECK!>this@case_5 is _ClassLevel1<!> && this is Float)) throw Exception()
|
||||
}
|
||||
|
||||
fun case_5_1_2() {
|
||||
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns() implies (this@case_5_1 !is _ClassLevel1 || <!USELESS_IS_CHECK!>this@case_5 is _ClassLevel1<!> || <!SENSELESS_COMPARISON!>this@case_5_1 == null<!>) }
|
||||
if (!(this@case_5_1 !is _ClassLevel1 || <!USELESS_IS_CHECK!>this@case_5 is _ClassLevel1<!> || <!SENSELESS_COMPARISON!>this@case_5_1 == null<!>)) throw Exception()
|
||||
}
|
||||
}
|
||||
}
|
||||
compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractFunction/neg/2.txt
Vendored
+132
@@ -0,0 +1,132 @@
|
||||
package
|
||||
|
||||
public fun case_1(): kotlin.Unit
|
||||
public fun case_2(): kotlin.Unit
|
||||
|
||||
public final class _Class {
|
||||
public constructor _Class()
|
||||
public final val prop_1: kotlin.Int = 1
|
||||
public final val prop_2: kotlin.Int = 2
|
||||
public final val prop_3: kotlin.Int = 3
|
||||
public final operator fun contains(/*0*/ a: kotlin.Char): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Int): kotlin.Boolean
|
||||
public final operator fun contains(/*0*/ a: kotlin.Long): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun fun_1(): (kotlin.Int) -> (kotlin.Int) -> kotlin.Int
|
||||
public final fun fun_2(/*0*/ value_1: kotlin.Int): kotlin.Int
|
||||
public final fun fun_3(/*0*/ value_1: kotlin.Int): (kotlin.Int) -> kotlin.Int
|
||||
public final fun getCharArray(/*0*/ value_1: kotlin.Char): kotlin.CharArray
|
||||
public final fun getIntArray(/*0*/ value_1: kotlin.Int): kotlin.IntArray
|
||||
public final fun getLongArray(/*0*/ value_1: kotlin.Long): kotlin.LongArray
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final class _NestedClass {
|
||||
public constructor _NestedClass()
|
||||
public final val prop_4: kotlin.Int = 4
|
||||
public final val prop_5: kotlin.Int = 5
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public open class _ClassLevel1 {
|
||||
public constructor _ClassLevel1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel2 : _ClassLevel1 {
|
||||
public constructor _ClassLevel2()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel3 : _ClassLevel2 {
|
||||
public constructor _ClassLevel3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel4 : _ClassLevel3 {
|
||||
public constructor _ClassLevel4()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class _ClassLevel5 : _ClassLevel4 {
|
||||
public constructor _ClassLevel5()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassLevel6 : _ClassLevel5 {
|
||||
public constructor _ClassLevel6()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class _ClassWithCompanionObject {
|
||||
public constructor _ClassWithCompanionObject()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public companion object Companion {
|
||||
private constructor Companion()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
}
|
||||
|
||||
public final class _EmptyClass {
|
||||
public constructor _EmptyClass()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public object case_3 {
|
||||
private constructor case_3()
|
||||
public final fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class case_4 : _ClassLevel3 {
|
||||
public constructor case_4()
|
||||
public final fun case_4_2(/*0*/ number: kotlin.Int?): kotlin.Boolean
|
||||
public final fun case_4_5(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
public final fun </*0*/ T : kotlin.Number?> T.case_4_1(): kotlin.Boolean
|
||||
public final fun </*0*/ T> T?.case_4_3(): kotlin.Boolean
|
||||
public final fun </*0*/ T : kotlin.Boolean> T.case_4_4(): kotlin.Unit
|
||||
public final fun </*0*/ T> T.case_4_5_wrap(): kotlin.Unit
|
||||
}
|
||||
|
||||
public final class case_5</*0*/ T> : _ClassLevel5 {
|
||||
public constructor case_5</*0*/ T>()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
public final inner class case_5_1 /*captured type parameters: /*0*/ T*/ {
|
||||
public constructor case_5_1()
|
||||
public final fun case_5_1_2(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
public final fun </*0*/ K : kotlin.Number?> K.case_5_1_1(): kotlin.Unit
|
||||
}
|
||||
}
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseCallsInPlaceEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractFunction
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26126
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun funWithContractExactlyOnce(block: () -> Unit) { // report about not-inline function is expected
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithContractExactlyOnce { value_1 = 10 } // back-end exception
|
||||
value_1.inc()
|
||||
}
|
||||
compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractFunction/pos/1.txt
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public fun case_1(): kotlin.Unit
|
||||
public fun funWithContractExactlyOnce(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseReturnsEffect
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORY: declarations, contractFunction
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Contract function usage before declaration it
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
fun case_1_1(x: Any?) {
|
||||
if (case_1_2(x)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>x<!>.length
|
||||
}
|
||||
}
|
||||
|
||||
fun case_2_1(x: Number?) {
|
||||
case_2_2(x)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>x<!>.toByte())
|
||||
}
|
||||
|
||||
fun case_1_2(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x is String) }
|
||||
return x is String
|
||||
}
|
||||
|
||||
fun case_2_2(x: Any?) {
|
||||
contract { returns() implies(x != null) }
|
||||
if (x == null) throw Exception()
|
||||
}
|
||||
|
||||
|
||||
compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractFunction/pos/2.txt
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
package
|
||||
|
||||
public fun case_1_1(/*0*/ x: kotlin.Any?): kotlin.Unit
|
||||
public fun case_1_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> x is String
|
||||
|
||||
public fun case_2_1(/*0*/ x: kotlin.Number?): kotlin.Unit
|
||||
public fun case_2_2(/*0*/ x: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> x != null
|
||||
|
||||
Reference in New Issue
Block a user