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),
|
||||
IdeaMavenWizardService(project),
|
||||
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
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||
|
||||
interface BuildSystemAvailabilityWizardService : WizardService {
|
||||
fun isAvailable(buildSystemType: BuildSystemType): Boolean
|
||||
}
|
||||
|
||||
fun ValuesReadingContext.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
|
||||
service<BuildSystemAvailabilityWizardService>()!!.isAvailable(buildSystemType)
|
||||
|
||||
class BuildSystemAvailabilityWizardServiceImpl : BuildSystemAvailabilityWizardService, IdeaIndependentWizardService {
|
||||
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(),
|
||||
BuildSystemAvailabilityWizardServiceImpl(),
|
||||
DummyFileFormattingService(),
|
||||
KotlinVersionProviderServiceImpl()
|
||||
KotlinVersionProviderServiceImpl(),
|
||||
RunConfigurationsServiceImpl()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+1
@@ -22,6 +22,7 @@ object Plugins {
|
||||
KotlinPlugin(context),
|
||||
TemplatesPlugin(context),
|
||||
ProjectTemplatesPlugin(context),
|
||||
RunConfigurationsPlugin(context),
|
||||
|
||||
// templates
|
||||
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
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
|
||||
import org.jetbrains.kotlin.tools.projectWizard.WizardGradleRunConfiguration
|
||||
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
|
||||
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.ModuleType
|
||||
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.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.buildsystem.*
|
||||
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.interceptTemplate
|
||||
@@ -43,6 +40,21 @@ class SimpleJsClientTemplate : Template() {
|
||||
|
||||
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) {
|
||||
buildList {
|
||||
+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.SettingsOwner
|
||||
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
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.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.kotlin.ModuleType
|
||||
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 ValuesReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
|
||||
|
||||
fun TaskRunningContext.applyToSourceset(
|
||||
module: ModuleIR
|
||||
): TaskResult<TemplateApplicationResult> {
|
||||
@@ -105,6 +112,8 @@ abstract class Template : SettingsOwner {
|
||||
else -> idFunction()
|
||||
}
|
||||
|
||||
RunConfigurationsPlugin::configurations.addValues(createRunConfigurations(module))
|
||||
|
||||
val result = TemplateApplicationResult(librariesToAdd, irsToAddToBuildFile, targetsUpdater)
|
||||
return result.asSuccess()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user