Wizard: refactoring: rename contexts

TaskRunningContext -> WriteContext,
ValuesReadingContext -> ReadingContext
This commit is contained in:
Ilya Kirillov
2020-02-20 18:53:02 +03:00
parent 1c49b230f4
commit 7a3d730aec
55 changed files with 233 additions and 266 deletions
@@ -2,7 +2,6 @@ package org.jetbrains.kotlin.tools.projectWizard
import org.jetbrains.kotlin.tools.projectWizard.core.EntitiesOwnerDescriptor
import org.jetbrains.kotlin.tools.projectWizard.core.Parser
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
@@ -5,14 +5,14 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType
sealed class CheckerRule {
abstract fun check(context: ValuesReadingContext): Boolean
abstract fun check(context: ReadingContext): Boolean
}
data class RuleBySettingValue(
val settingReference: SettingReference<Any, SettingType<Any>>,
val expectedValue: Any
) : CheckerRule() {
override fun check(context: ValuesReadingContext): Boolean = with(context) {
override fun check(context: ReadingContext): Boolean = with(context) {
settingReference.notRequiredSettingValue() == expectedValue
}
}
@@ -21,11 +21,11 @@ data class OrRule(
val left: CheckerRule,
val right: CheckerRule
) : CheckerRule() {
override fun check(context: ValuesReadingContext): Boolean = left.check(context) || right.check(context)
override fun check(context: ReadingContext): Boolean = left.check(context) || right.check(context)
}
data class Checker(val rules: List<CheckerRule>) {
fun check(context: ValuesReadingContext) =
fun check(context: ReadingContext) =
rules.all { rule -> rule.check(context) }
class Builder {
@@ -64,5 +64,5 @@ interface ContextOwner {
interface ActivityCheckerOwner {
val activityChecker: Checker
fun isActive(valuesReadingContext: ValuesReadingContext) = activityChecker.check(valuesReadingContext)
fun isActive(readingContext: ReadingContext) = activityChecker.check(readingContext)
}
@@ -7,7 +7,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.service.SettingSavingWizard
import kotlin.reflect.KClass
import kotlin.reflect.KProperty1
open class ValuesReadingContext(
open class ReadingContext(
val context: Context,
private val servicesManager: ServicesManager,
val isUnitTestMode: Boolean
@@ -5,15 +5,15 @@ import org.jetbrains.kotlin.tools.projectWizard.core.entity.Task1
import org.jetbrains.kotlin.tools.projectWizard.core.entity.Task1Reference
import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager
class TaskRunningContext(
class WritingContext(
context: Context,
servicesManager: ServicesManager,
isUnitTestMode: Boolean
) : ValuesReadingContext(context, servicesManager, isUnitTestMode) {
) : ReadingContext(context, servicesManager, isUnitTestMode) {
fun <A, B : Any> Task1Reference<A, B>.execute(value: A): TaskResult<B> {
@Suppress("UNCHECKED_CAST")
val task = context.taskContext.getEntity(this) as Task1<A, B>
return task.action(this@TaskRunningContext, value)
return task.action(this@WritingContext, value)
}
inline fun <reified T : Any> PropertyReference<T>.update(
@@ -131,7 +131,7 @@ class SettingContext(val onUpdated: (SettingReference<*, *>) -> Unit) {
onUpdated(reference)
}
fun ValuesReadingContext.initPluginSettings(settings: List<PluginSetting<*, *>>) {
fun ReadingContext.initPluginSettings(settings: List<PluginSetting<*, *>>) {
for (setting in settings) {
setting.savedOrDefaultValue?.let { values[setting.path] = it }
}
@@ -215,7 +215,7 @@ abstract class SettingBuilder<V : Any, T : SettingType<V>>(
this.validator = this.validator and validator
}
fun validate(validator: ValuesReadingContext.(V) -> ValidationResult) {
fun validate(validator: ReadingContext.(V) -> ValidationResult) {
this.validator = this.validator and settingValidator(validator)
}
@@ -318,7 +318,7 @@ class DropDownSettingType<V : DisplayableSettingItem>(
}
typealias DropDownSettingTypeFilter <V> =
ValuesReadingContext.(SettingReference<V, DropDownSettingType<V>>, V) -> Boolean
ReadingContext.(SettingReference<V, DropDownSettingType<V>>, V) -> Boolean
class ValueSettingType<V : Any>(
@@ -3,20 +3,20 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity
import org.jetbrains.kotlin.tools.projectWizard.core.Failure
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
import org.jetbrains.kotlin.tools.projectWizard.core.ValidationError
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
inline class SettingValidator<V>(val validate: ValuesReadingContext.(V) -> ValidationResult) {
inline class SettingValidator<V>(val validate: ReadingContext.(V) -> ValidationResult) {
infix fun and(other: SettingValidator<V>) = SettingValidator<V> { value ->
validate(value) and other.validate(this, value)
}
operator fun ValuesReadingContext.invoke(value: V) = validate(value)
operator fun ReadingContext.invoke(value: V) = validate(value)
}
fun <V> settingValidator(validator: ValuesReadingContext.(V) -> ValidationResult) =
fun <V> settingValidator(validator: ReadingContext.(V) -> ValidationResult) =
SettingValidator(validator)
fun <V> inValidatorContext(validator: ValuesReadingContext.(V) -> SettingValidator<V>) =
fun <V> inValidatorContext(validator: ReadingContext.(V) -> SettingValidator<V>) =
SettingValidator<V> { value ->
validator(value).validate(this, value)
}
@@ -96,7 +96,7 @@ interface Validatable<out V> {
val validator: SettingValidator<@UnsafeVariance V>
}
fun <V, Q : Validatable<Q>> ValuesReadingContext.validateList(list: List<Q>) = settingValidator<V> {
fun <V, Q : Validatable<Q>> ReadingContext.validateList(list: List<Q>) = settingValidator<V> {
list.fold(ValidationResult.OK as ValidationResult) { result, value ->
result and value.validator.validate(this, value).withTarget(value)
}
@@ -14,12 +14,12 @@ sealed class Task : EntityBase()
data class Task1<A, B : Any>(
override val path: String,
val action: TaskRunningContext.(A) -> TaskResult<B>
val action: WritingContext.(A) -> TaskResult<B>
) : Task() {
class Builder<A, B : Any>(private val name: String) {
private var action: TaskRunningContext.(A) -> TaskResult<B> = { Failure() }
private var action: WritingContext.(A) -> TaskResult<B> = { Failure() }
fun withAction(action: TaskRunningContext.(A) -> TaskResult<B>) {
fun withAction(action: WritingContext.(A) -> TaskResult<B>) {
this.action = action
}
@@ -38,7 +38,7 @@ data class Task1<A, B : Any>(
data class PipelineTask(
override val path: String,
val action: TaskRunningContext.() -> TaskResult<Unit>,
val action: WritingContext.() -> TaskResult<Unit>,
val before: List<PipelineTaskReference>,
val after: List<PipelineTaskReference>,
val phase: GenerationPhase,
@@ -49,7 +49,7 @@ data class PipelineTask(
private val name: String,
private val phase: GenerationPhase
) {
private var action: TaskRunningContext.() -> TaskResult<Unit> = { UNIT_SUCCESS }
private var action: WritingContext.() -> TaskResult<Unit> = { UNIT_SUCCESS }
private val before = mutableListOf<PipelineTaskReference>()
private val after = mutableListOf<PipelineTaskReference>()
@@ -57,7 +57,7 @@ data class PipelineTask(
var title: String? = null
fun withAction(action: TaskRunningContext.() -> TaskResult<Unit>) {
fun withAction(action: WritingContext.() -> TaskResult<Unit>) {
this.action = action
}
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
interface BuildSystemAvailabilityWizardService : WizardService {
fun isAvailable(buildSystemType: BuildSystemType): Boolean
}
fun ValuesReadingContext.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
fun ReadingContext.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
service<BuildSystemAvailabilityWizardService>().isAvailable(buildSystemType)
class BuildSystemAvailabilityWizardServiceImpl : BuildSystemAvailabilityWizardService, IdeaIndependentWizardService {
@@ -6,12 +6,12 @@
package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
interface RunConfigurationsService : WizardService {
fun ValuesReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>)
fun ReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>)
}
class RunConfigurationsServiceImpl : RunConfigurationsService, IdeaIndependentWizardService {
override fun ValuesReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) = Unit
override fun ReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) = Unit
}
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.BuildScrip
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.RawGradleIR
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
import org.jetbrains.kotlin.tools.projectWizard.plugins.AndroidPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
@@ -44,7 +43,7 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
}
override fun ValuesReadingContext.createBuildFileIRs(
override fun ReadingContext.createBuildFileIRs(
configurationData: ModuleConfigurationData,
module: Module
) =
@@ -73,7 +72,7 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
).map(::BuildScriptDependencyIR)
}
override fun TaskRunningContext.runArbitraryTask(
override fun WritingContext.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -88,7 +87,7 @@ object AndroidSinglePlatformModuleConfigurator : ModuleConfiguratorWithSettings(
)
}
override fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
buildList {
+ArtifactBasedLibraryDependencyIR(
MavenArtifact(DefaultRepository.GOOGLE, "androidx.appcompat", "appcompat"),
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR
@@ -35,7 +35,7 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi
version = configurationData.kotlinVersion
)
override fun ValuesReadingContext.createBuildFileIRs(
override fun ReadingContext.createBuildFileIRs(
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> = buildList {
@@ -177,7 +177,7 @@ val ModuleConfigurator.settings
else -> emptyList()
}
fun ValuesReadingContext.allSettingsOfModuleConfigurator(moduleConfigurator: ModuleConfigurator) = when (moduleConfigurator) {
fun ReadingContext.allSettingsOfModuleConfigurator(moduleConfigurator: ModuleConfigurator) = when (moduleConfigurator) {
is ModuleConfiguratorWithSettings -> buildList<Setting<Any, SettingType<Any>>> {
+moduleConfigurator.getConfiguratorSettings()
+moduleConfigurator.getPluginSettings().map { it.pluginSetting }
@@ -201,13 +201,13 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
val suggestedModuleName: String? get() = null
val canContainSubModules: Boolean get() = false
fun ValuesReadingContext.createBuildFileIRs(
fun ReadingContext.createBuildFileIRs(
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
emptyList()
fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
emptyList()
fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? =
@@ -217,7 +217,7 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? =
null
fun TaskRunningContext.runArbitraryTask(
fun WritingContext.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
@@ -37,7 +37,7 @@ abstract class ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings() {
abstract fun defaultTestFramework(): KotlinTestFramework
override fun ValuesReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
override fun ReadingContext.createModuleIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
withSettingsOf(module) {
testFramework.reference.settingValue.dependencyNames.map { dependencyName ->
KotlinArbitraryDependencyIR(
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.CreateGradleValueIR
@@ -34,7 +34,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
override val text = "For Current System"
override fun ValuesReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> {
val moduleName = module.name
val variableName = "${moduleName}Target"
@@ -74,7 +74,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
}
}
override fun ValuesReadingContext.createBuildFileIRs(
override fun ReadingContext.createBuildFileIRs(
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> = buildList {
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.*
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
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.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
@@ -20,8 +19,8 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType {
fun canCoexistsWith(other: List<TargetConfigurator>): Boolean = true
fun ValuesReadingContext.createTargetIrs(module: Module): List<BuildSystemIR>
fun ValuesReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR>
fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = emptyList()
}
abstract class TargetConfiguratorWithTests : ModuleConfiguratorWithTests(), TargetConfigurator
@@ -40,7 +39,7 @@ interface SimpleTargetConfigurator : TargetConfigurator {
override val suggestedModuleName: String? get() = moduleSubType.name
override fun ValuesReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
module.createTargetAccessIr(moduleSubType),
createInnerTargetIrs(module)
@@ -64,7 +63,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
override fun ValuesReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js),
buildList {
@@ -82,7 +81,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator {
override val suggestedModuleName = "nodeJs"
override fun ValuesReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js),
buildList {
@@ -110,7 +109,7 @@ object JvmTargetConfigurator : JvmModuleConfigurator(),
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
override fun ValuesReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = buildList {
override fun ReadingContext.createInnerTargetIrs(module: Module): List<BuildSystemIR> = buildList {
val targetVersionValue = withSettingsOf(module) { targetJvmVersion.reference.settingValue.value }
when {
buildSystemType.isGradle -> {
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
@@ -84,7 +84,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator(),
)
override fun ValuesReadingContext.createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
override fun ReadingContext.createBuildFileIRs(configurationData: ModuleConfigurationData, module: Module): List<BuildSystemIR> =
buildList {
+GradleImportIR("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")
@@ -37,14 +37,14 @@ class StructurePlugin(context: Context) : Plugin(context) {
}
}
val ValuesReadingContext.projectPath
val ReadingContext.projectPath
get() = StructurePlugin::projectPath.reference.settingValue
val ValuesReadingContext.projectName
val ReadingContext.projectName
get() = StructurePlugin::name.reference.settingValue
fun TaskRunningContext.pomIR() = PomIR(
fun WritingContext.pomIR() = PomIR(
artifactId = StructurePlugin::artifactId.reference.settingValue,
groupId = StructurePlugin::groupId.reference.settingValue,
version = Version.fromString(StructurePlugin::version.reference.settingValue)
@@ -15,12 +15,10 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.printBuildFile
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
import java.nio.file.Path
abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
val type by enumSetting<BuildSystemType>("Build System", GenerationPhase.FIRST_STEP) {
@@ -127,12 +125,12 @@ val BuildSystemType.isGradle
get() = this == BuildSystemType.GradleGroovyDsl
|| this == BuildSystemType.GradleKotlinDsl
val TaskRunningContext.allModules
val WritingContext.allModules
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
buildFile.modules.modules
}
val TaskRunningContext.allModulesPaths
val WritingContext.allModulesPaths
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
val paths = when (val structure = buildFile.modules) {
is MultiplatformModulesStructureIR -> listOf(buildFile.directoryPath)
@@ -147,6 +145,6 @@ val TaskRunningContext.allModulesPaths
}
val ValuesReadingContext.buildSystemType: BuildSystemType
val ReadingContext.buildSystemType: BuildSystemType
get() = BuildSystemPlugin::type.reference.settingValue
@@ -3,11 +3,9 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.SettingsGradleFileIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.render
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.*
@@ -17,7 +15,6 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.printBuildFile
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplate
import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
@@ -143,7 +140,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
}
}
val ValuesReadingContext.settingsGradleBuildFileData
val ReadingContext.settingsGradleBuildFileData
get() = when (buildSystemType) {
BuildSystemType.GradleKotlinDsl ->
BuildFileData(
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.buildSystemType
import org.jetbrains.kotlin.tools.projectWizard.plugins.pomIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
@@ -98,7 +97,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
}
private fun TaskRunningContext.createBuildFiles(modules: List<Module>): TaskResult<List<BuildFileIR>> =
private fun WritingContext.createBuildFiles(modules: List<Module>): TaskResult<List<BuildFileIR>> =
with(
ModulesToIRsConverter(
ModuleConfigurationData(
@@ -17,7 +17,7 @@ data class ModuleConfigurationData(
val kotlinVersion: Version,
val buildSystemType: BuildSystemType,
val pomIr: PomIR,
val taskRunningContext: TaskRunningContext
val writingContext: WritingContext
) {
val allModules = rootModules.withAllSubModules()
}
@@ -57,7 +57,7 @@ class ModulesToIRsConverter(
else -> rootPath / module.name
}
fun ValuesReadingContext.createBuildFiles(): TaskResult<List<BuildFileIR>> = with(data) {
fun ReadingContext.createBuildFiles(): TaskResult<List<BuildFileIR>> = with(data) {
val needExplicitRootBuildFile = !needFlattening
val parentModuleHasTransitivelySpecifiedKotlinVersion = allModules.any { modules ->
modules.configurator == AndroidSinglePlatformModuleConfigurator
@@ -82,7 +82,7 @@ class ModulesToIRsConverter(
}
private fun ValuesReadingContext.createBuildFileForModule(
private fun ReadingContext.createBuildFileForModule(
module: Module,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = when (module.kind) {
@@ -91,12 +91,12 @@ class ModulesToIRsConverter(
else -> Success(emptyList())
}
private fun ValuesReadingContext.createSinglePlatformModule(
private fun ReadingContext.createSinglePlatformModule(
module: Module,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = with(data) {
val modulePath = calculatePathForModule(module, state.parentPath)
taskRunningContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
val configurator = module.configurator
val dependenciesIRs = buildList<BuildSystemIR> {
+module.sourcesets.flatMap { sourceset ->
@@ -149,12 +149,12 @@ class ModulesToIRsConverter(
}.map { it.flatten() + buildFileIr }
}
private fun ValuesReadingContext.createMultiplatformModule(
private fun ReadingContext.createMultiplatformModule(
module: Module,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = with(data) {
val modulePath = calculatePathForModule(module, state.parentPath)
taskRunningContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
val targetIrs = module.subModules.flatMap { subModule ->
with(subModule.configurator as TargetConfigurator) { createTargetIrs(subModule) }
}
@@ -179,7 +179,7 @@ class ModulesToIRsConverter(
).asSingletonList().asSuccess()
}
private fun ValuesReadingContext.createTargetSourceset(target: Module, modulePath: Path): MultiplatformModuleIR {
private fun ReadingContext.createTargetSourceset(target: Module, modulePath: Path): MultiplatformModuleIR {
val sourcesetss = target.sourcesets.map { sourceset ->
val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize()
val sourcesetIrs = buildList<BuildSystemIR> {
@@ -215,7 +215,7 @@ class ModulesToIRsConverter(
)
}
private fun TaskRunningContext.mutateProjectStructureByModuleConfigurator(
private fun WritingContext.mutateProjectStructureByModuleConfigurator(
module: Module,
modulePath: Path
): TaskResult<Unit> = with(module.configurator) {
@@ -223,7 +223,7 @@ class ModulesToIRsConverter(
runArbitraryTask(data, module, modulePath)
}
private fun ValuesReadingContext.createBuildFileIRs(
private fun ReadingContext.createBuildFileIRs(
module: Module,
state: ModulesToIrsState
) = buildList<BuildSystemIR> {
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectName
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectPath
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.updateBuildFiles
import org.jetbrains.kotlin.tools.projectWizard.templates.*
import org.jetbrains.kotlin.tools.projectWizard.transformers.interceptors.InterceptionPoint
@@ -106,7 +105,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
}
}
private fun TaskRunningContext.applyFileTemplatesFromSourceset(
private fun WritingContext.applyFileTemplatesFromSourceset(
module: ModuleIR,
templateEngine: TemplateEngine,
interceptionPointSettings: Map<InterceptionPoint<Any>, Any>
@@ -129,7 +128,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
}.sequenceIgnore()
}
private fun TaskRunningContext.defaultSettings(moduleIR: ModuleIR) = mapOf(
private fun WritingContext.defaultSettings(moduleIR: ModuleIR) = mapOf(
"projectName" to projectName,
"moduleName" to moduleIR.name
)
@@ -86,7 +86,7 @@ class Module(
else -> "Module"
}
fun ValuesReadingContext.initDefaultValuesForSettings(context: Context) {
fun ReadingContext.initDefaultValuesForSettings(context: Context) {
configurator.safeAs<ModuleConfiguratorWithSettings>()?.initDefaultValuesFor(this@Module, context)
template?.apply { initDefaultValuesFor(this@Module, context) }
}
@@ -4,15 +4,11 @@ import org.jetbrains.kotlin.tools.projectWizard.GeneratedIdentificator
import org.jetbrains.kotlin.tools.projectWizard.Identificator
import org.jetbrains.kotlin.tools.projectWizard.IdentificatorOwner
import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
import org.jetbrains.kotlin.tools.projectWizard.templates.withSettingsOf
inline class ModulePath(val parts: List<String>) {
fun asString(separator: String = ".") = parts.joinToString(separator)
@@ -71,15 +67,15 @@ enum class SourcesetType: DisplayableSettingItem {
}
fun TaskRunningContext.updateBuildFiles(action: (BuildFileIR) -> TaskResult<BuildFileIR>): TaskResult<Unit> =
fun WritingContext.updateBuildFiles(action: (BuildFileIR) -> TaskResult<BuildFileIR>): TaskResult<Unit> =
BuildSystemPlugin::buildFiles.update { buildFiles ->
buildFiles.mapSequence(action)
}
fun TaskRunningContext.updateModules(action: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<Unit> =
fun WritingContext.updateModules(action: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<Unit> =
updateBuildFiles { buildFile ->
buildFile.withModulesUpdated { action(it) }
}
fun TaskRunningContext.forEachModule(action: (ModuleIR) -> TaskResult<Unit>): TaskResult<Unit> =
fun WritingContext.forEachModule(action: (ModuleIR) -> TaskResult<Unit>): TaskResult<Unit> =
updateModules { moduleIR -> action(moduleIR).map { moduleIR } }
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetConfigurationIR
@@ -17,7 +17,7 @@ class ConsoleJvmApplicationTemplate : Template() {
""".trimIndent()
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
override fun TaskRunningContext.getIrsToAddToBuildFile(
override fun WritingContext.getIrsToAddToBuildFile(
module: ModuleIR
) = buildList<BuildSystemIR> {
+runTaskIrs("MainKt")
@@ -26,7 +26,7 @@ class ConsoleJvmApplicationTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.addWithJavaIntoJvmTarget()
override fun TaskRunningContext.getFileTemplates(module: ModuleIR) =
override fun WritingContext.getFileTemplates(module: ModuleIR) =
buildList<FileTemplateDescriptorWithPath> {
+(FileTemplateDescriptor("$id/main.kt.vm", "main.kt".asPath()) asSrcOf SourcesetType.main)
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.TemplateSetting
@@ -28,7 +28,7 @@ class KtorServerTemplate : Template() {
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
override val id: String = "ktorServer"
override fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> =
override fun WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> =
withSettingsOf(module.originalModule) {
buildList {
+ktorArtifactDependency(serverEngine.reference.settingValue.dependencyName)
@@ -41,7 +41,7 @@ class KtorServerTemplate : Template() {
}
}
override fun TaskRunningContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
override fun WritingContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
+RepositoryIR(Repositories.KTOR_BINTRAY)
+RepositoryIR(DefaultRepository.JCENTER)
+runTaskIrs(mainClass = "ServerKt")
@@ -50,7 +50,7 @@ class KtorServerTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.addWithJavaIntoJvmTarget()
override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = listOf(
override fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = listOf(
FileTemplateDescriptor("$id/server.kt.vm", "server.kt".asPath()) asSrcOf SourcesetType.main
)
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
@@ -24,7 +24,7 @@ class NativeConsoleApplicationTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.withIrs(NativeTargetInternalIR("main"))
override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = buildList {
override fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = buildList {
+(FileTemplateDescriptor("$id/main.kt.vm", "main.kt".asPath()) asSrcOf SourcesetType.main)
}
}
@@ -42,7 +42,7 @@ class SimpleJsClientTemplate : Template() {
override val settings: List<TemplateSetting<*, *>> = listOf(renderEngine)
override fun ValuesReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = buildList {
override fun ReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = buildList {
if (module.originalModule.kind == ModuleKind.singleplatformJs) {
+WizardGradleRunConfiguration(
"BrowserDevelopmentRun in continuous mode",
@@ -57,7 +57,7 @@ class SimpleJsClientTemplate : Template() {
}
}
override fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = withSettingsOf(module.originalModule) {
override fun WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = withSettingsOf(module.originalModule) {
buildList {
+ArtifactBasedLibraryDependencyIR(
MavenArtifact(DefaultRepository.JCENTER, "org.jetbrains.kotlinx", "kotlinx-html-js"),
@@ -81,7 +81,7 @@ class SimpleJsClientTemplate : Template() {
}
override fun TaskRunningContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> =
override fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> =
withSettingsOf(module.originalModule) {
buildList {
val hasKtorServNeighbourTarget = module.safeAs<MultiplatformModuleIR>()
@@ -200,7 +200,7 @@ class SimpleJsClientTemplate : Template() {
}
}
override fun TaskRunningContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
override fun WritingContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
+RepositoryIR(DefaultRepository.JCENTER)
if (module is MultiplatformModuleIR) {
+GradleImportIR("org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack")
@@ -71,7 +71,7 @@ abstract class Template : SettingsOwner {
open val settings: List<TemplateSetting<*, *>> = emptyList()
open val interceptionPoints: List<InterceptionPoint<Any>> = emptyList()
fun ValuesReadingContext.initDefaultValuesFor(module: Module, context: Context) {
fun ReadingContext.initDefaultValuesFor(module: Module, context: Context) {
withSettingsOf(module) {
settings.forEach { setting ->
val defaultValue = setting.savedOrDefaultValue ?: return@forEach
@@ -80,10 +80,10 @@ abstract class Template : SettingsOwner {
}
}
open fun TaskRunningContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = emptyList()
open fun WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = emptyList()
//TODO: use setting reading context
open fun TaskRunningContext.getIrsToAddToBuildFile(
open fun WritingContext.getIrsToAddToBuildFile(
module: ModuleIR
): List<BuildSystemIR> = emptyList()
@@ -92,13 +92,13 @@ abstract class Template : SettingsOwner {
targetConfigurationIR: TargetConfigurationIR
): TargetConfigurationIR = targetConfigurationIR
open fun TaskRunningContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = emptyList()
open fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = emptyList()
open fun createInterceptors(module: ModuleIR): List<TemplateInterceptor> = emptyList()
open fun ValuesReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
open fun ReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
fun TaskRunningContext.applyToSourceset(
fun WritingContext.applyToSourceset(
module: ModuleIR
): TaskResult<TemplateApplicationResult> {
val librariesToAdd = getRequiredLibraries(module)
@@ -118,7 +118,7 @@ abstract class Template : SettingsOwner {
return result.asSuccess()
}
fun TaskRunningContext.settingsAsMap(module: Module): Map<String, Any> =
fun WritingContext.settingsAsMap(module: Module): Map<String, Any> =
withSettingsOf(module) {
settings.associate { setting ->
setting.path to setting.reference.settingValue
@@ -126,7 +126,7 @@ abstract class Template : SettingsOwner {
} + createDefaultSettings()
private fun TaskRunningContext.createDefaultSettings() = mapOf(
private fun WritingContext.createDefaultSettings() = mapOf(
"projectName" to StructurePlugin::name.settingValue.capitalize()
)
@@ -252,7 +252,7 @@ fun Template.settings(module: Module) = withSettingsOf(module) {
settings.map { it.reference }
}
fun TaskRunningContext.applyTemplateToModule(
fun WritingContext.applyTemplateToModule(
template: Template?,
module: ModuleIR
): TaskResult<TemplateApplicationResult> = when (template) {
@@ -6,7 +6,7 @@ import org.apache.velocity.runtime.RuntimeConstants
import org.apache.velocity.runtime.RuntimeServices
import org.apache.velocity.runtime.log.LogChute
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.div
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
@@ -16,7 +16,7 @@ import java.io.StringWriter
interface TemplateEngine {
fun renderTemplate(template: FileTemplateDescriptor, data: Map<String, Any?>): String
fun TaskRunningContext.writeTemplate(template: FileTemplate): TaskResult<Unit> {
fun WritingContext.writeTemplate(template: FileTemplate): TaskResult<Unit> {
val formatter = service<FileFormattingService>()
val text = renderTemplate(template.descriptor, template.data).let { text ->
formatter.formatFile(text, template.descriptor.relativePath.fileName.toString())
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: ServicesManager, private val isUnitTestMode: Boolean) {
val context = Context(createPlugins, EventManager())
val valuesReadingContext = ValuesReadingContext(context, servicesManager, isUnitTestMode)
val valuesReadingContext = ReadingContext(context, servicesManager, isUnitTestMode)
protected val plugins = context.plugins
protected val pluginSettings = plugins.flatMap { it.declaredSettings }.distinctBy { it.path }
@@ -20,7 +20,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
}
@Suppress("UNUSED_PARAMETER")
fun ValuesReadingContext.validate(phases: Set<GenerationPhase>): TaskResult<Unit> =
fun ReadingContext.validate(phases: Set<GenerationPhase>): TaskResult<Unit> =
context.settingContext.allPluginSettings.map { setting ->
val value = context.settingContext.pluginSettingValue(setting) ?: return@map ValidationResult.OK
when (setting.neededAtPhase) {
@@ -29,7 +29,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
}
}.fold(ValidationResult.OK, ValidationResult::and).toResult()
private fun ValuesReadingContext.saveSettingValues(phases: Set<GenerationPhase>) {
private fun ReadingContext.saveSettingValues(phases: Set<GenerationPhase>) {
for (setting in pluginSettings) {
if (setting.neededAtPhase !in phases) continue
if (!setting.isSavable) continue
@@ -47,7 +47,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
onTaskExecuting: (PipelineTask) -> Unit = {}
): TaskResult<Unit> = computeM {
context.checkAllRequiredSettingPresent(phases).ensure()
val taskRunningContext = TaskRunningContext(context, servicesManager.withServices(services), isUnitTestMode)
val taskRunningContext = WritingContext(context, servicesManager.withServices(services), isUnitTestMode)
taskRunningContext.validate(phases).ensure()
taskRunningContext.saveSettingValues(phases)
val (tasksSorted) = context.sortTasks().map { tasks ->