File tree Expand file tree Collapse file tree 7 files changed +63
-0
lines changed
kotlin-extractor/src/main/kotlin
ql/integration-tests/posix-only/kotlin/kotlin_kfunction
src/main/kotlin/testProject Expand file tree Collapse file tree 7 files changed +63
-0
lines changed Original file line number Diff line number Diff line change @@ -1333,6 +1333,14 @@ open class KotlinFileExtractor(
1333
1333
val receiverClass = receiverType.classifier.owner as? IrClass ?: return listOf()
1334
1334
val ancestorTypes = ArrayList<IrSimpleType>()
1335
1335
1336
+ // KFunctionX doesn't implement FunctionX on versions before 1.7.0:
1337
+ if ((callTarget.name.asString() == "invoke") &&
1338
+ (receiverClass.fqNameWhenAvailable?.asString()?.startsWith("kotlin.reflect.KFunction") == true) &&
1339
+ (callTarget.parentClassOrNull?.fqNameWhenAvailable?.asString()?.startsWith("kotlin.Function") == true)
1340
+ ) {
1341
+ return receiverType.arguments
1342
+ }
1343
+
1336
1344
// Populate ancestorTypes with the path from receiverType's class to its ancestor, callTarget's declaring type.
1337
1345
fun walkFrom(c: IrClass): Boolean {
1338
1346
if(declaringType == c)
Original file line number Diff line number Diff line change
1
+ /*
2
+ * This file was generated by the Gradle 'init' task.
3
+ *
4
+ * This generated file contains a sample Kotlin application project to get you started.
5
+ * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
6
+ * User Manual available at https://docs.gradle.org/7.0.2/userguide/building_java_projects.html
7
+ */
8
+
9
+ plugins {
10
+ // Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
11
+ id 'org.jetbrains.kotlin.jvm' version '1.6.20'
12
+
13
+ // Apply the application plugin to add support for building a CLI application in Java.
14
+ id 'application'
15
+ }
16
+
17
+ repositories {
18
+ // Use Maven Central for resolving dependencies.
19
+ mavenCentral()
20
+ }
21
+
22
+ application {
23
+ // Define the main class for the application.
24
+ mainClass = 'testProject.AppKt'
25
+ }
Original file line number Diff line number Diff line change
1
+ import kotlin.reflect.*
2
+
3
+ fun fn() {
4
+ val ref: KFunction2<Ccc, Int, Double> = Ccc::m
5
+ ref.invoke(Ccc(), 1)
6
+ }
7
+
8
+ class Ccc {
9
+ fun m(i:Int):Double = 5.0
10
+ }
Original file line number Diff line number Diff line change
1
+ import java
2
+ import semmle.code.java.Diagnostics
3
+
4
+ query predicate diag(Diagnostic d) { any() }
Original file line number Diff line number Diff line change
1
+ /*
2
+ * This file was generated by the Gradle 'init' task.
3
+ *
4
+ * The settings file is used to specify which projects to include in your build.
5
+ *
6
+ * Detailed information about configuring a multi-project build in Gradle can be found
7
+ * in the user manual at https://docs.gradle.org/7.0.2/userguide/multi_project_builds.html
8
+ */
9
+
10
+ rootProject.name = 'testProject'
11
+ include('app')
Original file line number Diff line number Diff line change
1
+ from create_database_utils import *
2
+
3
+ run_codeql_database_create(
4
+ ["gradle build --no-daemon --no-build-cache --rerun-tasks"], lang="java")
5
+ runSuccessfully(["gradle", "clean"])
You can’t perform that action at this time.
0 commit comments