f90b29c2e3
Previously, PartialBodyResolveFilter didn't know about contracts and was
filtering out calls of such functions, leading to unstable completion in
cases like that:
fun test(x: Any?) {
require(x is String)
x.<caret>
}
However, PartialBodyResolveFilter works by pure PSI, while to determine
if function has a contract we have to resolve it.
To solve it, we do something very similar to what has been done with
Nothin-returning functions: introduce
KotlinProbablyContractedFunctionShortNameIndex, which collects all
function which *may* have a contract during indexing.
^KT-25275 Fixed
16 lines
223 B
Kotlin
Vendored
16 lines
223 B
Kotlin
Vendored
// COMPILER_ARGUMENTS: -XXLanguage:+ReadDeserializedContracts -XXLanguage:+UseReturnsEffect
|
|
|
|
interface Foo {
|
|
val x: Int
|
|
|
|
fun f()
|
|
}
|
|
|
|
fun test(x: Any?) {
|
|
require(x is Foo)
|
|
x.<caret>
|
|
}
|
|
|
|
// EXIST: x
|
|
// EXIST: f
|