mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Fix build for Kotlin 2.2.0
This commit is contained in:
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.*
|
||||
@@ -1619,9 +1618,7 @@ open class KotlinFileExtractor(
|
||||
// (NB. kotlinc's actual implementation strategy is different -- it makes an inner class
|
||||
// called InterfaceWithDefault$DefaultImpls and stores the default methods
|
||||
// there to allow default method usage in Java < 8, but this is hopefully niche.
|
||||
!jvmDefaultModeEnabledIsEnabled(
|
||||
pluginContext.languageVersionSettings
|
||||
.getFlag(JvmAnalysisFlags.jvmDefaultMode)) &&
|
||||
!jvmDefaultModeEnabledIsEnabled(getJvmDefaultMode(pluginContext.languageVersionSettings)) &&
|
||||
f.parentClassOrNull.let {
|
||||
it != null &&
|
||||
it.origin != IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB &&
|
||||
@@ -6011,11 +6008,7 @@ open class KotlinFileExtractor(
|
||||
is IrGetValue -> {
|
||||
val exprParent = parent.expr(e, callable)
|
||||
val owner = e.symbol.owner
|
||||
if (
|
||||
owner is IrValueParameter &&
|
||||
owner.index == -1 &&
|
||||
!owner.isExtensionReceiver()
|
||||
) {
|
||||
if (owner is IrValueParameter && isDispatchReceiver(owner)) {
|
||||
extractThisAccess(e, owner.parent, exprParent, callable)
|
||||
} else {
|
||||
val isAnnotationClassParameter =
|
||||
@@ -6966,11 +6959,6 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun IrValueParameter.isExtensionReceiver(): Boolean {
|
||||
val parentFun = parent as? IrFunction ?: return false
|
||||
return parentFun.extensionReceiverParameter == this
|
||||
}
|
||||
|
||||
private open inner class GeneratedClassHelper(
|
||||
protected val locId: Label<DbLocation>,
|
||||
protected val ids: GeneratedClassLabels
|
||||
|
||||
@@ -2136,7 +2136,7 @@ open class KotlinUsesExtractor(
|
||||
}
|
||||
val parentId = parent ?: overriddenParentAttributes?.id ?: useDeclarationParentOf(vp, false)
|
||||
|
||||
val idxBase = overriddenParentAttributes?.valueParameters?.indexOf(vp) ?: vp.index
|
||||
val idxBase = overriddenParentAttributes?.valueParameters?.indexOf(vp) ?: parameterIndexExcludingReceivers(vp)
|
||||
val idxOffset =
|
||||
if (
|
||||
declarationParent is IrFunction &&
|
||||
|
||||
@@ -2,12 +2,18 @@ package com.github.codeql.comments
|
||||
|
||||
import com.github.codeql.*
|
||||
import com.github.codeql.utils.isLocalFunction
|
||||
import com.github.codeql.utils.versions.isDispatchReceiver
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.util.parentClassOrNull
|
||||
|
||||
private fun IrValueParameter.isExtensionReceiver(): Boolean {
|
||||
val parentFun = parent as? IrFunction ?: return false
|
||||
return parentFun.extensionReceiverParameter == this
|
||||
}
|
||||
|
||||
open class CommentExtractor(
|
||||
protected val fileExtractor: KotlinFileExtractor,
|
||||
protected val file: IrFile,
|
||||
@@ -19,7 +25,7 @@ open class CommentExtractor(
|
||||
protected fun getLabel(element: IrElement): Label<out DbTop>? {
|
||||
if (element == file) return fileLabel
|
||||
|
||||
if (element is IrValueParameter && element.index == -1) {
|
||||
if (element is IrValueParameter && (isDispatchReceiver(element) || element.isExtensionReceiver())) {
|
||||
// Don't attribute comments to the implicit `this` parameter of a function.
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.github.codeql.utils
|
||||
|
||||
import com.github.codeql.utils.versions.IrVisitor
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.util.isFakeOverride
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
|
||||
class IrVisitorLookup(
|
||||
private val psi2Ir: Psi2IrFacade,
|
||||
private val psi: PsiElement,
|
||||
private val file: IrFile
|
||||
) : IrElementVisitor<Unit, MutableCollection<IrElement>> {
|
||||
) : IrVisitor<Unit, MutableCollection<IrElement>>() {
|
||||
private val location = psi.getLocation()
|
||||
|
||||
override fun visitElement(element: IrElement, data: MutableCollection<IrElement>): Unit {
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
typealias IrLazyFunction = org.jetbrains.kotlin.ir.declarations.lazy.IrLazyFunction
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
abstract class IrVisitor<R, D> : org.jetbrains.kotlin.ir.visitors.IrElementVisitor<R, D>
|
||||
abstract class IrVisitorVoid : org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.config.JvmAnalysisFlags
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
|
||||
fun getJvmDefaultMode(lvs: LanguageVersionSettings) =
|
||||
lvs.getFlag(JvmAnalysisFlags.jvmDefaultMode)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
|
||||
fun isDispatchReceiver(p: IrValueParameter) = p.index == -1 && p != (p.parent as? IrFunction)?.extensionReceiverParameter
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
|
||||
fun parameterIndexExcludingReceivers(vp: IrValueParameter) = vp.index
|
||||
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
|
||||
@@ -43,7 +42,7 @@ class CommentExtractorLighterAST(
|
||||
|
||||
val kDocOwners = mutableMapOf<Int, MutableList<IrElement>>()
|
||||
val visitor =
|
||||
object : IrElementVisitorVoid {
|
||||
object : IrVisitorVoid() {
|
||||
override fun visitElement(element: IrElement) {
|
||||
val metadata = (element as? IrMetadataSourceOwner)?.metadata
|
||||
val sourceElement = (metadata as? FirMetadataSource)?.fir?.source
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
typealias IrLazyFunction = org.jetbrains.kotlin.psi2ir.lazy.IrLazyFunction
|
||||
@@ -0,0 +1,4 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
typealias IrVisitor<R, D> = org.jetbrains.kotlin.ir.visitors.IrVisitor<R, D>
|
||||
typealias IrVisitorVoid = org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.util.createThisReceiverParameter
|
||||
|
||||
fun IrClass.createImplicitParameterDeclarationWithWrappedDescriptor() =
|
||||
this.createThisReceiverParameter()
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.config.jvmDefaultMode
|
||||
|
||||
fun getJvmDefaultMode(lvs: LanguageVersionSettings) =
|
||||
lvs.jvmDefaultMode
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
import org.jetbrains.kotlin.ir.declarations.IrParameterKind
|
||||
|
||||
fun isDispatchReceiver(p: IrValueParameter) = p.kind == IrParameterKind.DispatchReceiver
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.github.codeql.utils.versions
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
|
||||
fun parameterIndexExcludingReceivers(vp: IrValueParameter): Int {
|
||||
val offset =
|
||||
(vp.parent as? IrFunction)?.let { (if (it.extensionReceiverParameter != null) 1 else 0) + (if (it.dispatchReceiverParameter != null) 1 else 0) } ?: 0
|
||||
return vp.indexInParameters - offset
|
||||
}
|
||||
Reference in New Issue
Block a user