@@ -3,7 +3,6 @@ package com.github.codeql
3
3
import com.github.codeql.comments.CommentExtractor
4
4
import com.github.codeql.utils.*
5
5
import com.github.codeql.utils.versions.functionN
6
- import com.github.codeql.utils.versions.getIrStubFromDescriptor
7
6
import com.github.codeql.utils.versions.isUnderscoreParameter
8
7
import com.semmle.extractor.java.OdasaOutput
9
8
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
@@ -1788,7 +1787,8 @@ open class KotlinFileExtractor(
1788
1787
1789
1788
private fun extractCall (c : IrCall , callable : Label <out DbCallable >, stmtExprParent : StmtExprParent ) {
1790
1789
with (" call" , c) {
1791
- val target = tryReplaceSyntheticFunction(c.symbol.owner)
1790
+ val owner = getBoundSymbolOwner(c.symbol, c) ? : return
1791
+ val target = tryReplaceSyntheticFunction(owner)
1792
1792
1793
1793
// The vast majority of types of call want an expr context, so make one available lazily:
1794
1794
val exprParent by lazy {
@@ -2965,15 +2965,7 @@ open class KotlinFileExtractor(
2965
2965
tw.writeCallableEnclosingExpr(id, callable)
2966
2966
tw.writeStatementEnclosingExpr(id, exprParent.enclosingStmt)
2967
2967
2968
- val owner = if (e.symbol.isBound) {
2969
- e.symbol.owner
2970
- }
2971
- else {
2972
- logger.warnElement(" Unbound enum value, trying to use enum entry stub from descriptor" , e)
2973
-
2974
- @OptIn(ObsoleteDescriptorBasedAPI ::class )
2975
- getIrStubFromDescriptor() { it.generateEnumEntryStub(e.symbol.descriptor) }
2976
- } ? : return
2968
+ val owner = getBoundSymbolOwner(e.symbol, e) ? : return
2977
2969
2978
2970
val vId = useEnumEntry(owner)
2979
2971
tw.writeVariableBinding(id, vId)
@@ -3150,15 +3142,7 @@ open class KotlinFileExtractor(
3150
3142
// automatically-generated `public static final MyObject INSTANCE`
3151
3143
// field that we are accessing here.
3152
3144
val exprParent = parent.expr(e, callable)
3153
- val c = if (e.symbol.isBound) {
3154
- e.symbol.owner
3155
- }
3156
- else {
3157
- logger.warnElement(" Unbound object value, trying to use class stub from descriptor" , e)
3158
-
3159
- @OptIn(ObsoleteDescriptorBasedAPI ::class )
3160
- getIrStubFromDescriptor() { it.generateClassStub(e.symbol.descriptor) }
3161
- } ? : return
3145
+ val c = getBoundSymbolOwner(e.symbol, e) ? : return
3162
3146
3163
3147
val instance = if (c.isCompanion) useCompanionObjectClassInstance(c) else useObjectClassInstance(c)
3164
3148
@@ -3271,6 +3255,15 @@ open class KotlinFileExtractor(
3271
3255
}
3272
3256
}
3273
3257
3258
+ private inline fun <D : DeclarationDescriptor , reified B : IrSymbolOwner > getBoundSymbolOwner (symbol : IrBindableSymbol <D , B >, e : IrExpression ): B ? {
3259
+ if (symbol.isBound) {
3260
+ return symbol.owner
3261
+ }
3262
+
3263
+ logger.errorElement(" Unbound symbol found, skipping extraction of expression" , e)
3264
+ return null
3265
+ }
3266
+
3274
3267
private fun extractSuperAccess (irType : IrType , callable : Label <out DbCallable >, parent : Label <out DbExprparent >, idx : Int , enclosingStmt : Label <out DbStmt >, locId : Label <out DbLocation >) =
3275
3268
tw.getFreshIdLabel<DbSuperaccess >().also {
3276
3269
val type = useType(irType)
0 commit comments