diff --git a/analysis/analysis-api-fir/build.gradle.kts b/analysis/analysis-api-fir/build.gradle.kts index bdd5229d3a8..73f3fdf11c9 100644 --- a/analysis/analysis-api-fir/build.gradle.kts +++ b/analysis/analysis-api-fir/build.gradle.kts @@ -38,7 +38,6 @@ dependencies { testApi(toolsJar()) testApiJUnit5() testApi(project(":analysis:symbol-light-classes")) - } sourceSets { @@ -53,10 +52,7 @@ projectTest(jUnitMode = JUnitMode.JUnit5) { dependsOn(":dist") workingDir = rootDir useJUnitPlatform() - - // PluginAnnotationsProvider needs this jar during tests - dependsOn(":plugins:fir-plugin-prototype:plugin-annotations:jar") -} +}.also { confugureFirPluginAnnotationsDependency(it) } testsJar() diff --git a/analysis/analysis-api-standalone/build.gradle.kts b/analysis/analysis-api-standalone/build.gradle.kts index 9e72805461b..fc6b4ed5db9 100644 --- a/analysis/analysis-api-standalone/build.gradle.kts +++ b/analysis/analysis-api-standalone/build.gradle.kts @@ -43,7 +43,7 @@ projectTest(jUnitMode = JUnitMode.JUnit5) { dependsOn(":dist") workingDir = rootDir useJUnitPlatform() -} +}.also { confugureFirPluginAnnotationsDependency(it) } testsJar() diff --git a/buildSrc/src/main/kotlin/tasks.kt b/buildSrc/src/main/kotlin/tasks.kt index 09674c0b015..8a8d3397fa0 100644 --- a/buildSrc/src/main/kotlin/tasks.kt +++ b/buildSrc/src/main/kotlin/tasks.kt @@ -10,13 +10,13 @@ import com.sun.management.OperatingSystemMXBean import org.gradle.api.Project import org.gradle.api.Task +import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ProjectDependency import org.gradle.api.file.FileSystemOperations import org.gradle.api.internal.tasks.testing.filter.DefaultTestFilter import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.testing.Test -import org.gradle.kotlin.dsl.extra -import org.gradle.kotlin.dsl.project +import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.support.serviceOf import java.io.File import java.lang.Character.isLowerCase @@ -314,3 +314,18 @@ fun Task.useAndroidSdk() { fun Task.useAndroidJar() { TaskUtils.useAndroidJar(this) } + +fun Project.confugureFirPluginAnnotationsDependency(testTask: TaskProvider) { + val firPluginAnnotations: Configuration by configurations.creating + + dependencies { + firPluginAnnotations(project(":plugins:fir-plugin-prototype:plugin-annotations")) { isTransitive = false } + } + + testTask.configure { + dependsOn(firPluginAnnotations) + doFirst { + systemProperty("firPluginAnnotations.path", firPluginAnnotations.singleFile.canonicalPath) + } + } +} diff --git a/plugins/fir-plugin-prototype/build.gradle.kts b/plugins/fir-plugin-prototype/build.gradle.kts index 7908b98ad9f..6648f615c67 100644 --- a/plugins/fir-plugin-prototype/build.gradle.kts +++ b/plugins/fir-plugin-prototype/build.gradle.kts @@ -59,10 +59,8 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) { projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5) { dependsOn(":dist") - dependsOn(":plugins:fir-plugin-prototype:plugin-annotations:jar") - workingDir = rootDir useJUnitPlatform() -} +}.also { confugureFirPluginAnnotationsDependency(it) } testsJar() diff --git a/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/PluginAnnotationsProvider.kt b/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/PluginAnnotationsProvider.kt index d515144a34b..85f0d472be2 100644 --- a/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/PluginAnnotationsProvider.kt +++ b/plugins/fir-plugin-prototype/tests/org/jetbrains/kotlin/fir/plugin/services/PluginAnnotationsProvider.kt @@ -15,17 +15,20 @@ import java.io.File import java.io.FilenameFilter class PluginAnnotationsProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) { - companion object { - private const val ANNOTATIONS_JAR_DIR = "plugins/fir-plugin-prototype/plugin-annotations/build/libs/" - private val ANNOTATIONS_JAR_FILTER = FilenameFilter { _, name -> name.startsWith("plugin-annotations") && name.endsWith(".jar") } + + private val firPluginAnnotationsJar: File by lazy { + val firPluginAnnotationsPath = System.getProperty("firPluginAnnotations.path") ?: error("firPluginAnnotations.path system property is not set") + val firPluginAnnotationsFile = File(firPluginAnnotationsPath) + if (!firPluginAnnotationsFile.isFile && + firPluginAnnotationsFile.name.startsWith("plugin-annotations") && + firPluginAnnotationsFile.name.endsWith(".jar") + ) { + error("Can't find fir plugin annotations jar file in firPluginAnnotations.path system property") + } + firPluginAnnotationsFile } override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) { - val libDir = File(ANNOTATIONS_JAR_DIR) - testServices.assertions.assertTrue(libDir.exists() && libDir.isDirectory, failMessage) - val jar = libDir.listFiles(ANNOTATIONS_JAR_FILTER)?.firstOrNull() ?: testServices.assertions.fail(failMessage) - configuration.addJvmClasspathRoot(jar) + configuration.addJvmClasspathRoot(firPluginAnnotationsJar) } - - private val failMessage = { "Jar with annotations does not exist. Please run :plugins:fir-plugin-prototype:plugin-annotations:jar" } }