diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinNonJvmGutterConfigurator.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinNonJvmGutterConfigurator.kt index a9f909920f4..583e75dae96 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinNonJvmGutterConfigurator.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinNonJvmGutterConfigurator.kt @@ -13,8 +13,42 @@ class KotlinNonJvmGutterConfigurator : AbstractProjectResolverExtension() { initScriptConsumer.consume( //language=Gradle """ - task nonJvmTestIdeSupport(type: Test) { + ({ + def doIfInstance = { Task task, String fqn, Closure action -> + def taskSuperClass = task.class + while (taskSuperClass != Object.class) { + if (taskSuperClass.canonicalName == fqn) { + action() + + return + } else { + taskSuperClass = taskSuperClass.superclass + } + } } + + gradle.afterProject { project -> + project.tasks.create("nonJvmTestIdeSupportDummy") + project.tasks.create('nonJvmTestIdeSupport', Test) { + testClassesDirs = project.tasks["nonJvmTestIdeSupportDummy"].outputs.files + classpath = project.tasks["nonJvmTestIdeSupportDummy"].outputs.files + } + + project.afterEvaluate { + project.tasks.each { Task task -> + doIfInstance(task, "org.jetbrains.kotlin.gradle.tasks.KotlinTest") { + task.dependsOn('nonJvmTestIdeSupport') + } + } + } + } + + gradle.taskGraph.beforeTask { Task task -> + doIfInstance(task, "org.jetbrains.kotlin.gradle.tasks.KotlinTest") { + task.filter.includePatterns = task.project.tasks['nonJvmTestIdeSupport'].filter.includePatterns + } + } + })() """.trimIndent() ) }