KT-52743 IR: Fix null checks in Elvis operators
This commit is contained in:
committed by
teamcity
parent
ed97e73129
commit
3766698081
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.util.dump
|
||||
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||
import org.jetbrains.kotlin.ir.util.isTrivial
|
||||
import org.jetbrains.kotlin.ir.util.isConstantLike
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
@@ -121,7 +121,7 @@ class JvmSafeCallChainFoldingLowering(val context: JvmBackendContext) : FileLowe
|
||||
IrConstImpl.boolean(startOffset, endOffset, context.irBuiltIns.booleanType, false)
|
||||
|
||||
private fun irValNotNull(startOffset: Int, endOffset: Int, irVariable: IrVariable): IrExpression =
|
||||
if (irVariable.type.isJvmNullable() || irVariable.initializer?.isTrivial() != true)
|
||||
if (irVariable.type.isJvmNullable() || irVariable.initializer?.isConstantLike != true)
|
||||
IrGetValueImpl(startOffset, endOffset, irVariable.symbol).irEqEqNull().irNot()
|
||||
else
|
||||
irTrue(startOffset, endOffset)
|
||||
|
||||
@@ -596,6 +596,10 @@ fun IrExpression.isTrivial() =
|
||||
this is IrGetObjectValue ||
|
||||
this is IrErrorExpressionImpl
|
||||
|
||||
val IrExpression.isConstantLike: Boolean
|
||||
get() = this is IrConst<*> || this is IrGetSingletonValue
|
||||
|| this is IrGetValue && this.symbol.owner.origin == IrDeclarationOrigin.INSTANCE_RECEIVER
|
||||
|
||||
fun IrExpression.shallowCopy(): IrExpression =
|
||||
shallowCopyOrNull()
|
||||
?: error("Not a copyable expression: ${render()}")
|
||||
|
||||
Reference in New Issue
Block a user