896fbbd1a3
Helps fixing to more specific type in the following situations: Type1 <: Var1 Var2 <: Var1 Var2 <: Type2 Type1 and Type2 may also be nullable and non-nullable versions of the same type. Note that no additional constraints can be inferred from such constraints before fixation. Resulting types for variables will always Type1 and Type2 may also be nullable and non-nullable versions of the same type. Fixing Var1 first will make Var2's type more specific while fixing Var2 first will make Var1's type less specific. The first is preferrable in general.
FIR Analysis tests
Mostly, format of FIR analysis test is the same as the one described at compiler/testData/diagnostics/ReadMe.md.
DEBUG_INFO_EXPRESSION_TYPE and DEBUG_INFO_CALL are also partially supported but need to be written out explicitly in a test data file:
fun foo(
x1: String,
x2: Collection<CharSequence>,
x3: MutableMap<out CharSequence, in MutableList<*>>
) {
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>x1<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.Collection<kotlin.CharSequence>")!>x2<!>
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.collections.MutableMap<out kotlin.CharSequence, in kotlin.collections.MutableList<*>>")!>x3<!>
}
interface B {
operator fun invoke(x: Int): String
}
class A {
fun foo(x: Int) {
fun baz(x: Double) {}
<!DEBUG_INFO_CALL("fqName: A.foo.baz; typeCall: function")!>baz(1.0)<!>
}
val bar: B = TODO()
}
fun A.foo(x: String) {}
fun main() {
fun A.foo(x: Double) {}
val a = A()
a.<!DEBUG_INFO_CALL("fqName: A.foo; typeCall: function")!>foo(1)<!>
a.<!DEBUG_INFO_CALL("fqName: foo; typeCall: extension function")!>foo("")<!>
a.<!DEBUG_INFO_CALL("fqName: main.foo; typeCall: extension function")!>foo(1.0)<!>
a.<!DEBUG_INFO_CALL("fqName: B.invoke; typeCall: variable&invoke")!>bar(1)<!>
}
Specific Directives
// FIR_IDENTICALshould be prepended in a.ktfile of an old diagnostic test when analysis result of old FE and FIR are the same// FIR_IGNOREshould be prepended in a.fir.ktfile of an old diagnostic test known to fail with exception// !DUMP_CFGgenerates.dotfile with rendered data flow graph (see comment atorg.jetbrains.kotlin.fir.AbstractFirDiagnosticsTest)