kotlin tests: synchronise test inputs between test-kotlin1 and test-kotlin2

- Port ministdlib from test-kotlin1 to test-kotlin2. The ministdlib test
  exercises a minimal Kotlin standard library written from scratch. Its
  options file is updated to include -language-version 2.0 so the test
  runs in K2 mode when the K2 compiler is active.

- Port nested_types from test-kotlin2 to test-kotlin1. The nested_types
  test exercises type-alias and inner-type queries. Expected output is
  identical in K1 and K2 modes so no expected-file changes are needed.

- Add test-kotlin2/options with codeql-extractor-kotlin-options:
  -language-version 2.0. The CodeQL CLI adds -language-version 1.9 by
  default in legacy test extraction mode. Without this override the K2
  test suite would run in K1 mode, defeating the purpose of the split.

Both ministdlib and nested_types produce byte-identical expected output
across K1 (2.3.20, -language-version 1.9) and K2 (2.4.0, default K2).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Anders Fugmann
2026-07-07 15:14:50 +02:00
parent c3a0b65c0c
commit eddef7527e
9 changed files with 97 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
import java.util.Stack;
// Diagnostic Matches: %Making use of Stack a raw type to avoid infinite recursion%
class MyType
fun foo1(x: List<List<List<List<MyType>>>>) { }
fun foo2(x: Stack<Stack<Stack<Stack<MyType>>>>) { }
class MkT<T> { }
fun foo3(x: MkT<MkT<MkT<MkT<MyType>>>>) { }

View File

@@ -0,0 +1,13 @@
| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT<MkT<MkT<MkT<MyType>>>> |
| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT<MkT<MkT<MyType>>> |
| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT<MkT<MyType>> |
| file:///!unknown-binary-location/MkT.class:0:0:0:0 | MkT<MyType> |
| file:///modules/java.base/java/util/List.class:0:0:0:0 | List<? extends List<? extends List<? extends List<MyType>>>> |
| file:///modules/java.base/java/util/List.class:0:0:0:0 | List<? extends List<? extends List<MyType>>> |
| file:///modules/java.base/java/util/List.class:0:0:0:0 | List<? extends List<MyType>> |
| file:///modules/java.base/java/util/List.class:0:0:0:0 | List<MyType> |
| file:///modules/java.base/java/util/List.class:0:0:0:0 | List<Stack<MyType>> |
| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack<MyType> |
| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack<Stack<MyType>> |
| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack<Stack<Stack<MyType>>> |
| file:///modules/java.base/java/util/Stack.class:0:0:0:0 | Stack<Stack<Stack<Stack<MyType>>>> |

View File

@@ -0,0 +1,7 @@
import java
from Type t
where
t.getName().matches("%MyType%") and
t.getName().matches(["List<%", "Stack<%", "MkT<%"])
select t

View File

@@ -0,0 +1,47 @@
package kotlin
/*
This is a mini standard library replacement, to make it easy to write
very small tests that create very small databases.
If you define a class, then you will need to also define any members that
compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrBuiltInsOverDescriptors.kt
expects (e.g. with findFunctions(...).first) to exist.
*/
public open class Any {
fun toString(): String { return this.toString() }
open operator fun equals(other: Any?): Boolean { return this.equals(other) }
}
public class String {
operator fun plus(other: Any?): String { return this.plus(other) }
}
public class Boolean {
operator fun not(): Boolean { return this.not() }
}
public class Int {
operator fun plus(other: Int): Int { return this.plus(other) }
operator fun times(other: Int): Int { return this.times(other) }
infix fun xor(other: Int): Int { return this.xor(other) }
infix fun and(other: Int): Int { return this.and(other) }
}
public object Unit {
}
// Diagnostic Matches: % Can't find java.lang.Boolean
// Diagnostic Matches: % Can't find java.lang.Byte
// Diagnostic Matches: % Can't find java.lang.Character
// Diagnostic Matches: % Can't find java.lang.Double
// Diagnostic Matches: % Can't find java.lang.Float
// Diagnostic Matches: % Can't find java.lang.Integer
// Diagnostic Matches: % Can't find java.lang.Long
// Diagnostic Matches: % Can't find java.lang.Short
// Diagnostic Matches: % Can't find java.lang.Void
// Diagnostic Matches: % Can't find kotlin.UByte
// Diagnostic Matches: % Can't find kotlin.UInt
// Diagnostic Matches: % Can't find kotlin.ULong
// Diagnostic Matches: % Can't find kotlin.UShort

View File

@@ -0,0 +1 @@
class MyClass {}

View File

@@ -0,0 +1,7 @@
| MiniStdLib.kt:12:1:15:1 | Any |
| MiniStdLib.kt:17:1:19:1 | String |
| MiniStdLib.kt:21:1:23:1 | Boolean |
| MiniStdLib.kt:25:1:30:1 | Int |
| MiniStdLib.kt:32:1:33:1 | Unit |
| MyClass.kt:1:1:1:16 | MyClass |
| file://:0:0:0:0 | FakeKotlinClass |

View File

@@ -0,0 +1,4 @@
import java
from Class c
select c

View File

@@ -0,0 +1 @@
codeql-extractor-kotlin-options: -no-jdk -no-reflect -no-stdlib -Xallow-kotlin-package -language-version 2.0

View File

@@ -0,0 +1 @@
codeql-extractor-kotlin-options: -language-version 2.0