[FIR] Add ReturnsImplies effect analyzer
This commit is contained in:
Vendored
+2
-2
@@ -27,9 +27,9 @@ class Foo {
|
||||
}
|
||||
|
||||
fun A?.goodWithReceiver() {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (this@goodWithReceiver != null)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun A?.badWithReceiver() {
|
||||
|
||||
+2
-2
@@ -48,8 +48,8 @@ fun doWhileInContract(x: Any?) {
|
||||
}
|
||||
|
||||
fun localValInContract(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
val y: Int = 42
|
||||
returns() implies (x is String)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
Vendored
+14
-14
@@ -5,29 +5,29 @@
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun <reified T> referToReifiedGeneric(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is T)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
class Generic<T> {
|
||||
fun referToCaptured(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is T)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
}
|
||||
|
||||
fun referToSubstituted(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is Generic<String>)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToSubstitutedWithStar(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is Generic<*>)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
typealias GenericString = Generic<String>
|
||||
@@ -35,19 +35,19 @@ typealias FunctionalType = () -> Unit
|
||||
typealias SimpleType = Int
|
||||
|
||||
fun referToAliasedGeneric(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is GenericString)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToAliasedFunctionType(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is FunctionalType)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToAliasedSimpleType(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is SimpleType)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
Vendored
+14
-14
@@ -5,29 +5,29 @@
|
||||
import kotlin.contracts.*
|
||||
|
||||
inline fun <reified T> referToReifiedGeneric(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is T)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
class Generic<T> {
|
||||
fun referToCaptured(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is T)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
}
|
||||
|
||||
fun referToSubstituted(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is Generic<String>)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToSubstitutedWithStar(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is Generic<*>)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
typealias GenericString = Generic<String>
|
||||
@@ -35,19 +35,19 @@ typealias FunctionalType = () -> Unit
|
||||
typealias SimpleType = Int
|
||||
|
||||
fun referToAliasedGeneric(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is GenericString)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToAliasedFunctionType(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is FunctionalType)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
|
||||
fun referToAliasedSimpleType(x: Any?) {
|
||||
contract {
|
||||
<!WRONG_IMPLIES_CONDITION!>contract {
|
||||
returns() implies (x is SimpleType)
|
||||
}
|
||||
}<!>
|
||||
}
|
||||
Reference in New Issue
Block a user