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",