diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/Continuation.java b/java/ql/test/kotlin/library-tests/java_and_kotlin/Continuation.java new file mode 100644 index 00000000000..1e0bcda4135 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/java_and_kotlin/Continuation.java @@ -0,0 +1,4 @@ +package kotlin.coroutines; + +// This is a stub for the Kotlin Continuation interface. +public interface Continuation { } diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/Java.java b/java/ql/test/kotlin/library-tests/java_and_kotlin/Java.java index e4ae7eecf19..6240bced9f2 100644 --- a/java/ql/test/kotlin/library-tests/java_and_kotlin/Java.java +++ b/java/ql/test/kotlin/library-tests/java_and_kotlin/Java.java @@ -1,5 +1,19 @@ +import kotlin.coroutines.Continuation; + public class Java { void javaFun() { new Kotlin().kotlinFun(); } + + public class Djava extends Base { + @Override + public String fn0(int x) { + return super.fn0(x); + } + + @Override + public Object fn1(int x, Continuation $completion) { + return super.fn1(x, $completion); + } + } } diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/Kotlin.kt b/java/ql/test/kotlin/library-tests/java_and_kotlin/Kotlin.kt index b592ebf1c7d..63e5ca99455 100644 --- a/java/ql/test/kotlin/library-tests/java_and_kotlin/Kotlin.kt +++ b/java/ql/test/kotlin/library-tests/java_and_kotlin/Kotlin.kt @@ -3,3 +3,13 @@ public class Kotlin { // TODO: Java().javaFun(); } } + +open class Base { + open fun fn0(x: Int) : String = "" + open suspend fun fn1(x: Int) : String = "" +} + +class Dkotlin : Base() { + override fun fn0(x: Int): String = super.fn0(x) + override suspend fun fn1(x: Int): String = super.fn1(x) +} diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.expected b/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.expected deleted file mode 100644 index 515457eb54e..00000000000 --- a/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.expected +++ /dev/null @@ -1 +0,0 @@ -| Java.java:3:3:3:26 | kotlinFun(...) | Kotlin.kt:2:2:4:2 | kotlinFun | diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.ql b/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.ql deleted file mode 100644 index 2162e802e20..00000000000 --- a/java/ql/test/kotlin/library-tests/java_and_kotlin/methodAccess.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -from MethodAccess ma, Method m -where m = ma.getMethod() -select ma, m diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/test.expected b/java/ql/test/kotlin/library-tests/java_and_kotlin/test.expected new file mode 100644 index 00000000000..41d010e4f06 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/java_and_kotlin/test.expected @@ -0,0 +1,23 @@ +methods +| Java.java:4:7:4:13 | javaFun | javaFun() | +| Java.java:10:17:10:19 | fn0 | fn0(int) | +| Java.java:15:17:15:19 | fn1 | fn1(int,kotlin.coroutines.Continuation) | +| Kotlin.kt:2:2:4:2 | kotlinFun | kotlinFun() | +| Kotlin.kt:8:10:8:38 | fn0 | fn0(int) | +| Kotlin.kt:9:18:9:46 | fn1 | fn1(int) | +| Kotlin.kt:13:14:13:51 | fn0 | fn0(int) | +| Kotlin.kt:14:22:14:59 | fn1 | fn1(int) | +overrides +| Java.java:10:17:10:19 | fn0 | Kotlin.kt:8:10:8:38 | fn0 | +| Java.java:15:17:15:19 | fn1 | java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 | +| Kotlin.kt:13:14:13:51 | fn0 | Kotlin.kt:8:10:8:38 | fn0 | +| Kotlin.kt:14:22:14:59 | fn1 | Kotlin.kt:9:18:9:46 | fn1 | +signature_mismatch +| Kotlin.kt:9:18:9:46 | fn1 | fn1(int) | +| java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 | fn1(int,kotlin.coroutines.Continuation) | +#select +| Java.java:5:3:5:26 | kotlinFun(...) | Kotlin.kt:2:2:4:2 | kotlinFun | +| Java.java:11:11:11:22 | fn0(...) | Kotlin.kt:8:10:8:38 | fn0 | +| Java.java:16:11:16:35 | fn1(...) | java_and_kotlin.testproj/test.class.files/Base.class:0:0:0:0 | fn1 | +| Kotlin.kt:13:46:13:51 | fn0(...) | Kotlin.kt:8:10:8:38 | fn0 | +| Kotlin.kt:14:54:14:59 | fn1(...) | Kotlin.kt:9:18:9:46 | fn1 | diff --git a/java/ql/test/kotlin/library-tests/java_and_kotlin/test.ql b/java/ql/test/kotlin/library-tests/java_and_kotlin/test.ql new file mode 100644 index 00000000000..3b74a66480e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/java_and_kotlin/test.ql @@ -0,0 +1,21 @@ +import java + +from MethodAccess ma, Method m +where m = ma.getMethod() +select ma, m + +query predicate methods(Method m, string sig) { + m.fromSource() and + m.getSignature() = sig +} + +query predicate overrides(Method m1, Method m2) { + m1.fromSource() and + m1.overrides(m2) +} + +query predicate signature_mismatch(Method m, string sig) { + m.getDeclaringType().getQualifiedName() = "Base" and + m.getName() = "fn1" and + m.getSignature() = sig +}