[IR] Add descriptive error message instead of NPE

This commit is contained in:
Roman Artemev
2021-10-01 15:30:58 +03:00
committed by TeamCityServer
parent 23cba59b90
commit f3035ac78e
@@ -10,7 +10,10 @@ import org.jetbrains.kotlin.ir.builders.createTmpVariable
import org.jetbrains.kotlin.ir.builders.irGet
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrGetValue
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.types.IrType
@@ -19,6 +22,7 @@ import org.jetbrains.kotlin.ir.types.isNothing
import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.isTrivial
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.util.OperatorNameConventions
@@ -105,7 +109,8 @@ internal fun IrExpression.castIfNecessary(targetClass: IrClass) =
this
} else {
val numberCastFunctionName = Name.identifier("to${targetClass.name.asString()}")
val castFun = type.getClass()!!.functions.single {
val classifier = type.getClass() ?: error("Has to be a class ${type.render()}")
val castFun = classifier.functions.single {
it.name == numberCastFunctionName &&
it.dispatchReceiverParameter != null && it.extensionReceiverParameter == null && it.valueParameters.isEmpty()
}