8000 Fix build for Kotlin 2.2.0 · github/codeql@a36fc30 · GitHub
[go: up one dir, main page]

Skip to content

Commit a36fc30

Browse files
committed
Fix build for Kotlin 2.2.0
1 parent 24feb51 commit a36fc30

16 files changed

+75
-20
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
2121
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
2222
import org.jetbrains.kotlin.ir.builders.declarations.*
2323
import org.jetbrains.kotlin.ir.declarations.*
24-
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
2524
import org.jetbrains.kotlin.ir.expressions.*
2625
import org.jetbrains.kotlin.ir.expressions.impl.*
2726
import org.jetbrains.kotlin.ir.symbols.*
@@ -1619,9 +1618,7 @@ open class KotlinFileExtractor(
16191618
// (NB. kotlinc's actual implementation strategy is different -- it makes an inner class
16201619
// called InterfaceWithDefault$DefaultImpls and stores the default methods
16211620
// there to allow default method usage in Java < 8, but this is hopefully niche.
1622-
!jvmDefaultModeEnabledIsEnabled(
1623-
pluginContext.languageVersionSettings
1624-
.getFlag(JvmAnalysisFlags.jvmDefaultMode)) &&
1621+
!jvmDefaultModeEnabledIsEnabled(getJvmDefaultMode(pluginContext.languageVersionSettings)) &&
16251622
f.parentClassOrNull.let {
16261623
it != null &&
16271624
it.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB &&
@@ -6011,11 +6008,7 @@ open class KotlinFileExtractor(
60116008
is IrGetValue -> {
60126009
val exprParent = parent.expr(e, callable)
60136010
val owner = e.symbol.owner
6014-
if (
6015-
owner is IrValueParameter &&
6016-
owner.index == -1 &&
6017-
!owner.isExtensionReceiver()
6018-
) {
6011+
if (owner is IrValueParameter && isDispatchReceiver(owner)) {
60196012
extractThisAccess(e, owner.parent, exprParent, callable)
60206013
} else {
60216014
val isAnnotationClassParameter =
@@ -6966,11 +6959,6 @@ open class KotlinFileExtractor(
69666959
}
69676960
}
69686961

6969-
private fun IrValueParameter.isExtensionReceiver(): Boolean {
6970-
val parentFun = parent as? IrFunction ?: return false
6971-
return parentFun.extensionReceiverParameter == this
6972-
}
6973-
69746962
private open inner class GeneratedClassHelper(
69756963
protected val locId: Label<DbLocation>,
69766964
protected val ids: GeneratedClassLabels

java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2136,7 +2136,7 @@ open class KotlinUsesExtractor(
21362136
}
21372137
val parentId = parent ?: overriddenParentAttributes?.id ?: useDeclarationParentOf(vp, false)
21382138

2139-
val idxBase = overriddenParentAttributes?.valueParameters?.indexOf(vp) ?: vp.index
2139+
val idxBase = overriddenParentAttributes?.valueParameters?.indexOf(vp) ?: parameterIndexExcludingReceivers(vp)
21402140
val idxOffset =
21412141
if (
21422142
declarationParent is IrFunction &&

java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@ package com.github.codeql.comments
22

33
import com.github.codeql.*
44
import com.github.codeql.utils.isLocalFunction
5+
import com.github.codeql.utils.versions.isDispatchReceiver
56
import org.jetbrains.kotlin.ir.IrElement
67
import org.jetbrains.kotlin.ir.declarations.*
78
import org.jetbrains.kotlin.ir.expressions.IrBody
89
import org.jetbrains.kotlin.ir.expressions.IrExpression
910
import org.jetbrains.kotlin.ir.util.parentClassOrNull
1011

12+
private fun IrValueParameter.isExtensionReceiver(): Boolean {
13+
val parentFun = parent as? IrFunction ?: return false
14+
return parentFun.extensionReceiverParameter == this
15+
}
16+
1117
open class CommentExtractor(
1218
protected val fileExtractor: KotlinFileExtractor,
1319
protected val file: IrFile,
@@ -19,7 +25,7 @@ open class CommentExtractor(
1925
protected fun getLabel(element: IrElement): Label<out DbTop>? {
2026
if (element == file) return fileLabel
2127

22-
if (element is IrValueParameter && element.index == -1) {
28+
if (element is IrValueParameter && (isDispatchReceiver(element) || element.isExtensionReceiver())) {
2329
// Don't attribute comments to the implicit `this` parameter of a function.
2430
return null
2531
}

java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.github.codeql.utils
22

3+
import com.github.codeql.utils.versions.IrVisitor
34
import com.intellij.psi.PsiElement
45
import org.jetbrains.kotlin.ir.IrElement
56
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
67
import org.jetbrains.kotlin.ir.declarations.IrFile
78
import org.jetbrains.kotlin.ir.util.isFakeOverride
8-
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
99

1010
class IrVisitorLookup(
1111
private val psi2Ir: Psi2IrFacade,
1212
private val psi: PsiElement,
1313
private val file: IrFile
14-
) : IrElementVisitor<Unit, MutableCollection<IrElement>> {
14+
) : IrVisitor<Unit, MutableCollection<IrElement>>() {
1515
private val location = psi.getLocation()
1616

1717
override fun visitElement(element: IrElement, data: MutableCollection<IrElement>): Unit {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.github.codeql.utils.versions
2+
3+
typealias IrLazyFunction = org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.github.codeql.utils.versions
2+
3+
abstract class IrVisitor<R, D> : org.jetbrains.kotlin.ir.visitors.IrElementVisitor<R, D>
4+
abstract class IrVisitorVoid : org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.config.JvmAnalysisFlags
4+
import org.jetbrains.kotlin.config.LanguageVersionSettings
5+
6+
fun getJvmDefaultMode(lvs: LanguageVersionSettings) =
7+
lvs.getFlag(JvmAnalysisFlags.jvmDefaultMode)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.ir.declarations.IrFunction
4+
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
5+
6+
fun isDispatchReceiver(p: IrValueParameter) = p.index == -1 && p != (p.parent as? IrFunction)?.extensionReceiverParameter
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
4+
5+
fun parameterIndexExcludingReceivers(vp: IrValueParameter) = vp.index

java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_9_0-Beta/CommentExtractorLighterAST.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.ir.IrElement
99
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
1010
import org.jetbrains.kotlin.ir.declarations.*
1111
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
12-
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
1312
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
1413
import org.jetbrains.kotlin.ir.visitors.acceptVoid
1514
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
@@ -43,7 +42,7 @@ class CommentExtractorLighterAST(
4342

4443
val kDocOwners = mutableMapOf<Int, MutableList<IrElement>>()
4544
val visitor =
46-
object : IrElementVisitorVoid {
45+
object : IrVisitorVoid() {
4746
override fun visitElement(element: IrElement) {
4847
val metadata = (element as? IrMetadataSourceOwner)?.metadata
4948
val sourceElement = (metadata as? FirMetadataSource)?.fir?.source
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.github.codeql.utils.versions
2+
3+
typealias IrLazyFunction = org.jetbrains.kotlin.psi2ir.lazy.IrLazyFunction
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.github.codeql.utils.versions
2+
3+
typealias IrVisitor<R, D> = org.jetbrains.kotlin.ir.visitors.IrVisitor<R, D>
4+
typealias IrVisitorVoid = org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.ir.declarations.IrClass
4+
import org.jetbrains.kotlin.ir.util.createThisReceiverParameter
5+
6+
fun IrClass.createImplicitParameterDeclarationWithWrappedDescriptor() =
7+
this.createThisReceiverParameter()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.config.LanguageVersionSettings
4+
import org.jetbrains.kotlin.config.jvmDefaultMode
5+
6+
fun getJvmDefaultMode(lvs: LanguageVersionSettings) =
7+
lvs.jvmDefaultMode
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
4+
import org.jetbrains.kotlin.ir.declarations.IrParameterKind
5+
6+
fun isDispatchReceiver(p: IrValueParameter) = p.kind == IrParameterKind.DispatchReceiver
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.github.codeql.utils.versions
2+
3+
import org.jetbrains.kotlin.ir.declarations.IrFunction
4+
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
5+
6+
fun parameterIndexExcludingReceivers(vp: IrValueParameter): Int {
7+
val offset =
8+
(vp.parent as? IrFunction)?.let { (if (it.extensionReceiverParameter != null) 1 else 0) + (if (it.dispatchReceiverParameter != null) 1 else 0) } ?: 0
9+
return vp.indexInParameters - offset
10+
}

0 commit comments

Comments
 (0)
0