FIR. Refactor smart-cast representation in FIR tree

Make smart-casts non-transparent expression without delegation
to underlying FirQualifiedAccessExpression, as children delegation in
fir tree has unclear semantics
Remove two different kinds of tree nodes for smart-casts
This commit is contained in:
Simon Ogorodnik
2022-08-02 00:49:24 +02:00
committed by teamcity
parent bc9db58b3c
commit 513af2dfbc
154 changed files with 9573 additions and 9320 deletions
@@ -0,0 +1,7 @@
fun test(obj: Any): String {
return when {
obj !is Iterable<*> -> "not iterable"
<expr>obj</expr> !is Collection<*> -> "not collection"
else -> "unknown"
}
}
@@ -0,0 +1,14 @@
KtSuccessCallInfo:
call = KtSimpleVariableAccessCall:
partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
dispatchReceiver = null
extensionReceiver = null
signature = KtVariableLikeSignature:
name = obj
receiverType = null
returnType = kotlin.Any
symbol = obj: kotlin.Any
callableIdIfNonLocal = null
simpleAccess = Read:
typeArgumentsMapping = {}
@@ -0,0 +1,18 @@
interface Foo {
fun Bar.foo()
}
interface Bar {}
inline fun <T, R> myWith(argument: T, lambda: T.() -> R): R {
argument.lambda()
}
fun Any.action(other: Any) {
if (this is Foo) {
with(other) {
this as Bar
<expr>foo</expr>()
}
}
}
@@ -0,0 +1,7 @@
expression: foo
isStable: null
smartCastType: null
receiver: DISPATCH
smartCastType: Foo
receiver: EXTENSION
smartCastType: Bar