Remove nullability assertions from special bridge call arguments

This commit is contained in:
Dmitry Petrov
2019-12-23 17:02:30 +03:00
parent fabeca5955
commit cdf9ef63ba
2 changed files with 12 additions and 4 deletions
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrField import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
@@ -17,6 +18,7 @@ import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature
val jvmArgumentNullabilityAssertions = val jvmArgumentNullabilityAssertions =
makeIrFilePhase( makeIrFilePhase(
@@ -61,7 +63,7 @@ class JvmArgumentNullabilityAssertionsLowering(context: JvmBackendContext) :
extensionReceiver = extensionReceiver?.replaceImplicitNotNullWithArgument() extensionReceiver = extensionReceiver?.replaceImplicitNotNullWithArgument()
} }
if (isCallAssertionsDisabled) { if (isCallAssertionsDisabled || isValueArgumentForCallToMethodWithTypeCheckBarrier(expression)) {
for (i in 0 until expression.valueArgumentsCount) { for (i in 0 until expression.valueArgumentsCount) {
getValueArgument(i)?.let { irArgument -> getValueArgument(i)?.let { irArgument ->
putValueArgument(i, irArgument.replaceImplicitNotNullWithArgument()) putValueArgument(i, irArgument.replaceImplicitNotNullWithArgument())
@@ -239,5 +241,14 @@ class JvmArgumentNullabilityAssertionsLowering(context: JvmBackendContext) :
else else
this this
internal fun isValueArgumentForCallToMethodWithTypeCheckBarrier(expression: IrMemberAccessExpression): Boolean {
val descriptor = expression.symbol.descriptor
if (descriptor !is CallableMemberDescriptor) return false
val specialSignatureInfo = with(BuiltinMethodsWithSpecialGenericSignature) {
descriptor.getSpecialSignatureInfo()
}
return specialSignatureInfo?.isObjectReplacedWithTypeParameter ?: false
}
} }
} }
@@ -1,9 +1,6 @@
// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// ^ TODO: decide whether special bridges are part of "common Kotlin" or Kotlin/JVM
// FILE: J.java // FILE: J.java
import java.util.*; import java.util.*;