Wizard: add support of creating run configurations
#KT-36043 fixed
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.tools.projectWizard.wizard.service
|
||||||
|
|
||||||
|
import com.intellij.execution.RunManager
|
||||||
|
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunConfiguration
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.RunConfigurationsService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.isBuildSystemAvailable
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
|
import org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType
|
||||||
|
|
||||||
|
class IdeaRunConfigurationsService(private val project: Project) : RunConfigurationsService, IdeaWizardService {
|
||||||
|
override fun ValuesReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) {
|
||||||
|
configurations.forEach { wizardConfiguration ->
|
||||||
|
if (wizardConfiguration is WizardGradleRunConfiguration && isBuildSystemAvailable(BuildSystemType.GradleKotlinDsl)) {
|
||||||
|
addGradleRunConfiguration(wizardConfiguration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun addGradleRunConfiguration(wizardConfiguration: WizardGradleRunConfiguration) {
|
||||||
|
val runManager = RunManager.getInstance(project)
|
||||||
|
val configurationFactory = GradleExternalTaskConfigurationType().configurationFactories[0]
|
||||||
|
val ideaConfiguration = runManager.createConfiguration(wizardConfiguration.configurationName, configurationFactory)
|
||||||
|
val runConfiguration = ideaConfiguration.configuration
|
||||||
|
if (runConfiguration is ExternalSystemRunConfiguration) {
|
||||||
|
runConfiguration.settings.apply {
|
||||||
|
taskNames = listOf(wizardConfiguration.taskName)
|
||||||
|
scriptParameters = wizardConfiguration.parameters.joinToString(separator = " ")
|
||||||
|
externalProjectPath = project.basePath
|
||||||
|
}
|
||||||
|
runManager.apply {
|
||||||
|
addConfiguration(ideaConfiguration)
|
||||||
|
selectedConfiguration = ideaConfiguration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -23,7 +23,8 @@ object IdeaServices {
|
|||||||
IdeaGradleWizardService(project),
|
IdeaGradleWizardService(project),
|
||||||
IdeaMavenWizardService(project),
|
IdeaMavenWizardService(project),
|
||||||
IdeaJpsWizardService(project, model),
|
IdeaJpsWizardService(project, model),
|
||||||
IdeaFileFormattingService(project)
|
IdeaFileFormattingService(project),
|
||||||
|
IdeaRunConfigurationsService(project)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.tools.projectWizard
|
||||||
|
|
||||||
|
interface WizardRunConfiguration {
|
||||||
|
val configurationName: String
|
||||||
|
}
|
||||||
|
|
||||||
|
data class WizardGradleRunConfiguration(
|
||||||
|
override val configurationName: String,
|
||||||
|
val taskName: String,
|
||||||
|
val parameters: List<String>
|
||||||
|
) : WizardRunConfiguration
|
||||||
+4
@@ -5,12 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
|
|
||||||
interface BuildSystemAvailabilityWizardService : WizardService {
|
interface BuildSystemAvailabilityWizardService : WizardService {
|
||||||
fun isAvailable(buildSystemType: BuildSystemType): Boolean
|
fun isAvailable(buildSystemType: BuildSystemType): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun ValuesReadingContext.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
|
||||||
|
service<BuildSystemAvailabilityWizardService>()!!.isAvailable(buildSystemType)
|
||||||
|
|
||||||
class BuildSystemAvailabilityWizardServiceImpl : BuildSystemAvailabilityWizardService, IdeaIndependentWizardService {
|
class BuildSystemAvailabilityWizardServiceImpl : BuildSystemAvailabilityWizardService, IdeaIndependentWizardService {
|
||||||
override fun isAvailable(buildSystemType: BuildSystemType) = true
|
override fun isAvailable(buildSystemType: BuildSystemType) = true
|
||||||
}
|
}
|
||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.tools.projectWizard.core.service
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||||
|
|
||||||
|
interface RunConfigurationsService : WizardService {
|
||||||
|
fun ValuesReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>)
|
||||||
|
}
|
||||||
|
|
||||||
|
class RunConfigurationsServiceImpl : RunConfigurationsService, IdeaIndependentWizardService {
|
||||||
|
override fun ValuesReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) = Unit
|
||||||
|
}
|
||||||
+2
-1
@@ -10,7 +10,8 @@ object Services {
|
|||||||
OsFileSystemWizardService(),
|
OsFileSystemWizardService(),
|
||||||
BuildSystemAvailabilityWizardServiceImpl(),
|
BuildSystemAvailabilityWizardServiceImpl(),
|
||||||
DummyFileFormattingService(),
|
DummyFileFormattingService(),
|
||||||
KotlinVersionProviderServiceImpl()
|
KotlinVersionProviderServiceImpl(),
|
||||||
|
RunConfigurationsServiceImpl()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
@@ -22,6 +22,7 @@ object Plugins {
|
|||||||
KotlinPlugin(context),
|
KotlinPlugin(context),
|
||||||
TemplatesPlugin(context),
|
TemplatesPlugin(context),
|
||||||
ProjectTemplatesPlugin(context),
|
ProjectTemplatesPlugin(context),
|
||||||
|
RunConfigurationsPlugin(context),
|
||||||
|
|
||||||
// templates
|
// templates
|
||||||
ConsoleJvmApplicationTemplatePlugin(context),
|
ConsoleJvmApplicationTemplatePlugin(context),
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.tools.projectWizard.plugins
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.RunConfigurationsService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
||||||
|
|
||||||
|
class RunConfigurationsPlugin(context: Context) : Plugin(context) {
|
||||||
|
val configurations by listProperty<WizardRunConfiguration>()
|
||||||
|
|
||||||
|
val createRunConfigurationsTask by pipelineTask(GenerationPhase.PROJECT_IMPORT) {
|
||||||
|
runBefore(BuildSystemPlugin::importProject)
|
||||||
|
|
||||||
|
withAction {
|
||||||
|
service<RunConfigurationsService>()!!.apply {
|
||||||
|
addRunConfigurations(RunConfigurationsPlugin::configurations.propertyValue)
|
||||||
|
}
|
||||||
|
UNIT_SUCCESS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+19
-7
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.templates
|
package org.jetbrains.kotlin.tools.projectWizard.templates
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
|
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
||||||
@@ -20,10 +20,7 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor
|
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.TemplateInterceptor
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.interceptTemplate
|
||||||
@@ -43,6 +40,21 @@ class SimpleJsClientTemplate : Template() {
|
|||||||
|
|
||||||
override val settings: List<TemplateSetting<*, *>> = listOf(renderEngine)
|
override val settings: List<TemplateSetting<*, *>> = listOf(renderEngine)
|
||||||
|
|
||||||
|
override fun ValuesReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = buildList {
|
||||||
|
if (module.originalModule.kind == ModuleKind.singleplatformJs) {
|
||||||
|
+WizardGradleRunConfiguration(
|
||||||
|
"BrowserDevelopmentRun in continuous mode",
|
||||||
|
"browserDevelopmentRun",
|
||||||
|
listOf("--continuous")
|
||||||
|
)
|
||||||
|
+WizardGradleRunConfiguration(
|
||||||
|
"BrowserProductionRun in continuous mode",
|
||||||
|
"browserProductionRun",
|
||||||
|
listOf("--continuous")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = withSettingsOf(module.originalModule) {
|
override fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = withSettingsOf(module.originalModule) {
|
||||||
buildList {
|
buildList {
|
||||||
+ArtifactBasedLibraryDependencyIR(
|
+ArtifactBasedLibraryDependencyIR(
|
||||||
|
|||||||
+10
-1
@@ -2,11 +2,16 @@ package org.jetbrains.kotlin.tools.projectWizard.templates
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.Identificator
|
import org.jetbrains.kotlin.tools.projectWizard.Identificator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner
|
import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.MultiplatformModuleIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.RunConfigurationsPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
|
||||||
@@ -91,6 +96,8 @@ abstract class Template : SettingsOwner {
|
|||||||
|
|
||||||
open fun createInterceptors(module: ModuleIR): List<TemplateInterceptor> = emptyList()
|
open fun createInterceptors(module: ModuleIR): List<TemplateInterceptor> = emptyList()
|
||||||
|
|
||||||
|
open fun ValuesReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
|
||||||
|
|
||||||
fun TaskRunningContext.applyToSourceset(
|
fun TaskRunningContext.applyToSourceset(
|
||||||
module: ModuleIR
|
module: ModuleIR
|
||||||
): TaskResult<TemplateApplicationResult> {
|
): TaskResult<TemplateApplicationResult> {
|
||||||
@@ -105,6 +112,8 @@ abstract class Template : SettingsOwner {
|
|||||||
else -> idFunction()
|
else -> idFunction()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RunConfigurationsPlugin::configurations.addValues(createRunConfigurations(module))
|
||||||
|
|
||||||
val result = TemplateApplicationResult(librariesToAdd, irsToAddToBuildFile, targetsUpdater)
|
val result = TemplateApplicationResult(librariesToAdd, irsToAddToBuildFile, targetsUpdater)
|
||||||
return result.asSuccess()
|
return result.asSuccess()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user