Kotlin Ultimate: Add "Build" action to JS run configurations
#KT-20522 Fixed
This commit is contained in:
@@ -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)
|
||||
+2
@@ -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? {
|
||||
|
||||
+2
@@ -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 {
|
||||
|
||||
+2
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user