diff --git a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt index 87fe52b3c29..1d010b0996c 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt @@ -26,16 +26,23 @@ val IrFunction.codeQlValueParameters: List val IrFunction.codeQlExtensionReceiverParameter: IrValueParameter? get() = parameters.firstOrNull { it.kind == org.jetbrains.kotlin.ir.declarations.IrParameterKind.ExtensionReceiver } +// Helper: get the offset of value arguments in the arguments list +// In 2.4.0, arguments[] includes dispatch/extension receivers before regular params +private fun IrMemberAccessExpression<*>.valueArgumentOffset(): Int { + val owner = symbol.owner as? IrFunction ?: return 0 + return owner.parameters.count { it.kind != org.jetbrains.kotlin.ir.declarations.IrParameterKind.Regular } +} + // IrMemberAccessExpression: valueArgumentsCount val IrMemberAccessExpression<*>.codeQlValueArgumentsCount: Int - get() = arguments.size + get() = arguments.size - valueArgumentOffset() // IrMemberAccessExpression: getValueArgument -fun IrMemberAccessExpression<*>.codeQlGetValueArgument(index: Int): IrExpression? = arguments[index] +fun IrMemberAccessExpression<*>.codeQlGetValueArgument(index: Int): IrExpression? = arguments[index + valueArgumentOffset()] // IrMemberAccessExpression: putValueArgument fun IrMemberAccessExpression<*>.codeQlPutValueArgument(index: Int, value: IrExpression?) { - arguments[index] = value + arguments[index + valueArgumentOffset()] = value } // IrMemberAccessExpression: extensionReceiver