Remove nullability assertions from special bridge call arguments
This commit is contained in:
+12
-1
@@ -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.*;
|
||||||
|
|||||||
Reference in New Issue
Block a user