Kotlin Ultimate: Add "Build" action to JS run configurations

#KT-20522 Fixed
This commit is contained in:
Alexey Sedunov
2018-01-22 12:54:53 +03:00
parent 8ffb205f1c
commit 80887a84ca
7 changed files with 35 additions and 5 deletions
@@ -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()
}
@@ -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
}
}
val Module.shouldUseJpsOutput: Boolean
get() = !(isGradleModule() && GradleSystemRunningSettings.getInstance().isUseGradleAwareMake)
@@ -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<JestRunSettings>
@@ -94,6 +95,7 @@ class KotlinJestRunConfigurationProducer : JestRunConfigurationProducer() {
configuration.runSettings = runSettings
sourceElement.set(enclosingTestElement)
configuration.setGeneratedName()
configuration.addBuildTask()
return true
}
}
@@ -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? {
@@ -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<MochaRunSettings>
@@ -155,6 +156,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer() {
configuration.runSettings = runSettings
sourceElement.set(enclosingTestElement)
configuration.setGeneratedName()
configuration.addBuildTask()
return true
}
}
@@ -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<String>) {
}
private fun getNodeJsClasspath(module: Module): List<String> {
if (module.isGradleModule()) return emptyList()
if (!module.shouldUseJpsOutput) return emptyList()
val result = ArrayList<String>()
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachModule {
@@ -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
}
}