diff --git a/analysis/build.gradle.kts b/analysis/build.gradle.kts
index c5ce0db935c..e8a833a0431 100644
--- a/analysis/build.gradle.kts
+++ b/analysis/build.gradle.kts
@@ -13,6 +13,7 @@ tasks.register("analysisAllTests") {
":analysis:analysis-api-fe10:test",
":analysis:analysis-api-standalone:test",
":analysis:low-level-api-fir:test",
+ ":analysis:low-level-api-fir:tests-jdk11:test",
":analysis:symbol-light-classes:test"
)
diff --git a/analysis/low-level-api-fir/tests-jdk11/build.gradle.kts b/analysis/low-level-api-fir/tests-jdk11/build.gradle.kts
new file mode 100644
index 00000000000..ef61c70de78
--- /dev/null
+++ b/analysis/low-level-api-fir/tests-jdk11/build.gradle.kts
@@ -0,0 +1,37 @@
+plugins {
+ kotlin("jvm")
+ id("jps-compatible")
+}
+
+dependencies {
+ testImplementation(libs.junit.jupiter.api)
+ testRuntimeOnly(libs.junit.jupiter.engine)
+
+ testImplementation(project(":analysis:analysis-api"))
+ testImplementation(project(":analysis:low-level-api-fir"))
+ testImplementation("org.jetbrains.kotlinx:lincheck:2.23")
+}
+
+sourceSets {
+ "test" { projectDefault() }
+}
+
+configureJvmToolchain(JdkMajorVersion.JDK_11_0)
+
+projectTest(jUnitMode = JUnitMode.JUnit5) {
+ dependsOn(":dist")
+ workingDir = rootDir
+ useJUnitPlatform()
+
+ // This is required by lincheck model checking to be able to use `jdk.internal.misc.Unsafe` and similar classes under the hood.
+ jvmArgs(
+ "--add-opens",
+ "java.base/jdk.internal.misc=ALL-UNNAMED",
+ "--add-exports",
+ "java.base/jdk.internal.util=ALL-UNNAMED",
+ "--add-exports",
+ "java.base/sun.security.action=ALL-UNNAMED"
+ )
+}
+
+testsJar()
diff --git a/analysis/low-level-api-fir/tests-jdk11/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ExampleLincheckTest.kt b/analysis/low-level-api-fir/tests-jdk11/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ExampleLincheckTest.kt
new file mode 100644
index 00000000000..53e745c3eb2
--- /dev/null
+++ b/analysis/low-level-api-fir/tests-jdk11/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/caches/ExampleLincheckTest.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.analysis.low.level.api.fir.caches
+
+import org.jetbrains.kotlinx.lincheck.annotations.Operation
+import org.jetbrains.kotlinx.lincheck.check
+import org.jetbrains.kotlinx.lincheck.strategy.managed.modelchecking.ModelCheckingOptions
+import org.jetbrains.kotlinx.lincheck.strategy.stress.StressOptions
+import org.junit.jupiter.api.Test
+import java.util.concurrent.atomic.AtomicInteger
+
+// This is an example Lincheck test to ensure that the test infrastructure is working. It will be replaced with proper "cleanable soft value
+// cache" tests in the scope of KT-62136.
+
+class ExampleLincheckTest {
+ private val c = AtomicInteger(0)
+
+ @Operation
+ fun inc(): Int = c.incrementAndGet()
+
+ @Operation
+ fun get(): Int = c.get()
+
+ @Test
+ fun stressTest() = StressOptions().check(this::class)
+
+ @Test
+ fun modelCheckingTest() = ModelCheckingOptions().check(this::class)
+}
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index ba02e11cf26..924d643fa53 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -3488,6 +3488,12 @@
+
+
+
+
+
+
@@ -3714,6 +3720,12 @@
+
+
+
+
+
+
@@ -3810,6 +3822,12 @@
+
+
+
+
+
+
@@ -3834,6 +3852,12 @@
+
+
+
+
+
+
@@ -4060,6 +4084,12 @@
+
+
+
+
+
+
@@ -4240,6 +4270,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4572,6 +4614,12 @@
+
+
+
+
+
+
@@ -4614,6 +4662,12 @@
+
+
+
+
+
+
@@ -4626,6 +4680,12 @@
+
+
+
+
+
+
diff --git a/prepare/analysis-api-test-framework/build.gradle.kts b/prepare/analysis-api-test-framework/build.gradle.kts
index fd16caa569f..88441a8c5cc 100644
--- a/prepare/analysis-api-test-framework/build.gradle.kts
+++ b/prepare/analysis-api-test-framework/build.gradle.kts
@@ -5,6 +5,7 @@ plugins {
val testModules = listOf(
":analysis:analysis-api-fir",
":analysis:low-level-api-fir",
+ ":analysis:low-level-api-fir:tests-jdk11",
":analysis:analysis-test-framework",
":analysis:analysis-api-impl-barebone",
":analysis:analysis-api-impl-base",
diff --git a/settings.gradle b/settings.gradle
index c57ad2ec023..7b20df9ed39 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -562,6 +562,7 @@ include ":jps:jps-common",
include ":generators:analysis-api-generator",
":analysis",
":analysis:low-level-api-fir",
+ ":analysis:low-level-api-fir:tests-jdk11",
":analysis:analysis-api-fir:analysis-api-fir-generator",
":analysis:analysis-api-fir",
":analysis:analysis-api",