From 0dab7529c5adb6b9fc8d5ec113ccbd1f32e24923 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 12 Sep 2025 15:04:41 +0200 Subject: [PATCH] [Kotlin, Wasm] Add test icons for Kotlin Wasm tests ^KTIJ-34663 fixed GitOrigin-RevId: c163c30075d30372a7ed8768912b763f0119b63f --- .../AbstractWasmIdePlatformKindTooling.kt | 27 ++++++++++++++++++- .../resources/kotlin.gradle.gradle-java.xml | 4 +++ ...mJsTestClassGradleConfigurationProducer.kt | 16 +++++++++++ ...JsTestMethodGradleConfigurationProducer.kt | 14 ++++++++++ ...asiTestClassGradleConfigurationProducer.kt | 16 +++++++++++ ...siTestMethodGradleConfigurationProducer.kt | 14 ++++++++++ 6 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer.kt create mode 100644 plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer.kt create mode 100644 plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer.kt create mode 100644 plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer.kt diff --git a/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/base/codeInsight/tooling/AbstractWasmIdePlatformKindTooling.kt b/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/base/codeInsight/tooling/AbstractWasmIdePlatformKindTooling.kt index 35d3b50d7353..248a3121423d 100644 --- a/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/base/codeInsight/tooling/AbstractWasmIdePlatformKindTooling.kt +++ b/plugins/kotlin/base/code-insight/src/org/jetbrains/kotlin/idea/base/codeInsight/tooling/AbstractWasmIdePlatformKindTooling.kt @@ -1,6 +1,8 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.base.codeInsight.tooling +import com.intellij.execution.actions.RunConfigurationProducer +import com.intellij.util.SmartList import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmJsLibraryKind import org.jetbrains.kotlin.idea.base.platforms.KotlinWasmWasiLibraryKind import org.jetbrains.kotlin.idea.projectModel.KotlinPlatform @@ -10,6 +12,8 @@ import org.jetbrains.kotlin.psi.KtFunction import org.jetbrains.kotlin.psi.KtNamedDeclaration import javax.swing.Icon +interface KotlinWasmRunConfigurationDataProvider + abstract class AbstractWasmIdePlatformKindTooling : IdePlatformKindTooling() { override val mavenLibraryIds: List get() = emptyList() @@ -18,7 +22,28 @@ abstract class AbstractWasmIdePlatformKindTooling : IdePlatformKindTooling() { override fun acceptsAsEntryPoint(function: KtFunction): Boolean = false - override fun getTestIcon(declaration: KtNamedDeclaration, allowSlowOperations: Boolean): Icon? = null + override fun getTestIcon(declaration: KtNamedDeclaration, allowSlowOperations: Boolean): Icon? { + if (!allowSlowOperations) { + return null + } + + val initialLocations = computeInitialIconLocations(declaration) ?: return null + return testIconProvider.getGenericTestIcon(declaration, initialLocations) + } + + private fun computeInitialIconLocations(declaration: KtNamedDeclaration): List? { + val hasWasmConfigurationProviders = RunConfigurationProducer + .getProducers(declaration.project) + .asSequence() + .filterIsInstance() + .any() + + if (!hasWasmConfigurationProviders) return null + + val location = declaration.containingKtFile.packageFqName.asString() + + return SmartList(location) + } } abstract class AbstractWasmJsIdePlatformKindTooling : AbstractWasmIdePlatformKindTooling() { diff --git a/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml b/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml index 4ecd252a833d..a46a71a8a4dc 100644 --- a/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml +++ b/plugins/kotlin/gradle/gradle-java/resources/kotlin.gradle.gradle-java.xml @@ -92,6 +92,10 @@ id="kotlinGradleTaskRunLineMarkerProvider" language="kotlin"/> + + + + diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer.kt new file mode 100644 index 000000000000..8a7e9b8fcb44 --- /dev/null +++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + +package org.jetbrains.kotlin.idea.gradleJava.testing.wasm + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider +import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestClassGradleConfigurationProducer +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.wasm.isWasmJs + +class KotlinMultiplatformWasmJsTestClassGradleConfigurationProducer + : AbstractKotlinMultiplatformTestClassGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider { + override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmJs() + + override val hasTestFramework get() = true +} diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer.kt new file mode 100644 index 000000000000..5969b7340044 --- /dev/null +++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer.kt @@ -0,0 +1,14 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + +package org.jetbrains.kotlin.idea.gradleJava.testing.wasm + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider +import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.wasm.isWasmJs + +class KotlinMultiplatformWasmJsTestMethodGradleConfigurationProducer + : AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider { + override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmJs() +} \ No newline at end of file diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer.kt new file mode 100644 index 000000000000..328839b544f8 --- /dev/null +++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer.kt @@ -0,0 +1,16 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + +package org.jetbrains.kotlin.idea.gradleJava.testing.wasm + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider +import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestClassGradleConfigurationProducer +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.wasm.isWasmWasi + +class KotlinMultiplatformWasmWasiTestClassGradleConfigurationProducer + : AbstractKotlinMultiplatformTestClassGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider { + override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmWasi() + + override val hasTestFramework get() = true +} diff --git a/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer.kt b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer.kt new file mode 100644 index 000000000000..76a2d5f094ee --- /dev/null +++ b/plugins/kotlin/gradle/gradle-java/src/org/jetbrains/kotlin/idea/gradleJava/testing/wasm/KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer.kt @@ -0,0 +1,14 @@ +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + +package org.jetbrains.kotlin.idea.gradleJava.testing.wasm + +import com.intellij.openapi.module.Module +import org.jetbrains.kotlin.idea.base.codeInsight.tooling.KotlinWasmRunConfigurationDataProvider +import org.jetbrains.kotlin.idea.gradleJava.run.AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer +import org.jetbrains.kotlin.platform.TargetPlatform +import org.jetbrains.kotlin.platform.wasm.isWasmWasi + +class KotlinMultiplatformWasmWasiTestMethodGradleConfigurationProducer + : AbstractKotlinMultiplatformTestMethodGradleConfigurationProducer(), KotlinWasmRunConfigurationDataProvider { + override fun isApplicable(module: Module, platform: TargetPlatform) = platform.isWasmWasi() +} \ No newline at end of file