mirror of
https://github.com/github/codeql.git
synced 2026-05-02 20:25:13 +02:00
Merge pull request #9174 from tamasvajk/kotlin-fix-isUnspecialised
Kotlin: Fix parent class lookup from field initializers in `isUnspecialised`
This commit is contained in:
@@ -4,6 +4,7 @@ import com.github.codeql.KotlinUsesExtractor
|
||||
import com.github.codeql.getJavaEquivalentClassId
|
||||
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
|
||||
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
|
||||
import org.jetbrains.kotlin.backend.common.lower.parents
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
|
||||
fun IrType.substituteTypeArguments(params: List<IrTypeParameter>, arguments: List<IrTypeArgument>) =
|
||||
when(this) {
|
||||
@@ -219,12 +221,13 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
|
||||
} ?: false
|
||||
}
|
||||
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
|
||||
val parent = paramsContainer.parent as? IrTypeParametersContainer
|
||||
|
||||
val parentClass = paramsContainer.parents.firstIsInstanceOrNull<IrClass>()
|
||||
|
||||
val parentUnspecialised = when {
|
||||
remainingArgs.isEmpty() -> true
|
||||
parent == null -> false
|
||||
parent !is IrClass -> false
|
||||
else -> isUnspecialised(paramsContainer.parentAsClass, remainingArgs)
|
||||
parentClass == null -> false
|
||||
else -> isUnspecialised(parentClass, remainingArgs)
|
||||
}
|
||||
return unspecialisedHere && parentUnspecialised
|
||||
}
|
||||
|
||||
8
java/ql/test/kotlin/library-tests/classes/diags.ql
Normal file
8
java/ql/test/kotlin/library-tests/classes/diags.ql
Normal file
@@ -0,0 +1,8 @@
|
||||
import semmle.code.java.Diagnostics
|
||||
|
||||
from Diagnostic d
|
||||
where d.getSeverity() > 2
|
||||
select d, d.getGeneratedBy(), d.getSeverity(), d.getTag(), d.getMessage(),
|
||||
d.getFullMessage()
|
||||
.regexpReplaceAll("^\\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2} K\\] ",
|
||||
"[DATE TIME K] ")
|
||||
Reference in New Issue
Block a user