Move checkNullability function in State.kt file
This commit is contained in:
+1
-1
@@ -252,7 +252,7 @@ class IrInterpreter(irModule: IrModuleFragment, private val bodyMap: Map<IdSigna
|
|||||||
(valueArguments[i] ?: defaultValues[i])?.interpret()?.check { return@newFrame it }
|
(valueArguments[i] ?: defaultValues[i])?.interpret()?.check { return@newFrame it }
|
||||||
?: stack.pushReturnValue(listOf<Any?>().toPrimitiveStateArray(expression.getVarargType(i)!!)) // if vararg is empty
|
?: stack.pushReturnValue(listOf<Any?>().toPrimitiveStateArray(expression.getVarargType(i)!!)) // if vararg is empty
|
||||||
|
|
||||||
if (stack.peekReturnValue().isNull() && !valueParametersSymbols[i].isNullable()) {
|
stack.peekReturnValue().checkNullability(valueParametersSymbols[i].owner.type) {
|
||||||
val method = irFunction.getCapitalizedFileName() + "." + irFunction.fqNameWhenAvailable
|
val method = irFunction.getCapitalizedFileName() + "." + irFunction.fqNameWhenAvailable
|
||||||
val parameter = valueParametersSymbols[i].owner.name
|
val parameter = valueParametersSymbols[i].owner.name
|
||||||
throw IllegalArgumentException("Parameter specified as non-null is null: method $method, parameter $parameter")
|
throw IllegalArgumentException("Parameter specified as non-null is null: method $method, parameter $parameter")
|
||||||
|
|||||||
-13
@@ -204,17 +204,4 @@ internal fun State?.getCorrectReceiverByFunction(irFunction: IrFunction): State?
|
|||||||
return generateSequence(original) { it.superClass }.firstOrNull { it.irClass.thisReceiver == other } ?: this
|
return generateSequence(original) { it.superClass }.firstOrNull { it.irClass.thisReceiver == other } ?: this
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun State.checkNullability(irType: IrType?): State {
|
|
||||||
if (irType !is IrSimpleType) return this
|
|
||||||
if (this.isNull() && !irType.hasQuestionMark) {
|
|
||||||
throw NullPointerException()
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
fun IrValueParameterSymbol.isNullable(): Boolean {
|
|
||||||
val type = this.owner.type as? IrSimpleType ?: return false
|
|
||||||
return type.isNullable()
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalize()
|
internal fun IrFunction.getCapitalizedFileName() = this.file.name.replace(".kt", "Kt").capitalize()
|
||||||
+11
@@ -56,3 +56,14 @@ internal fun State.isSubtypeOf(other: IrType): Boolean {
|
|||||||
|
|
||||||
return this.irClass.defaultType.isSubtypeOfClass(other.classOrNull!!)
|
return this.irClass.defaultType.isSubtypeOfClass(other.classOrNull!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method used to check if for not null parameter there was passed null argument.
|
||||||
|
*/
|
||||||
|
internal fun State.checkNullability(irType: IrType?, throwException: () -> Nothing = { throw NullPointerException() }): State {
|
||||||
|
if (irType !is IrSimpleType) return this
|
||||||
|
if (this.isNull() && !irType.isNullable()) {
|
||||||
|
throwException()
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user