JVM IR: Avoid IMPLICIT_NOTNULL checks on special bridge methods

...with dynamic type checks, except for the `@PlatformDependent`
methods, for which the JVM backend adds null checks.
This commit is contained in:
Steven Schäfer
2020-08-06 17:34:56 +02:00
committed by Alexander Udalov
parent 9026f89ba5
commit 0328fcaf5d
16 changed files with 369 additions and 4 deletions
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.ir.allOverridden
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -107,8 +108,14 @@ class SpecialBridgeMethods(val context: CommonBackendContext) {
val specialMethodNames = (specialMethodsWithDefaults + specialMethods).map { (description) -> description.name }.toHashSet()
val specialPropertyNames = specialProperties.map { (description) -> description.name }.toHashSet()
fun findSpecialWithOverride(irFunction: IrSimpleFunction): Pair<IrSimpleFunction, SpecialMethodWithDefaultInfo>? {
for (overridden in irFunction.allOverridden()) {
fun findSpecialWithOverride(
irFunction: IrSimpleFunction,
includeSelf: Boolean = false
): Pair<IrSimpleFunction, SpecialMethodWithDefaultInfo>? {
if (irFunction.parent !is IrClass)
return null
for (overridden in irFunction.allOverridden(includeSelf)) {
val description = overridden.toDescription()
specialMethodsWithDefaults[description]?.let {
return Pair(overridden, it)