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.jps.util.JpsPathUtil
|
||||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
||||||
import org.jetbrains.kotlin.idea.facet.implementingModules
|
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.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.js.resolve.JsPlatform
|
import org.jetbrains.kotlin.js.resolve.JsPlatform
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||||
|
import org.jetbrains.plugins.gradle.settings.GradleSystemRunningSettings
|
||||||
|
|
||||||
val Module.jsTestOutputFilePath: String?
|
val Module.jsTestOutputFilePath: String?
|
||||||
get() {
|
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 compilerExtension = CompilerModuleExtension.getInstance(this)
|
||||||
val outputDir = compilerExtension?.compilerOutputUrlForTests ?: return null
|
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 TargetPlatform.Common -> implementingModules.firstOrNull { TargetPlatformDetector.getPlatform(it) is JsPlatform }
|
||||||
is JsPlatform -> this
|
is JsPlatform -> this
|
||||||
else -> null
|
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.TestElementInfo
|
||||||
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
|
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.util.projectStructure.module
|
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
||||||
|
|
||||||
private typealias JestTestElementInfo = TestElementInfo<JestRunSettings>
|
private typealias JestTestElementInfo = TestElementInfo<JestRunSettings>
|
||||||
@@ -94,6 +95,7 @@ class KotlinJestRunConfigurationProducer : JestRunConfigurationProducer() {
|
|||||||
configuration.runSettings = runSettings
|
configuration.runSettings = runSettings
|
||||||
sourceElement.set(enclosingTestElement)
|
sourceElement.set(enclosingTestElement)
|
||||||
configuration.setGeneratedName()
|
configuration.setGeneratedName()
|
||||||
|
configuration.addBuildTask()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.idea.nodejs
|
package org.jetbrains.kotlin.idea.nodejs
|
||||||
|
|
||||||
import com.intellij.openapi.module.Module
|
import com.intellij.openapi.module.Module
|
||||||
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir
|
import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir
|
||||||
@@ -24,7 +25,10 @@ sealed class TestElementPath {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun isModuleAssociatedDir(element: PsiElement, module: Module): Boolean {
|
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? {
|
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.TestElementInfo
|
||||||
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
|
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.util.projectStructure.module
|
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
||||||
|
|
||||||
private typealias MochaTestElementInfo = TestElementInfo<MochaRunSettings>
|
private typealias MochaTestElementInfo = TestElementInfo<MochaRunSettings>
|
||||||
@@ -155,6 +156,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer() {
|
|||||||
configuration.runSettings = runSettings
|
configuration.runSettings = runSettings
|
||||||
sourceElement.set(enclosingTestElement)
|
sourceElement.set(enclosingTestElement)
|
||||||
configuration.setGeneratedName()
|
configuration.setGeneratedName()
|
||||||
|
configuration.addBuildTask()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@ import com.intellij.openapi.module.Module
|
|||||||
import com.intellij.openapi.roots.CompilerModuleExtension
|
import com.intellij.openapi.roots.CompilerModuleExtension
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
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 org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -32,7 +32,7 @@ private fun addSingleModulePaths(target: Module, result: MutableList<String>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getNodeJsClasspath(module: Module): List<String> {
|
private fun getNodeJsClasspath(module: Module): List<String> {
|
||||||
if (module.isGradleModule()) 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 {
|
||||||
|
|||||||
+2
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.js.jsOrJsImpl
|
|||||||
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
|
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
|
||||||
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
|
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.util.projectStructure.module
|
import org.jetbrains.kotlin.idea.util.projectStructure.module
|
||||||
|
|
||||||
class KotlinProtractorRunConfigurationProducer :
|
class KotlinProtractorRunConfigurationProducer :
|
||||||
@@ -57,6 +58,7 @@ class KotlinProtractorRunConfigurationProducer :
|
|||||||
envData = jsModule.getNodeJsEnvironmentVars()
|
envData = jsModule.getNodeJsEnvironmentVars()
|
||||||
)
|
)
|
||||||
configuration.name = configuration.suggestedName()
|
configuration.name = configuration.suggestedName()
|
||||||
|
configuration.addBuildTask()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user