Skip to content

Commit 9723044

Browse files
Kotlin 2.4.0: Fix value argument indexing in compat layer
In 2.4.0, IrMemberAccessExpression.arguments includes all parameters (dispatch receiver, extension receiver, and regular value args). The old getValueArgument/putValueArgument/valueArgumentsCount APIs indexed only value arguments. Fix the compat layer to apply the correct offset when translating between the old index-based API and the new unified arguments list. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent e21bc4d commit 9723044

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

  • java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0

java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,23 @@ val IrFunction.codeQlValueParameters: List<IrValueParameter>
2626
val IrFunction.codeQlExtensionReceiverParameter: IrValueParameter?
2727
get() = parameters.firstOrNull { it.kind == org.jetbrains.kotlin.ir.declarations.IrParameterKind.ExtensionReceiver }
2828

29+
// Helper: get the offset of value arguments in the arguments list
30+
// In 2.4.0, arguments[] includes dispatch/extension receivers before regular params
31+
private fun IrMemberAccessExpression<*>.valueArgumentOffset(): Int {
32+
val owner = symbol.owner as? IrFunction ?: return 0
33+
return owner.parameters.count { it.kind != org.jetbrains.kotlin.ir.declarations.IrParameterKind.Regular }
34+
}
35+
2936
// IrMemberAccessExpression: valueArgumentsCount
3037
val IrMemberAccessExpression<*>.codeQlValueArgumentsCount: Int
31-
get() = arguments.size
38+
get() = arguments.size - valueArgumentOffset()
3239

3340
// IrMemberAccessExpression: getValueArgument
34-
fun IrMemberAccessExpression<*>.codeQlGetValueArgument(index: Int): IrExpression? = arguments[index]
41+
fun IrMemberAccessExpression<*>.codeQlGetValueArgument(index: Int): IrExpression? = arguments[index + valueArgumentOffset()]
3542

3643
// IrMemberAccessExpression: putValueArgument
3744
fun IrMemberAccessExpression<*>.codeQlPutValueArgument(index: Int, value: IrExpression?) {
38-
arguments[index] = value
45+
arguments[index + valueArgumentOffset()] = value
3946
}
4047

4148
// IrMemberAccessExpression: extensionReceiver

0 commit comments

Comments
 (0)