54cca88279
When stdlib is represented as a source dependency (which seems to be the case in the `kotlin` project), it will be resolved lazily for the IDE. Same thing can happen if someone decides to "extend" the stdlib by declaring their declaration in the `kotlin` package In both of those cases, we need to make sure that receiver type is fully resolved before trying to get a `coneType` from it N.B. To make resolve tests work, I've added a separate folder `withAllowedKotlinPackage` to the `testData`, because in the default test setup it is not allowed to extend the `kotlin` package by user's definitions ^KT-50728 Fixed
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)