Set SDK from JVM module when running JUnit tests for common module
This commit is contained in:
+16
-1
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user