[FIR] Use Function<R> as super type for all FunctionNtypes

This commit is contained in:
Dmitriy Novozhilov
2020-01-24 11:35:37 +03:00
parent 099d737e86
commit 7d8363d6aa
37 changed files with 57 additions and 47 deletions
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun myRun(block: () -> Unit): Unit {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun myRun(block: () -> Unit): Unit {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,14 +6,14 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
inline fun <T, R> T.myLet(block: (T) -> R): R {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T, R> T.myLet(block: (T) -> R): R {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun myRun(block: () -> Unit): Unit {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -5,7 +5,7 @@ import kotlin.contracts.*
inline fun <T> Any?.myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun myRun(block: () -> Unit) {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
inline fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> runTwice(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.AT_LEAST_ONCE)
callsInPlace(block, InvocationKind.AT_LEAST_ONCE)
}
block()
return block();
@@ -14,7 +14,7 @@ fun <T> runTwice(block: () -> T): T {
fun <T> runOnce(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block();
};
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> runTwice(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.AT_LEAST_ONCE)
callsInPlace(block, InvocationKind.AT_LEAST_ONCE)
}
block()
return block();
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> runTwice(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.AT_LEAST_ONCE)
callsInPlace(block, InvocationKind.AT_LEAST_ONCE)
}
block()
return block();
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,14 +6,14 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
fun myRepeat(n: Int, action: () -> Unit) {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(action)
callsInPlace(action)
}
for (i in 1..n) action()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> myRun(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T, R> T.myLet(block: (T) -> R): R {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block(this)
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun <T> inPlace(block: () -> T): T {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block)
callsInPlace(block)
}
return block()
}
@@ -15,23 +15,23 @@ fun foo(y: Boolean) {
inline fun case1(block: () -> Unit) {
val contracts = listOf(
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}, contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
)
block()
}
inline fun case_2(block: () -> Unit) = contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
fun case_3(block: () -> Unit) {
class Class {
fun innerFun(block2: () -> Unit) {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block2, InvocationKind.EXACTLY_ONCE)
callsInPlace(block2, InvocationKind.EXACTLY_ONCE)
}
block2()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.InvocationKind
inline fun foo(block: () -> Unit) {
kotlin.contracts.contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
}
@@ -7,7 +7,7 @@ import kotlin.contracts.*
class Foo {
fun myRun(block: () -> Unit) {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
}
@@ -6,7 +6,7 @@ import kotlin.contracts.*
fun callsAndInverts(b: Boolean, block: () -> Unit): Boolean {
contract {
<!INAPPLICABLE_CANDIDATE!>callsInPlace<!>(block, InvocationKind.EXACTLY_ONCE)
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
returns(true) implies (!b)
returns(false) implies b
}