mirror of
https://github.com/github/codeql.git
synced 2025-12-21 11:16:30 +01:00
Fix this and qualified this parameter extraction
This commit is contained in:
@@ -360,9 +360,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
|
||||
}
|
||||
}
|
||||
c.declarations.map { extractDeclaration(it, Optional.of(id)) }
|
||||
if (c.thisReceiver != null) {
|
||||
logger.warnElement(Severity.ErrorSevere, "'thisReceiver' is not extracted", c)
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
@@ -415,11 +412,22 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
|
||||
private fun getValueParameterLabel(vp: IrValueParameter) : String {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val parentId: Label<out DbMethod> = useDeclarationParent(vp.parent) as Label<out DbMethod>
|
||||
val idx = vp.index
|
||||
var idx = vp.index
|
||||
if (isQualifiedThis(vp)) {
|
||||
idx = -2
|
||||
}
|
||||
val label = "@\"params;{$parentId};$idx\""
|
||||
return label
|
||||
}
|
||||
|
||||
private fun isQualifiedThis(vp: IrValueParameter) : Boolean {
|
||||
val parent = vp.parent
|
||||
return vp.index == -1 &&
|
||||
parent is IrFunction &&
|
||||
parent.dispatchReceiverParameter == vp &&
|
||||
parent.extensionReceiverParameter != null
|
||||
}
|
||||
|
||||
fun useValueParameter(vp: IrValueParameter): Label<out DbParam> {
|
||||
val label = getValueParameterLabel(vp)
|
||||
val id = tw.getLabelFor<DbParam>(label)
|
||||
@@ -450,12 +458,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
|
||||
extractValueParameter(vp, id, i)
|
||||
}
|
||||
|
||||
if (f.dispatchReceiverParameter != null) {
|
||||
extractValueParameter(f.dispatchReceiverParameter!!, id, -1)
|
||||
var index = -1
|
||||
val extReceiver = f.extensionReceiverParameter
|
||||
if (extReceiver != null) {
|
||||
extractValueParameter(extReceiver, id, index--)
|
||||
}
|
||||
|
||||
if (f.extensionReceiverParameter != null) {
|
||||
extractValueParameter(f.extensionReceiverParameter!!, id, -1)
|
||||
val dispReceiver = f.dispatchReceiverParameter
|
||||
if (dispReceiver != null) {
|
||||
extractValueParameter(dispReceiver, id, index)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -701,6 +712,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi
|
||||
val typeId = useType(e.type)
|
||||
val locId = tw.getLocation(e)
|
||||
tw.writeExprs_thisaccess(id, typeId, parent, idx)
|
||||
if (isQualifiedThis(owner)) {
|
||||
// todo: add type access as child of 'id' at index 0
|
||||
logger.warnElement(Severity.ErrorSevere, "TODO: Qualified this access found.", e)
|
||||
}
|
||||
tw.writeHasLocation(id, locId)
|
||||
} else {
|
||||
val id = tw.getFreshIdLabel<DbVaraccess>()
|
||||
|
||||
Reference in New Issue
Block a user