Set SDK from JVM module when running JUnit tests for common module

This commit is contained in:
Dmitry Jemerov
2018-03-26 19:30:46 +02:00
parent 6bee25cad2
commit 8f19e95bd0
@@ -12,6 +12,7 @@ import com.intellij.execution.actions.RunConfigurationProducer
import com.intellij.execution.configurations.ModuleBasedConfiguration
import com.intellij.execution.junit.*
import com.intellij.openapi.project.DumbService
import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.util.Ref
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
@@ -20,11 +21,13 @@ import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.module
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfiguration>(JUnitConfigurationType.getInstance()) {
@@ -85,7 +88,8 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
val ktFile = leaf.containingFile as KtFile
if (TargetPlatformDetector.getPlatform(ktFile) != JvmPlatform) {
val targetPlatform = TargetPlatformDetector.getPlatform(ktFile)
if (targetPlatform != JvmPlatform && targetPlatform != TargetPlatform.Common) {
return false
}
@@ -95,6 +99,7 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
configuration.beMethodConfiguration(methodLocation)
configuration.restoreOriginalModule(originalModule)
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
fixJdkForCommonModule(ktFile, configuration)
return true
}
@@ -104,12 +109,22 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
configuration.beClassConfiguration(testClass)
configuration.restoreOriginalModule(originalModule)
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
fixJdkForCommonModule(ktFile, configuration)
return true
}
return false
}
private fun fixJdkForCommonModule(ktFile: KtFile, configuration: JUnitConfiguration) {
val implModule = ktFile.module?.findJvmImplementationModule() ?: return
val sdk = ModuleRootManager.getInstance(implModule).sdk
if (sdk != null) {
configuration.isAlternativeJrePathEnabled = true
configuration.alternativeJrePath = sdk.homePath
}
}
override fun onFirstRun(fromContext: ConfigurationFromContext, context: ConfigurationContext, performRunnable: Runnable) {
val leaf = fromContext.sourceElement
getTestClass(leaf)?.let { testClass ->