mirror of
https://github.com/github/codeql.git
synced 2025-12-24 04:36:35 +01:00
Kotlin: Fix parent class lookup from field initializers
This commit is contained in:
@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
|||||||
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
|
||||||
@@ -219,12 +220,18 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
|
|||||||
} ?: false
|
} ?: false
|
||||||
}
|
}
|
||||||
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
|
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
|
||||||
val parent = paramsContainer.parent as? IrTypeParametersContainer
|
|
||||||
|
val fieldParent = paramsContainer.parent as? IrField
|
||||||
|
val parent = if (fieldParent != null)
|
||||||
|
fieldParent.parent as? IrTypeParametersContainer
|
||||||
|
else
|
||||||
|
paramsContainer.parent as? IrTypeParametersContainer
|
||||||
|
|
||||||
val parentUnspecialised = when {
|
val parentUnspecialised = when {
|
||||||
remainingArgs.isEmpty() -> true
|
remainingArgs.isEmpty() -> true
|
||||||
parent == null -> false
|
parent == null -> false
|
||||||
parent !is IrClass -> false
|
parent !is IrClass -> false
|
||||||
else -> isUnspecialised(paramsContainer.parentAsClass, remainingArgs)
|
else -> isUnspecialised(parent as IrClass, remainingArgs)
|
||||||
}
|
}
|
||||||
return unspecialisedHere && parentUnspecialised
|
return unspecialisedHere && parentUnspecialised
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a call (<no name>) at generic_anonymous.kt:7:15:7:15\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:15:7:15\n ...while extracting a call (<no name>) at generic_anonymous.kt:7:17:7:22\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:17:7:22\n ...while extracting a expression (<no name>) at generic_anonymous.kt:7:23:7:22\n ...while extracting a statement (<no name>) at generic_anonymous.kt:7:23:7:22\n ...while extracting a block body (<no name>) at generic_anonymous.kt:7:15:7:22\n ...while extracting a body (<no name>) at generic_anonymous.kt:7:15:7:22\n ...while extracting a function (get) at generic_anonymous.kt:7:3:7:22\n ...while extracting a declaration (get) at generic_anonymous.kt:7:3:7:22\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a statement (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a block body (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a body (<no name>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a expression (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a statement (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a block body (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a body (<no name>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a function (<get-member>) at generic_anonymous.kt:4:7:4:20\n ...while extracting a property (member) at generic_anonymous.kt:4:7:4:20\n ...while extracting a declaration (member) at generic_anonymous.kt:4:7:4:20\n ...while extracting a class source (<no name provided>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a statement (<no name provided>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a expression (<no name>) at generic_anonymous.kt:3:19:5:3\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a field (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a field (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a function (<get-x>) at generic_anonymous.kt:3:11:5:3\n ...while extracting a property (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a declaration (x) at generic_anonymous.kt:3:3:5:3\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a object initializer block (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a expression (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a statement (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a block body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a body (<no name>) at generic_anonymous.kt:1:1:9:1\n ...while extracting a function (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a declaration (<init>) at generic_anonymous.kt:1:9:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
| file://:0:0:0:0 | Unexpected specialised instance of generic anonymous class | CodeQL Kotlin extractor | 5 | | Unexpected specialised instance of generic anonymous class | [DATE TIME K] Unexpected specialised instance of generic anonymous class\n ...while extracting a static initializer extraction (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a class source (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a declaration (Generic) at generic_anonymous.kt:1:1:9:1\n ...while extracting a file (generic_anonymous.kt) at generic_anonymous.kt:1:1:14:0\n |
|
|
||||||
|
|||||||
Reference in New Issue
Block a user