Prefer Kotlin Junit test run configurations when possible (KT-33787)

This commit is contained in:
Yan Zhulanow
2019-10-24 20:21:18 +09:00
parent 987307cf92
commit ef8b3cb72a
12 changed files with 257 additions and 64 deletions
@@ -0,0 +1,41 @@
/*
* Copyright 2010-2019 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.idea.run
import com.intellij.execution.ExecutionBundle
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.configurations.ConfigurationType
import com.intellij.execution.configurations.ConfigurationTypeUtil
import com.intellij.execution.configurations.RunConfiguration
import com.intellij.execution.junit.JUnitConfiguration
import com.intellij.icons.AllIcons
import com.intellij.openapi.project.Project
import javax.swing.Icon
class KotlinJUnitConfigurationType : ConfigurationType {
val factory = object : ConfigurationFactory(this) {
override fun createTemplateConfiguration(project: Project): RunConfiguration {
return KotlinJUnitConfiguration("", project, this)
}
}
companion object {
val instance: KotlinJUnitConfigurationType
get() = ConfigurationTypeUtil.findConfigurationType(KotlinJUnitConfigurationType::class.java)
}
override fun getConfigurationFactories(): Array<ConfigurationFactory> = arrayOf(factory)
override fun getDisplayName() = ExecutionBundle.message("junit.configuration.display.name")
override fun getConfigurationTypeDescription() = ExecutionBundle.message("junit.configuration.description")
override fun getIcon(): Icon = AllIcons.RunConfigurations.Junit
override fun getId() = "KotlinJUnit"
override fun getTag() = "junit"
override fun isDumbAware() = false
}
class KotlinJUnitConfiguration(name: String, project: Project, configurationFactory: ConfigurationFactory) :
JUnitConfiguration(name, project, configurationFactory)
@@ -12,6 +12,7 @@ import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
import com.intellij.execution.actions.RunConfigurationProducer
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.configurations.ModuleBasedConfiguration
import com.intellij.execution.junit.*
import com.intellij.execution.testframework.AbstractPatternBasedConfigurationProducer
@@ -32,8 +33,13 @@ import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfiguration>(JUnitConfigurationType.getInstance()) {
override fun getConfigurationFactory(): ConfigurationFactory {
return KotlinJUnitConfigurationType.instance.factory
}
override fun shouldReplace(self: ConfigurationFromContext, other: ConfigurationFromContext): Boolean {
return other.isProducedBy(JUnitConfigurationProducer::class.java) || other.isProducedBy(AbstractPatternBasedConfigurationProducer::class.java)
return other.isProducedBy(JUnitConfigurationProducer::class.java)
|| other.isProducedBy(AbstractPatternBasedConfigurationProducer::class.java)
}
private fun isAvailableInMpp(context: ConfigurationContext): Boolean {
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.run
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.actions.ConfigurationFromContext
import com.intellij.execution.configurations.ConfigurationFactory
import com.intellij.execution.junit.JUnitConfiguration
import com.intellij.execution.junit.PatternConfigurationProducer
import com.intellij.execution.junit.TestClassConfigurationProducer
@@ -28,6 +29,10 @@ import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.psi.KtClassOrObject
class KotlinPatternConfigurationProducer : PatternConfigurationProducer() {
override fun getConfigurationFactory(): ConfigurationFactory {
return KotlinJUnitConfigurationType.instance.factory
}
override fun setupConfigurationFromContext(
configuration: JUnitConfiguration,
context: ConfigurationContext,