[FIR] Narrow down range of NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER

This uses the same approach as
INFERRED_TYPE_VARIABLE_INTO_EMPTY_INTERSECTION where we use a visitor
to find a call to a symbol that contains the type variable in question.

#KT-56140 Fixed
This commit is contained in:
Kirill Rakhman
2023-09-22 11:25:51 +02:00
committed by Space Team
parent 4690a430f4
commit fbf68a5bcc
44 changed files with 105 additions and 223 deletions
@@ -1,20 +0,0 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun <E> emptyList(): List<E> = TODO()
data class IntervalTree(
val left: IntervalTree?,
val right: IntervalTree?,
val intervals: List<Interval>,
val median: Float
)
class Interval
fun buildTree(segments: List<Interval>): IntervalTree? = TODO()
fun acquireIntervals(): List<Interval> = TODO()
fun main() {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>buildTree(acquireIntervals())
?: emptyList()<!>
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun <E> emptyList(): List<E> = TODO()
@@ -6,19 +6,19 @@ fun <K> id(arg: K): K = arg
fun test() {
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)!!
<!UNRESOLVED_REFERENCE!>unresolved<!>!!<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try {
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>try {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>)
} catch (e: Exception) {
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
}<!>
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (true)
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>if (true)
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>)
else
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
when {
true -> id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
}
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id(<!UNRESOLVED_REFERENCE!>unresolved<!>) ?: id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(<!UNRESOLVED_REFERENCE!>unresolved<!>) ?: id(<!UNRESOLVED_REFERENCE!>unresolved<!>)<!>
}
@@ -3,11 +3,11 @@ fun <K> id(arg: K): K = arg
fun <M> materialize(): M = TODO()
fun test(b: Boolean) {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(if (b) {
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>id<!>(if (b) {
id(<!UNRESOLVED_REFERENCE!>unresolved<!>)
} else {
id(
materialize()
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>materialize<!>()
)
})
}
@@ -12,7 +12,7 @@ fun <T> emptyList() : List<T>? = ArrayList<T>()
fun foo() {
// type arguments shouldn't be required
val l : List<Int> = emptyList()!!
val l1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList()!!<!>
val l1 = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!><!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>()!!<!>
checkSubtype<List<Int>>(emptyList()!!)
checkSubtype<List<Int>?>(emptyList())