[FIR] Add inline checker for bodies of inline functions
This checker doesn't support `@PublishedAPI` yet, so some BB tests for it were muted. #KT-46270
This commit is contained in:
committed by
TeamCityServer
parent
7e052c1eb1
commit
32c3f85679
+3
-3
@@ -14,7 +14,7 @@ inline fun case_1(block: () -> Unit) {
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
10 - 1
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
@@ -23,7 +23,7 @@ inline fun case_2(block: () -> Unit) {
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
throw Exception()
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.UNKNOWN)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.UNKNOWN)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
@@ -35,7 +35,7 @@ inline fun case_3(block: () -> Unit) {
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
.0009
|
||||
return contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1, 2
|
||||
inline fun contractBuilder(block: () -> Unit): ContractBuilder.() -> Unit = {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@ import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1, 2, 3
|
||||
inline fun ContractBuilder.callsInPlaceEffectBuilder(block: () -> Unit) =
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
|
||||
fun ContractBuilder.returnsEffectBuilder(value_1: Int?) =
|
||||
returns(true) implies (value_1 != null)
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
return contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ fun case_2() = contract { }
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
val value_1 = contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
block()
|
||||
}
|
||||
@@ -40,13 +40,13 @@ inline fun case_5(block: () -> Unit) {
|
||||
// TESTCASE NUMBER: 6
|
||||
inline fun case_6(block: () -> Unit) {
|
||||
throw Exception(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
inline fun case_7(block: () -> Unit) {
|
||||
funWithAnyArg(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
})
|
||||
}
|
||||
|
||||
+1
-1
@@ -58,6 +58,6 @@ class case_2(value_5: Boolean, val value_1: Boolean) {
|
||||
|
||||
inline fun <reified K : Number> K.case_2_5(): Boolean? {
|
||||
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>returnsNotNull() implies (<!UNRESOLVED_REFERENCE!>value_4<!>)<!> }
|
||||
return if (value_4) true else null
|
||||
return if (<!NON_PUBLIC_CALL_FROM_PUBLIC_INLINE!>value_4<!>) true else null
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,6 +6,6 @@ import kotlin.contracts.*
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) = {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(<!USAGE_IS_NOT_INLINABLE!>block<!>, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -6,5 +6,5 @@ import kotlin.contracts.*
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
<!WRONG_INVOCATION_KIND!>contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }<!>
|
||||
block()
|
||||
case_1(block)
|
||||
<!RECURSION_IN_INLINE!>case_1<!>(block)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user