diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/rcUtils.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/rcUtils.kt new file mode 100644 index 00000000000..9777f8790b5 --- /dev/null +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/run/rcUtils.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.run + +import com.intellij.compiler.options.CompileStepBeforeRun +import com.intellij.execution.configurations.RunConfiguration + +fun RunConfiguration.addBuildTask() { + beforeRunTasks = beforeRunTasks + CompileStepBeforeRun.MakeBeforeRunTask() +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt index 1514a80529b..a5341d842ac 100644 --- a/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/js/jsUtils.kt @@ -21,13 +21,17 @@ import com.intellij.openapi.roots.CompilerModuleExtension import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.idea.facet.KotlinFacet import org.jetbrains.kotlin.idea.facet.implementingModules +import org.jetbrains.kotlin.idea.framework.isGradleModule import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.js.resolve.JsPlatform import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings val Module.jsTestOutputFilePath: String? get() { - (KotlinFacet.get(this)?.configuration?.settings?.testOutputPath)?.let { return it } + if (!shouldUseJpsOutput) { + (KotlinFacet.get(this)?.configuration?.settings?.testOutputPath)?.let { return it } + } val compilerExtension = CompilerModuleExtension.getInstance(this) val outputDir = compilerExtension?.compilerOutputUrlForTests ?: return null @@ -38,4 +42,7 @@ fun Module.jsOrJsImpl() = when (TargetPlatformDetector.getPlatform(this)) { is TargetPlatform.Common -> implementingModules.firstOrNull { TargetPlatformDetector.getPlatform(it) is JsPlatform } is JsPlatform -> this else -> null -} \ No newline at end of file +} + +val Module.shouldUseJpsOutput: Boolean + get() = !(isGradleModule() && GradleSystemRunningSettings.getInstance().isUseGradleAwareMake) \ No newline at end of file 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 87e03fec9e1..787471631ad 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jest/KotlinJestRunConfigurationProducer.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath import org.jetbrains.kotlin.idea.nodejs.TestElementInfo 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.projectStructure.module private typealias JestTestElementInfo = TestElementInfo @@ -94,6 +95,7 @@ class KotlinJestRunConfigurationProducer : JestRunConfigurationProducer() { configuration.runSettings = runSettings sourceElement.set(enclosingTestElement) configuration.setGeneratedName() + configuration.addBuildTask() return true } } \ No newline at end of file diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jsTestUtils.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jsTestUtils.kt index f05eb81dbe4..9c0e2891394 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jsTestUtils.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/jsTestUtils.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.idea.nodejs import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ModuleRootManager import com.intellij.psi.PsiDirectory import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir @@ -24,7 +25,10 @@ sealed class TestElementPath { companion object { fun isModuleAssociatedDir(element: PsiElement, module: Module): Boolean { - return element is PsiDirectory && module.getModuleDir() == element.virtualFile.path + if (element !is PsiDirectory) return false + val virtualFile = element.virtualFile + return (module.getModuleDir() == virtualFile.path + || virtualFile == ModuleRootManager.getInstance(module).contentRoots.singleOrNull()) } fun forElement(element: PsiElement, module: Module): TestElementPath? { 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 c3cc231e1aa..d8ba1b0b5b4 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/mocha/KotlinMochaRunConfigurationProducer.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath import org.jetbrains.kotlin.idea.nodejs.TestElementInfo 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.projectStructure.module private typealias MochaTestElementInfo = TestElementInfo @@ -155,6 +156,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer() { configuration.runSettings = runSettings sourceElement.set(enclosingTestElement) configuration.setGeneratedName() + configuration.addBuildTask() return true } } \ No newline at end of file diff --git a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt index 36611cbf8ba..e0383295fe1 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/nodeJsUtil.kt @@ -10,7 +10,7 @@ import com.intellij.openapi.module.Module import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.util.io.FileUtil -import org.jetbrains.kotlin.idea.framework.isGradleModule +import org.jetbrains.kotlin.idea.js.shouldUseJpsOutput import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File import java.util.* @@ -32,7 +32,7 @@ private fun addSingleModulePaths(target: Module, result: MutableList) { } private fun getNodeJsClasspath(module: Module): List { - if (module.isGradleModule()) return emptyList() + if (!module.shouldUseJpsOutput) return emptyList() val result = ArrayList() ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule { 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 0a8fd884eac..5005a74d3f5 100644 --- a/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt +++ b/ultimate/src/org/jetbrains/kotlin/idea/nodejs/protractor/KotlinProtractorRunConfigurationProducer.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.js.jsOrJsImpl import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath 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.projectStructure.module class KotlinProtractorRunConfigurationProducer : @@ -57,6 +58,7 @@ class KotlinProtractorRunConfigurationProducer : envData = jsModule.getNodeJsEnvironmentVars() ) configuration.name = configuration.suggestedName() + configuration.addBuildTask() return true } } \ No newline at end of file