[FIR] Resolve elvis call as special synthetic call

Before that commit we desugared `a ?: b` as

when (val elvis = a) {
    null -> b
    else -> elvis
}

It was incorrect, because `a` should be resolved in dependent mode,
  but when it was `elvis` initializer it was resolved in independent
  mode, so we can't infer type for `a` in some complex cases
This commit is contained in:
Dmitriy Novozhilov
2020-06-30 15:31:24 +03:00
parent b49b3245af
commit 102c9c08d0
48 changed files with 1560 additions and 1828 deletions
@@ -9,20 +9,28 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
object SyntheticCallableId {
private val syntheticPackageName: FqName = FqName("_synthetic")
val WHEN = CallableId(
FqName("_synthetic"),
syntheticPackageName,
Name.identifier("WHEN_CALL")
)
val TRY = CallableId(
FqName("_synthetic"),
syntheticPackageName,
Name.identifier("TRY_CALL")
)
val CHECK_NOT_NULL = CallableId(
FqName("_synthetic"),
syntheticPackageName,
Name.identifier("CHECK_NOT_NULL_CALL")
)
val ELVIS_NOT_NULL = CallableId(
syntheticPackageName,
Name.identifier("ELVIS_CALL")
)
val ID = CallableId(
FqName("_synthetic"),
syntheticPackageName,
Name.identifier("ID_CALL")
)
}