mirror of
https://github.com/github/codeql.git
synced 2026-06-22 13:21:10 +02:00
Kotlin 2.4.0: Address peer review
* Update documentation to only claim support for 2.4.0x * Python test code; remove newlines between imports. * Sync comments between kotlin 1.8 and 1.9 * Update code comments to attach where actually relevant, and improve comments on IrMemberAccessExpression<*>.extensionReceiverParameterIndex()
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
Java,"Java 7 to 26 [6]_","javac (OpenJDK and Oracle JDK),
|
||||
|
||||
Eclipse compiler for Java (ECJ) [7]_",``.java``
|
||||
Kotlin,"Kotlin 1.8.0 to 2.4.\ *x*","kotlinc",``.kt``
|
||||
Kotlin,"Kotlin 1.8.0 to 2.4.0\ *x*","kotlinc",``.kt``
|
||||
JavaScript,ECMAScript 2022 or lower,Not applicable,"``.js``, ``.jsx``, ``.mjs``, ``.es``, ``.es6``, ``.htm``, ``.html``, ``.xhtm``, ``.xhtml``, ``.vue``, ``.hbs``, ``.ejs``, ``.njk``, ``.json``, ``.yaml``, ``.yml``, ``.raml``, ``.xml`` [8]_"
|
||||
Python [9]_,"2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13",Not applicable,``.py``
|
||||
Ruby [10]_,"up to 3.3",Not applicable,"``.rb``, ``.erb``, ``.gemspec``, ``Gemfile``"
|
||||
|
||||
@@ -28,6 +28,8 @@ abstract class Kotlin2ComponentRegistrar : ComponentRegistrar {
|
||||
|
||||
fun registerExtractorExtension(extension: IrGenerationExtension) {
|
||||
val p = project ?: throw IllegalStateException("registerExtractorExtension called before registerProjectComponents")
|
||||
// Register with LoadingOrder.LAST to ensure the extractor runs after other
|
||||
// IR generation plugins (like kotlinx.serialization) have generated their code.
|
||||
val extensionPoint = p.extensionArea.getExtensionPoint(IrGenerationExtension.extensionPointName)
|
||||
extensionPoint.registerExtension(extension, LoadingOrder.LAST, p)
|
||||
}
|
||||
|
||||
@@ -30,33 +30,36 @@ 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
|
||||
// In 2.4.0, arguments[] includes dispatch/extension receivers before regular params
|
||||
val IrMemberAccessExpression<*>.codeQlValueArgumentsCount: Int
|
||||
get() = arguments.size - valueArgumentOffset()
|
||||
|
||||
// IrMemberAccessExpression: getValueArgument
|
||||
// In 2.4.0, arguments[] includes dispatch/extension receivers before regular params
|
||||
fun IrMemberAccessExpression<*>.codeQlGetValueArgument(index: Int): IrExpression? = arguments[index + valueArgumentOffset()]
|
||||
|
||||
// IrMemberAccessExpression: putValueArgument
|
||||
// In 2.4.0, arguments[] includes dispatch/extension receivers before regular params
|
||||
fun IrMemberAccessExpression<*>.codeQlPutValueArgument(index: Int, value: IrExpression?) {
|
||||
arguments[index + valueArgumentOffset()] = value
|
||||
}
|
||||
|
||||
// IrMemberAccessExpression: extensionReceiver
|
||||
// For IrCall/IrFunctionReference, look at symbol.owner (IrFunction) directly.
|
||||
// For IrPropertyReference, symbol.owner is IrProperty; use the getter's parameters instead.
|
||||
// Re-add accessor for the extensionReceiver property removed in Kotlin 2.4.0.
|
||||
val IrMemberAccessExpression<*>.codeQlExtensionReceiver: IrExpression?
|
||||
get() {
|
||||
val erp = extensionReceiverParameterIndex() ?: return null
|
||||
return arguments[erp]
|
||||
}
|
||||
|
||||
// Find the argument index corresponding to the extension receiver parameter.
|
||||
// Calls and function references expose an IrFunction owner directly; property
|
||||
// references need to look through their getter or setter.
|
||||
private fun IrMemberAccessExpression<*>.extensionReceiverParameterIndex(): Int? {
|
||||
// Direct function owner (IrCall, IrFunctionReference, etc.)
|
||||
(symbol.owner as? IrFunction)?.codeQlExtensionReceiverParameter?.let {
|
||||
@@ -118,4 +121,3 @@ fun codeQlAnnotationFromSymbolOwner(
|
||||
|
||||
fun codeQlAnnotationFromSymbolOwner(type: IrType, symbol: IrConstructorSymbol): IrConstructorCall =
|
||||
IrAnnotationImpl.fromSymbolOwner(type, symbol)
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import pathlib
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import commands
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import commands
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import commands
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import commands
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user