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.configurations.ModuleBasedConfiguration
|
||||||
import com.intellij.execution.junit.*
|
import com.intellij.execution.junit.*
|
||||||
import com.intellij.openapi.project.DumbService
|
import com.intellij.openapi.project.DumbService
|
||||||
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.openapi.util.Ref
|
import com.intellij.openapi.util.Ref
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiElement
|
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.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
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.KtClass
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtFunction
|
import org.jetbrains.kotlin.psi.KtFunction
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
|
||||||
|
|
||||||
class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfiguration>(JUnitConfigurationType.getInstance()) {
|
class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfiguration>(JUnitConfigurationType.getInstance()) {
|
||||||
@@ -85,7 +88,8 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
|
|||||||
|
|
||||||
val ktFile = leaf.containingFile as KtFile
|
val ktFile = leaf.containingFile as KtFile
|
||||||
|
|
||||||
if (TargetPlatformDetector.getPlatform(ktFile) != JvmPlatform) {
|
val targetPlatform = TargetPlatformDetector.getPlatform(ktFile)
|
||||||
|
if (targetPlatform != JvmPlatform && targetPlatform != TargetPlatform.Common) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,6 +99,7 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
|
|||||||
configuration.beMethodConfiguration(methodLocation)
|
configuration.beMethodConfiguration(methodLocation)
|
||||||
configuration.restoreOriginalModule(originalModule)
|
configuration.restoreOriginalModule(originalModule)
|
||||||
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
|
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
|
||||||
|
fixJdkForCommonModule(ktFile, configuration)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,12 +109,22 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
|
|||||||
configuration.beClassConfiguration(testClass)
|
configuration.beClassConfiguration(testClass)
|
||||||
configuration.restoreOriginalModule(originalModule)
|
configuration.restoreOriginalModule(originalModule)
|
||||||
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
|
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
|
||||||
|
fixJdkForCommonModule(ktFile, configuration)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
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) {
|
override fun onFirstRun(fromContext: ConfigurationFromContext, context: ConfigurationContext, performRunnable: Runnable) {
|
||||||
val leaf = fromContext.sourceElement
|
val leaf = fromContext.sourceElement
|
||||||
getTestClass(leaf)?.let { testClass ->
|
getTestClass(leaf)?.let { testClass ->
|
||||||
|
|||||||
Reference in New Issue
Block a user