Skip to content

Commit 3b07fe7

Browse files
authored
Merge pull request #9174 from tamasvajk/kotlin-fix-isUnspecialised
Kotlin: Fix parent class lookup from field initializers in `isUnspecialised`
2 parents 7abb755 + d4cf877 commit 3b07fe7

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.github.codeql.KotlinUsesExtractor
44
import com.github.codeql.getJavaEquivalentClassId
55
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
66
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
7+
import org.jetbrains.kotlin.backend.common.lower.parents
78
import org.jetbrains.kotlin.descriptors.ClassKind
89
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
910
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
2728
import org.jetbrains.kotlin.name.FqName
2829
import org.jetbrains.kotlin.name.Name
2930
import org.jetbrains.kotlin.types.Variance
31+
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
3032

3133
fun IrType.substituteTypeArguments(params: List<IrTypeParameter>, arguments: List<IrTypeArgument>) =
3234
when(this) {
@@ -219,12 +221,13 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
219221
} ?: false
220222
}
221223
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
222-
val parent = paramsContainer.parent as? IrTypeParametersContainer
224+
225+
val parentClass = paramsContainer.parents.firstIsInstanceOrNull<IrClass>()
226+
223227
val parentUnspecialised = when {
224228
remainingArgs.isEmpty() -> true
225-
parent == null -> false
226-
parent !is IrClass -> false
227-
else -> isUnspecialised(paramsContainer.parentAsClass, remainingArgs)
229+
parentClass == null -> false
230+
else -> isUnspecialised(parentClass, remainingArgs)
228231
}
229232
return unspecialisedHere && parentUnspecialised
230233
}

java/ql/test/kotlin/library-tests/classes/diags.expected

Whitespace-only changes.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import semmle.code.java.Diagnostics
2+
3+
from Diagnostic d
4+
where d.getSeverity() > 2
5+
select d, d.getGeneratedBy(), d.getSeverity(), d.getTag(), d.getMessage(),
6+
d.getFullMessage()
7+
.regexpReplaceAll("^\\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} K\\] ",
8+
"[DATE TIME K] ")

0 commit comments

Comments
 (0)