JS: Fix NodeJS run configuration support
#KT-16710 Fixed
This commit is contained in:
+6
-3
@@ -21,7 +21,9 @@ import org.jetbrains.kotlin.idea.nodejs.TestElementPath
|
|||||||
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
|
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
|
||||||
import org.jetbrains.kotlin.idea.run.addBuildTask
|
import org.jetbrains.kotlin.idea.run.addBuildTask
|
||||||
import org.jetbrains.kotlin.idea.util.module
|
import org.jetbrains.kotlin.idea.util.module
|
||||||
|
import org.jetbrains.kotlin.psi.KtNamedDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
|
||||||
|
|
||||||
private class KotlinNodeJsRunConfigurationProducer :
|
private class KotlinNodeJsRunConfigurationProducer :
|
||||||
RunConfigurationProducer<NodeJsRunConfiguration>(NodeJsRunConfigurationType.getInstance()) {
|
RunConfigurationProducer<NodeJsRunConfiguration>(NodeJsRunConfigurationType.getInstance()) {
|
||||||
@@ -43,9 +45,10 @@ private class KotlinNodeJsRunConfigurationProducer :
|
|||||||
val jsModule = psiFile.module?.jsOrJsImpl() ?: return false
|
val jsModule = psiFile.module?.jsOrJsImpl() ?: return false
|
||||||
val project = psiFile.project
|
val project = psiFile.project
|
||||||
|
|
||||||
if (psiElement is KtNamedFunction) {
|
val declaration = psiElement.getNonStrictParentOfType<KtNamedDeclaration>()
|
||||||
|
if (declaration is KtNamedFunction) {
|
||||||
val detector = MainFunctionDetector { it.resolveToDescriptorIfAny() }
|
val detector = MainFunctionDetector { it.resolveToDescriptorIfAny() }
|
||||||
if (!detector.isMain(psiElement, false)) return false
|
if (!detector.isMain(declaration, false)) return false
|
||||||
}
|
}
|
||||||
else if (!TestElementPath.isModuleAssociatedDir(psiElement, jsModule)) return false
|
else if (!TestElementPath.isModuleAssociatedDir(psiElement, jsModule)) return false
|
||||||
|
|
||||||
@@ -55,7 +58,7 @@ private class KotlinNodeJsRunConfigurationProducer :
|
|||||||
configuration.workingDirectory = FileUtil.toSystemDependentName(project.baseDir.path)
|
configuration.workingDirectory = FileUtil.toSystemDependentName(project.baseDir.path)
|
||||||
}
|
}
|
||||||
configuration.inputPath = jsFilePath
|
configuration.inputPath = jsFilePath
|
||||||
configuration.envs = jsModule.getNodeJsEnvironmentVars().envs
|
configuration.envs = jsModule.getNodeJsEnvironmentVars(false).envs
|
||||||
configuration.setGeneratedName()
|
configuration.setGeneratedName()
|
||||||
configuration.addBuildTask()
|
configuration.addBuildTask()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ class KotlinJestRunConfigurationProducer : JestRunConfigurationProducer() {
|
|||||||
builder.setScopeKind(JestScopeKind.TEST_FILE)
|
builder.setScopeKind(JestScopeKind.TEST_FILE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
builder.setEnvData(module.getNodeJsEnvironmentVars())
|
builder.setEnvData(module.getNodeJsEnvironmentVars(true))
|
||||||
|
|
||||||
return JestTestElementInfo(builder.build(), element)
|
return JestTestElementInfo(builder.build(), element)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -123,7 +123,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.setEnvData(module.getNodeJsEnvironmentVars())
|
builder.setEnvData(module.getNodeJsEnvironmentVars(true))
|
||||||
|
|
||||||
return MochaTestElementInfo(builder.build(), element)
|
return MochaTestElementInfo(builder.build(), element)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,26 +17,34 @@ import java.util.*
|
|||||||
|
|
||||||
const val NODE_PATH_VAR = "NODE_PATH"
|
const val NODE_PATH_VAR = "NODE_PATH"
|
||||||
|
|
||||||
fun Module.getNodeJsEnvironmentVars(): EnvironmentVariablesData {
|
fun Module.getNodeJsEnvironmentVars(isForTests: Boolean): EnvironmentVariablesData {
|
||||||
val nodeJsClasspath = getNodeJsClasspath(this).joinToString(File.pathSeparator) {
|
val nodeJsClasspath = getNodeJsClasspath(this, isForTests).joinToString(File.pathSeparator) {
|
||||||
val basePath = project.basePath ?: return@joinToString it
|
val basePath = project.basePath ?: return@joinToString it
|
||||||
FileUtil.getRelativePath(basePath, it, '/') ?: it
|
FileUtil.getRelativePath(basePath, it, '/') ?: it
|
||||||
}
|
}
|
||||||
return EnvironmentVariablesData.create(mapOf(NODE_PATH_VAR to nodeJsClasspath), true)
|
return EnvironmentVariablesData.create(mapOf(NODE_PATH_VAR to nodeJsClasspath), true)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addSingleModulePaths(target: Module, result: MutableList<String>) {
|
private fun addSingleModulePaths(
|
||||||
|
target: Module,
|
||||||
|
isForTests: Boolean,
|
||||||
|
result: MutableList<String>
|
||||||
|
) {
|
||||||
val compilerExtension = CompilerModuleExtension.getInstance(target) ?: return
|
val compilerExtension = CompilerModuleExtension.getInstance(target) ?: return
|
||||||
result.addIfNotNull(compilerExtension.compilerOutputPath?.path)
|
if (isForTests) {
|
||||||
result.addIfNotNull(compilerExtension.compilerOutputPathForTests?.let { "${it.path}/lib" })
|
result.addIfNotNull(compilerExtension.compilerOutputPath?.path)
|
||||||
|
result.addIfNotNull(compilerExtension.compilerOutputPathForTests?.let { "${it.path}/lib" })
|
||||||
|
} else {
|
||||||
|
result.addIfNotNull(compilerExtension.compilerOutputPath?.let { "${it.path}/lib" })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNodeJsClasspath(module: Module): List<String> {
|
private fun getNodeJsClasspath(module: Module, isForTests: Boolean): List<String> {
|
||||||
if (!module.shouldUseJpsOutput) return emptyList()
|
if (!module.shouldUseJpsOutput) return emptyList()
|
||||||
|
|
||||||
val result = ArrayList<String>()
|
val result = ArrayList<String>()
|
||||||
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule {
|
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule {
|
||||||
addSingleModulePaths(it, result)
|
addSingleModulePaths(it, isForTests, result)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|||||||
+1
-1
@@ -55,7 +55,7 @@ class KotlinProtractorRunConfigurationProducer :
|
|||||||
sourceElement.set(element)
|
sourceElement.set(element)
|
||||||
configuration.runSettings = configuration.runSettings.copy(
|
configuration.runSettings = configuration.runSettings.copy(
|
||||||
testFilePath = testFilePath,
|
testFilePath = testFilePath,
|
||||||
envData = jsModule.getNodeJsEnvironmentVars()
|
envData = jsModule.getNodeJsEnvironmentVars(true)
|
||||||
)
|
)
|
||||||
configuration.name = configuration.suggestedName()
|
configuration.name = configuration.suggestedName()
|
||||||
configuration.addBuildTask()
|
configuration.addBuildTask()
|
||||||
|
|||||||
Reference in New Issue
Block a user