mirror of
https://github.com/github/codeql.git
synced 2025-12-21 03:06:31 +01:00
Kotlin: Extract listOf(...)
This commit is contained in:
@@ -367,15 +367,27 @@ open class KotlinUsesExtractor(
|
||||
return UseClassInstanceResult(classLabel, extractClass)
|
||||
}
|
||||
|
||||
fun isExternalDeclaration(d: IrDeclaration): Boolean {
|
||||
return d.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
|
||||
d.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB
|
||||
}
|
||||
|
||||
fun extractClassLaterIfExternal(c: IrClass) {
|
||||
// we don't have an "external dependencies" extractor yet,
|
||||
// so for now we extract the source class for those too
|
||||
if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
|
||||
c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
|
||||
if (isExternalDeclaration(c)) {
|
||||
extractExternalClassLater(c)
|
||||
}
|
||||
}
|
||||
|
||||
fun extractExternalEnclosingClassLater(d: IrDeclaration) {
|
||||
val parent = d.parent
|
||||
when (parent) {
|
||||
is IrClass -> extractExternalClassLater(parent)
|
||||
is IrFunction -> extractExternalEnclosingClassLater(parent)
|
||||
is IrFile -> logger.warn(Severity.ErrorSevere, "extractExternalEnclosingClassLater but no enclosing class.")
|
||||
else -> logger.warn(Severity.ErrorSevere, "Unrecognised extractExternalEnclosingClassLater: " + d.javaClass)
|
||||
}
|
||||
}
|
||||
|
||||
fun extractExternalClassLater(c: IrClass) {
|
||||
dependencyCollector?.addDependency(c)
|
||||
externalClassExtractor.extractLater(c)
|
||||
@@ -633,7 +645,8 @@ class X {
|
||||
|
||||
val javaSignature = "an array" // TODO: Wrong
|
||||
val javaResult = TypeResult(id, javaSignature)
|
||||
val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, listOf(makeTypeProjection(componentType, Variance.INVARIANT)))
|
||||
val owner: IrClass = s.classifier.owner as IrClass
|
||||
val kotlinClassName = getUnquotedClassLabel(owner, listOf(makeTypeProjection(componentType, Variance.INVARIANT)))
|
||||
val kotlinSignature = "$javaSignature?" // TODO: Wrong
|
||||
val kotlinLabel = "@\"kt_type;nullable;${kotlinClassName}\""
|
||||
val kotlinId: Label<DbKt_nullable_type> = tw.getLabelFor(kotlinLabel, {
|
||||
@@ -712,6 +725,9 @@ class X {
|
||||
fun <T: DbCallable> useFunction(f: IrFunction): Label<out T> {
|
||||
val label = getFunctionLabel(f)
|
||||
val id: Label<T> = tw.getLabelFor(label)
|
||||
if(isExternalDeclaration(f)) {
|
||||
extractExternalEnclosingClassLater(f)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
@@ -1118,8 +1134,7 @@ open class KotlinFileExtractor(
|
||||
}
|
||||
|
||||
private fun extractObjectInitializerFunction(c: IrClass, parentId: Label<out DbReftype>) {
|
||||
if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB ||
|
||||
c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) {
|
||||
if (isExternalDeclaration(c)) {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user