Js run configuration producers: get module from ConfigurationContext
Delegate mpp concerns to MultipleRunLocationsProvider EP Restore old behaviour via bunch files
This commit is contained in:
@@ -36,6 +36,8 @@ dependencies {
|
||||
compile(project(":idea:idea-core")) { isTransitive = false }
|
||||
compile(project(":idea:ide-common")) { isTransitive = false }
|
||||
compile(project(":idea:idea-gradle")) { isTransitive = false }
|
||||
compile(project(":compiler:util")) { isTransitive = false }
|
||||
compile(project(":idea:idea-jps-common")) { isTransitive = false }
|
||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
|
||||
@@ -36,6 +36,8 @@ dependencies {
|
||||
compile(project(":idea:idea-core")) { isTransitive = false }
|
||||
compile(project(":idea:ide-common")) { isTransitive = false }
|
||||
compile(project(":idea:idea-gradle")) { isTransitive = false }
|
||||
compile(project(":compiler:util")) { isTransitive = false }
|
||||
compile(project(":idea:idea-jps-common")) { isTransitive = false }
|
||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
|
||||
@@ -38,6 +38,8 @@ dependencies {
|
||||
compile(project(":idea:idea-core")) { isTransitive = false }
|
||||
compile(project(":idea:ide-common")) { isTransitive = false }
|
||||
compile(project(":idea:idea-gradle")) { isTransitive = false }
|
||||
compile(project(":compiler:util")) { isTransitive = false }
|
||||
compile(project(":idea:idea-jps-common")) { isTransitive = false }
|
||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
|
||||
@@ -38,6 +38,8 @@ dependencies {
|
||||
compile(project(":idea:idea-core")) { isTransitive = false }
|
||||
compile(project(":idea:ide-common")) { isTransitive = false }
|
||||
compile(project(":idea:idea-gradle")) { isTransitive = false }
|
||||
compile(project(":compiler:util")) { isTransitive = false }
|
||||
compile(project(":idea:idea-jps-common")) { isTransitive = false }
|
||||
compileOnly(intellijCoreDep()) { includeJars("intellij-core") }
|
||||
|
||||
if (intellijUltimateEnabled) {
|
||||
|
||||
+11
-13
@@ -17,12 +17,11 @@ import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
|
||||
import org.jetbrains.kotlin.idea.js.jsOrJsImpl
|
||||
import org.jetbrains.kotlin.idea.js.asJsModule
|
||||
import org.jetbrains.kotlin.idea.js.jsProductionOutputFilePath
|
||||
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
|
||||
@@ -45,27 +44,27 @@ private class KotlinNodeJsRunConfigurationProducer :
|
||||
override val isForTests: Boolean
|
||||
get() = false
|
||||
|
||||
private fun getConfigurationData(element: PsiElement, context: ConfigurationContext?): NodeJsConfigData? {
|
||||
if (context != null && !context.isAcceptable) return null
|
||||
val jsModule = element.module?.jsOrJsImpl() ?: return null
|
||||
val jsFilePath = jsModule.jsProductionOutputFilePath ?: return null
|
||||
override fun getConfigurationData(context: ConfigurationContext): NodeJsConfigData? {
|
||||
if (!context.isAcceptable) return null
|
||||
val element = context.psiLocation ?: return null
|
||||
val module = context.module?.asJsModule() ?: return null
|
||||
|
||||
val jsFilePath = module.jsProductionOutputFilePath ?: return null
|
||||
val declaration = element.getNonStrictParentOfType<KtNamedDeclaration>()
|
||||
if (declaration is KtNamedFunction) {
|
||||
val detector = MainFunctionDetector { it.resolveToDescriptorIfAny() }
|
||||
if (!detector.isMain(declaration, false)) return null
|
||||
} else if (!TestElementPath.isModuleAssociatedDir(element, jsModule)) return null
|
||||
return NodeJsConfigData(element, jsModule, jsFilePath)
|
||||
} else if (!TestElementPath.isModuleAssociatedDir(element, module)) return null
|
||||
return NodeJsConfigData(element, module, jsFilePath)
|
||||
}
|
||||
|
||||
override fun getConfigurationData(element: PsiElement) = getConfigurationData(element, null)
|
||||
|
||||
override fun setupConfigurationFromContext(
|
||||
configuration: NodeJsRunConfiguration,
|
||||
context: ConfigurationContext,
|
||||
sourceElement: Ref<PsiElement>
|
||||
): Boolean {
|
||||
val psiElement = sourceElement.get() ?: return false
|
||||
val configData = getConfigurationData(psiElement, context) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
|
||||
if (configuration.workingDirectory.isNullOrBlank()) {
|
||||
configuration.workingDirectory = FileUtil.toSystemDependentName(psiElement.project.baseDir.path)
|
||||
@@ -79,8 +78,7 @@ private class KotlinNodeJsRunConfigurationProducer :
|
||||
}
|
||||
|
||||
override fun isConfigurationFromContext(configuration: NodeJsRunConfiguration, context: ConfigurationContext): Boolean {
|
||||
val contextPsi = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(contextPsi, context) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
return configuration.inputPath == configData.jsOutputFilePath
|
||||
}
|
||||
}
|
||||
+12
-20
@@ -14,16 +14,14 @@ import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.util.PsiUtilCore
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
|
||||
import org.jetbrains.kotlin.idea.js.jsOrJsImpl
|
||||
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
|
||||
import org.jetbrains.kotlin.idea.js.asJsModule
|
||||
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
|
||||
|
||||
typealias JestTestElementInfo = TestElementInfo<JestRunSettings>
|
||||
|
||||
@@ -74,29 +72,24 @@ class KotlinJestRunConfigurationProducer :
|
||||
override val isForTests: Boolean
|
||||
get() = true
|
||||
|
||||
override fun getConfigurationData(element: PsiElement): JestConfigData? {
|
||||
val module = element.module
|
||||
val jsModule = module?.jsOrJsImpl() ?: return null
|
||||
override fun getConfigurationData(
|
||||
context: ConfigurationContext
|
||||
): JestConfigData? {
|
||||
val element = context.psiLocation ?: return null
|
||||
val module = context.module?.asJsModule() ?: return null
|
||||
|
||||
val file = if (jsModule != module) {
|
||||
jsModule.moduleFile
|
||||
} else {
|
||||
PsiUtilCore.getVirtualFile(element)
|
||||
} ?: return null
|
||||
val file = module.moduleFile
|
||||
|
||||
val project = module.project
|
||||
|
||||
if (!isTestRunnerPackageAvailableFor(project, file)) return null
|
||||
if (!isTestRunnerPackageAvailableFor(module.project, file)) return null
|
||||
|
||||
val testFilePath = module.jsTestOutputFilePath ?: return null
|
||||
val testElementPath = TestElementPath.forElement(element, module) ?: return null
|
||||
|
||||
return JestConfigData(element, jsModule, testFilePath, testElementPath)
|
||||
return JestConfigData(element, module, testFilePath, testElementPath)
|
||||
}
|
||||
|
||||
override fun isConfigurationFromCompatibleContext(configuration: JestRunConfiguration, context: ConfigurationContext): Boolean {
|
||||
val element = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(element) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
val (thisRunSettings, _) = createTestElementRunInfo(configData, configuration.runSettings)
|
||||
val thatRunSettings = configuration.runSettings
|
||||
|
||||
@@ -117,8 +110,7 @@ class KotlinJestRunConfigurationProducer :
|
||||
context: ConfigurationContext,
|
||||
sourceElement: Ref<PsiElement>
|
||||
): Boolean {
|
||||
val element = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(element) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
val (runSettings, enclosingTestElement) = createTestElementRunInfo(configData, configuration.runSettings)
|
||||
configuration.runSettings = runSettings
|
||||
sourceElement.set(enclosingTestElement)
|
||||
|
||||
+9
-21
@@ -26,20 +26,18 @@ import com.intellij.openapi.vfs.LocalFileSystem
|
||||
import com.intellij.openapi.vfs.VfsUtilCore
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.util.PsiUtilCore
|
||||
import com.intellij.util.SmartList
|
||||
import com.intellij.util.containers.SmartHashSet
|
||||
import com.jetbrains.nodejs.mocha.MochaUtil
|
||||
import com.jetbrains.nodejs.mocha.execution.*
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
|
||||
import org.jetbrains.kotlin.idea.js.jsOrJsImpl
|
||||
import org.jetbrains.kotlin.idea.js.asJsModule
|
||||
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>
|
||||
|
||||
@@ -104,22 +102,18 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer(), Kot
|
||||
return MochaTestElementInfo(builder.build(), configData.element)
|
||||
}
|
||||
|
||||
private fun getConfigurationData(element: PsiElement, context: ConfigurationContext?): MochaConfigData? {
|
||||
val module = element.module
|
||||
val jsModule = module?.jsOrJsImpl() ?: return null
|
||||
val file = if (jsModule != module) {
|
||||
jsModule.moduleFile
|
||||
} else {
|
||||
PsiUtilCore.getVirtualFile(element)
|
||||
} ?: return null
|
||||
override fun getConfigurationData(context: ConfigurationContext): MochaConfigData? {
|
||||
val module = context.module?.asJsModule() ?: return null
|
||||
val element = context.psiLocation ?: return null
|
||||
val file = module.moduleFile ?: return null
|
||||
val project = module.project
|
||||
|
||||
val testFilePath = module.jsTestOutputFilePath ?: return null
|
||||
val testElementPath = TestElementPath.forElement(element, module) ?: return null
|
||||
|
||||
val configData = MochaConfigData(element, jsModule, testFilePath, testElementPath)
|
||||
val configData = MochaConfigData(element, module, testFilePath, testElementPath)
|
||||
|
||||
if (context?.getOriginalConfiguration(MochaConfigurationType.getInstance()) is MochaRunConfiguration) return configData
|
||||
if (context.getOriginalConfiguration(MochaConfigurationType.getInstance()) is MochaRunConfiguration) return configData
|
||||
|
||||
if (isTestRunnerPackageAvailableFor(project, file)) return configData
|
||||
|
||||
@@ -139,13 +133,8 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer(), Kot
|
||||
override val isForTests: Boolean
|
||||
get() = true
|
||||
|
||||
override fun getConfigurationData(element: PsiElement): MochaConfigData? {
|
||||
return getConfigurationData(element, null)
|
||||
}
|
||||
|
||||
override fun isConfigurationFromCompatibleContext(configuration: MochaRunConfiguration, context: ConfigurationContext): Boolean {
|
||||
val element = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(element) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
val (thisRunSettings, _) = createTestElementRunInfo(configData, configuration.runSettings)
|
||||
val thatRunSettings = configuration.runSettings
|
||||
val thisTestKind = thisRunSettings.testKind
|
||||
@@ -165,8 +154,7 @@ class KotlinMochaRunConfigurationProducer : MochaRunConfigurationProducer(), Kot
|
||||
context: ConfigurationContext,
|
||||
sourceElement: Ref<PsiElement>
|
||||
): Boolean {
|
||||
val element = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(element, context) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
val (runSettings, enclosingTestElement) = createTestElementRunInfo(configData, configuration.runSettings)
|
||||
if (runSettings.testKind == MochaTestKind.DIRECTORY) return false
|
||||
configuration.runSettings = runSettings
|
||||
|
||||
+9
-9
@@ -19,13 +19,12 @@ package org.jetbrains.kotlin.idea.nodejs.protractor
|
||||
import com.intellij.execution.actions.CompatibleRunConfigurationProducer
|
||||
import com.intellij.execution.actions.ConfigurationContext
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.openapi.util.Ref
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationData
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJSRunConfigurationDataProvider
|
||||
import org.jetbrains.kotlin.idea.js.jsOrJsImpl
|
||||
import org.jetbrains.kotlin.idea.js.asJsModule
|
||||
import org.jetbrains.kotlin.idea.js.jsTestOutputFilePath
|
||||
import org.jetbrains.kotlin.idea.nodejs.TestElementPath
|
||||
import org.jetbrains.kotlin.idea.nodejs.getNodeJsEnvironmentVars
|
||||
@@ -43,11 +42,13 @@ class KotlinProtractorRunConfigurationProducer :
|
||||
override val isForTests: Boolean
|
||||
get() = true
|
||||
|
||||
override fun getConfigurationData(element: PsiElement): ProtractorConfigData? {
|
||||
val module = ModuleUtilCore.findModuleForPsiElement(element) ?: return null
|
||||
override fun getConfigurationData(
|
||||
context: ConfigurationContext
|
||||
): ProtractorConfigData? {
|
||||
val module = context.module?.asJsModule() ?: return null
|
||||
val element = context.psiLocation ?: return null
|
||||
if (!TestElementPath.isModuleAssociatedDir(element, module)) return null
|
||||
val jsModule = module.jsOrJsImpl() ?: return null
|
||||
val testFilePath = jsModule.jsTestOutputFilePath ?: return null
|
||||
val testFilePath = module.jsTestOutputFilePath ?: return null
|
||||
return ProtractorConfigData(element, module, testFilePath)
|
||||
}
|
||||
|
||||
@@ -55,8 +56,7 @@ class KotlinProtractorRunConfigurationProducer :
|
||||
configuration: KotlinProtractorRunConfiguration,
|
||||
context: ConfigurationContext
|
||||
): Boolean {
|
||||
val contextPsi = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(contextPsi) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
return configuration.runSettings.testFileSystemDependentPath == FileUtil.toSystemDependentName(configData.jsOutputFilePath)
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ class KotlinProtractorRunConfigurationProducer :
|
||||
sourceElement: Ref<PsiElement>
|
||||
): Boolean {
|
||||
val element = context.psiLocation ?: return false
|
||||
val configData = getConfigurationData(element) ?: return false
|
||||
val configData = getConfigurationData(context) ?: return false
|
||||
sourceElement.set(element)
|
||||
configuration.runSettings = configuration.runSettings.copy(
|
||||
testFilePath = configData.jsOutputFilePath,
|
||||
|
||||
Reference in New Issue
Block a user