From f4936d3e31fd7f904a06dc1f040a18007d6c2c20 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Wed, 21 Mar 2018 20:30:48 +0300 Subject: [PATCH] JS: Fix NodeJS run configuration support #KT-16710 Fixed --- .../KotlinNodeJsRunConfigurationProducer.kt | 9 +++++--- .../KotlinJestRunConfigurationProducer.kt | 2 +- .../KotlinMochaRunConfigurationProducer.kt | 2 +- .../kotlin/idea/nodejs/nodeJsUtil.kt | 22 +++++++++++++------ ...otlinProtractorRunConfigurationProducer.kt | 2 +- 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/cli/KotlinNodeJsRunConfigurationProducer.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/cli/KotlinNodeJsRunConfigurationProducer.kt index db36d844b57..5fcdfb994a4 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/cli/KotlinNodeJsRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/cli/KotlinNodeJsRunConfigurationProducer.kt @@ -21,7 +21,9 @@ import org.jetbrains.kotlin.idea.nodejs.TestElementPath import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars import org.jetbrains.kotlin.idea.run.addBuildTask import org.jetbrains.kotlin.idea.util.module +import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtNamedFunction +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType private class KotlinNodeJsRunConfigurationProducer : RunConfigurationProducer(NodeJsRunConfigurationType.getInstance()) { @@ -43,9 +45,10 @@ private class KotlinNodeJsRunConfigurationProducer : val jsModule = psiFile.module?.jsOrJsImpl() ?: return false val project = psiFile.project - if (psiElement is KtNamedFunction) { + val declaration = psiElement.getNonStrictParentOfType() + if (declaration is KtNamedFunction) { 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 @@ -55,7 +58,7 @@ private class KotlinNodeJsRunConfigurationProducer : configuration.workingDirectory = FileUtil.toSystemDependentName(project.baseDir.path) } configuration.inputPath = jsFilePath - configuration.envs = jsModule.getNodeJsEnvironmentVars().envs + configuration.envs = jsModule.getNodeJsEnvironmentVars(false).envs configuration.setGeneratedName() configuration.addBuildTask() diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt index 787471631ad..fe907a3d2d7 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt @@ -52,7 +52,7 @@ class KotlinJestRunConfigurationProducer : JestRunConfigurationProducer() { builder.setScopeKind(JestScopeKind.TEST_FILE) } } - builder.setEnvData(module.getNodeJsEnvironmentVars()) + builder.setEnvData(module.getNodeJsEnvironmentVars(true)) return JestTestElementInfo(builder.build(), element) } diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt index d8ba1b0b5b4..bbd98374f85 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt @@ -123,7 +123,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer() { } } - builder.setEnvData(module.getNodeJsEnvironmentVars()) + builder.setEnvData(module.getNodeJsEnvironmentVars(true)) return MochaTestElementInfo(builder.build(), element) } diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt index e0383295fe1..eec7a308e89 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt @@ -17,26 +17,34 @@ import java.util.* const val NODE_PATH_VAR = "NODE_PATH" -fun Module.getNodeJsEnvironmentVars(): EnvironmentVariablesData { - val nodeJsClasspath = getNodeJsClasspath(this).joinToString(File.pathSeparator) { +fun Module.getNodeJsEnvironmentVars(isForTests: Boolean): EnvironmentVariablesData { + val nodeJsClasspath = getNodeJsClasspath(this, isForTests).joinToString(File.pathSeparator) { val basePath = project.basePath ?: return@joinToString it FileUtil.getRelativePath(basePath, it, '/') ?: it } return EnvironmentVariablesData.create(mapOf(NODE_PATH_VAR to nodeJsClasspath), true) } -private fun addSingleModulePaths(target: Module, result: MutableList) { +private fun addSingleModulePaths( + target: Module, + isForTests: Boolean, + result: MutableList +) { val compilerExtension = CompilerModuleExtension.getInstance(target) ?: return - result.addIfNotNull(compilerExtension.compilerOutputPath?.path) - result.addIfNotNull(compilerExtension.compilerOutputPathForTests?.let { "${it.path}/lib" }) + if (isForTests) { + 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 { +private fun getNodeJsClasspath(module: Module, isForTests: Boolean): List { if (!module.shouldUseJpsOutput) return emptyList() val result = ArrayList() ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule { - addSingleModulePaths(it, result) + addSingleModulePaths(it, isForTests, result) true } return result diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt index 5005a74d3f5..370134cfa9a 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt @@ -55,7 +55,7 @@ class KotlinProtractorRunConfigurationProducer : sourceElement.set(element) configuration.runSettings = configuration.runSettings.copy( testFilePath = testFilePath, - envData = jsModule.getNodeJsEnvironmentVars() + envData = jsModule.getNodeJsEnvironmentVars(true) ) configuration.name = configuration.suggestedName() configuration.addBuildTask()