Implement class/method run configurations for MPP projects

This commit is contained in:
Yan Zhulanow
2019-09-02 18:48:49 +09:00
parent 0a8f15c745
commit f408c249f1
21 changed files with 584 additions and 364 deletions
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiMember
import com.intellij.psi.PsiMethod
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.caches.project.isNewMPPModule
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtFile
@@ -35,6 +36,11 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
return other.isProducedBy(JUnitConfigurationProducer::class.java) || other.isProducedBy(AbstractPatternBasedConfigurationProducer::class.java)
}
private fun isAvailableInMpp(context: ConfigurationContext): Boolean {
val module = context.module
return module == null || !module.isNewMPPModule || !forceGradleRunnerInMPP()
}
override fun isConfigurationFromContext(
configuration: JUnitConfiguration,
context: ConfigurationContext
@@ -43,6 +49,10 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
return false
}
if (!isAvailableInMpp(context)) {
return false
}
val leaf = context.location?.psiElement ?: return false
val method = getTestMethod(leaf)
val testClass = getTestClass(leaf)
@@ -75,6 +85,10 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
): Boolean {
if (DumbService.getInstance(context.project).isDumb) return false
if (!isAvailableInMpp(context)) {
return false
}
val location = context.location ?: return false
val leaf = location.psiElement
val module = context.module?.asJvmModule() ?: return false
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.idea.run
import com.intellij.openapi.module.Module
import com.intellij.openapi.util.registry.Registry
import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.platform.jvm.isJvm
@@ -15,3 +16,4 @@ fun Module.asJvmModule(): Module? {
return null
}
fun forceGradleRunnerInMPP() = Registry.`is`("kotlin.mpp.tests.force.gradle", true)