Wizard: rename ReadingContext -> Reader, WritingContext -> Writer

This commit is contained in:
Ilya Kirillov
2020-03-10 16:05:33 +03:00
parent f1741a4d1b
commit db6dfbbb9f
38 changed files with 152 additions and 146 deletions
@@ -10,7 +10,7 @@ import com.intellij.openapi.externalSystem.service.execution.ExternalSystemRunCo
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.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.service.RunConfigurationsService
import org.jetbrains.kotlin.tools.projectWizard.core.service.isBuildSystemAvailable
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemT
import org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType
class IdeaRunConfigurationsService(private val project: Project) : RunConfigurationsService, IdeaWizardService {
override fun ReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) {
override fun Reader.addRunConfigurations(configurations: List<WizardRunConfiguration>) {
configurations.forEach { wizardConfiguration ->
if (wizardConfiguration is WizardGradleRunConfiguration && isBuildSystemAvailable(BuildSystemType.GradleKotlinDsl)) {
addGradleRunConfiguration(wizardConfiguration)
@@ -2,9 +2,9 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.SettingsWritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.SettingsWriter
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSettingPropertyReference
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingType
@@ -48,13 +48,13 @@ abstract class DynamicComponent(private val context: Context) : Component() {
}
}
protected fun <T> read(reader: ReadingContext.() -> T): T =
protected fun <T> read(reader: Reader.() -> T): T =
context.read(reader)
protected fun <T> write(writer: WritingContext.() -> T): T =
protected fun <T> write(writer: Writer.() -> T): T =
context.write(writer)
protected fun <T> modify(modifier: SettingsWritingContext.() -> T): T =
protected fun <T> modify(modifier: SettingsWriter.() -> T): T =
context.writeSettings(modifier)
open fun onValueUpdated(reference: SettingReference<*, *>?) {}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components
import com.intellij.openapi.Disposable
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult
import org.jetbrains.kotlin.tools.projectWizard.core.entity.isSpecificError
@@ -90,7 +90,7 @@ abstract class UIComponent<V : Any>(
}
}
fun <V : Any> ReadingContext.valueForSetting(
fun <V : Any> Reader.valueForSetting(
uiComponent: UIComponent<V>,
setting: SettingReference<V, SettingType<V>>
): V? = setting.savedOrDefaultValue ?: uiComponent.getUiValue()
@@ -45,7 +45,7 @@ class YamlWizard(
}
}
fun ReadingContext.parseYaml(
fun Reader.parseYaml(
yaml: String,
pluginSettings: List<PluginSetting<*, *>>
): TaskResult<Map<SettingReference<*, *>, Any>> {
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.core
typealias Checker = ReadingContext.() -> Boolean
typealias Checker = Reader.() -> Boolean
val ALWAYS_AVAILABLE_CHECKER = checker { true }
@@ -13,5 +13,5 @@ interface ContextOwner {
interface ActivityCheckerOwner {
val isAvailable: Checker
fun isActive(readingContext: ReadingContext) = isAvailable(readingContext)
fun isActive(reader: Reader) = isAvailable(reader)
}
@@ -22,19 +22,19 @@ class Context private constructor(
) {
private lateinit var plugins: List<Plugin>
private val settingWritingContext = SettingsWritingContext()
private val settingWritingContext = SettingsWriter()
private val pluginSettings by lazy(LazyThreadSafetyMode.NONE) {
plugins.flatMap(Plugin::declaredSettings).distinctBy(PluginSetting<*, *>::path)
}
fun <T> read(reader: ReadingContext.() -> T): T =
fun <T> read(reader: Reader.() -> T): T =
settingWritingContext.reader()
fun <T> write(writer: WritingContext.() -> T): T =
fun <T> write(writer: Writer.() -> T): T =
settingWritingContext.writer()
fun <T> writeSettings(writer: SettingsWritingContext.() -> T): T =
fun <T> writeSettings(writer: SettingsWriter.() -> T): T =
settingWritingContext.writer()
@@ -133,7 +133,7 @@ class Context private constructor(
TaskSorter().sort(pipelineLineTasks, dependencyList)
open inner class ReadingContext {
open inner class Reader {
val plugins: List<Plugin>
get() = this@Context.plugins
@@ -185,24 +185,24 @@ class Context private constructor(
val <V : Any> SettingReference<V, SettingType<V>>.savedOrDefaultValue: V?
get() = setting.getSavedValueForSetting() ?: when (val defaultValue = setting.defaultValue) {
is SettingDefaultValue.Value -> defaultValue.value
is SettingDefaultValue.Dynamic<V> -> defaultValue.getter(this@ReadingContext, this)
is SettingDefaultValue.Dynamic<V> -> defaultValue.getter(this@Reader, this)
null -> null
}
val <V : Any, T : SettingType<V>> SettingReference<V, T>.setting: Setting<V, T>
get() = with(this) { getSetting() }
inline operator fun <T> invoke(reader: ReadingContext.() -> T): T = reader()
inline operator fun <T> invoke(reader: Reader.() -> T): T = reader()
}
open inner class WritingContext : ReadingContext() {
open inner class Writer : Reader() {
val eventManager: EventManager
get() = settingContext.eventManager
fun <A, B : Any> Task1Reference<A, B>.execute(value: A): TaskResult<B> {
@Suppress("UNCHECKED_CAST")
val task = taskContext.getEntity(this) as Task1<A, B>
return task.action(this@WritingContext, value)
return task.action(this@Writer, value)
}
fun <T : Any> PropertyReference<T>.update(
@@ -219,9 +219,12 @@ class Context private constructor(
fun <T : Any> PropertyReference<List<T>>.addValues(
values: List<T>
): TaskResult<Unit> = update { oldValues -> success(oldValues + values) }
@JvmName("write")
inline operator fun <T> invoke(writer: Writer.() -> T): T = writer()
}
open inner class SettingsWritingContext : WritingContext() {
open inner class SettingsWriter : Writer() {
fun <V : Any, T : SettingType<V>> SettingReference<V, T>.setValue(newValue: V) {
settingContext[this] = newValue
}
@@ -232,10 +235,13 @@ class Context private constructor(
setValue(defaultValue)
}
}
@JvmName("writeSettings")
inline operator fun <T> invoke(writer: SettingsWriter.() -> T): T = writer()
}
}
fun ReadingContext.getUnspecifiedSettings(phases: Set<GenerationPhase>): List<AnySetting> {
fun Reader.getUnspecifiedSettings(phases: Set<GenerationPhase>): List<AnySetting> {
val required = plugins
.flatMap { plugin ->
plugin.declaredSettings.mapNotNull { setting ->
@@ -248,6 +254,6 @@ fun ReadingContext.getUnspecifiedSettings(phases: Set<GenerationPhase>): List<An
}
typealias ReadingContext = Context.ReadingContext
typealias WritingContext = Context.WritingContext
typealias SettingsWritingContext = Context.SettingsWritingContext
typealias Reader = Context.Reader
typealias Writer = Context.Writer
typealias SettingsWriter = Context.SettingsWriter
@@ -1,23 +1,23 @@
package org.jetbrains.kotlin.tools.projectWizard.core.entity
import org.jetbrains.kotlin.tools.projectWizard.core.Failure
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
import org.jetbrains.kotlin.tools.projectWizard.core.ValidationError
inline class SettingValidator<V>(val validate: ReadingContext.(V) -> ValidationResult) {
inline class SettingValidator<V>(val validate: Reader.(V) -> ValidationResult) {
infix fun and(other: SettingValidator<V>) = SettingValidator<V> { value ->
validate(value) and other.validate(this, value)
}
operator fun ReadingContext.invoke(value: V) = validate(value)
operator fun Reader.invoke(value: V) = validate(value)
}
fun <V> settingValidator(validator: ReadingContext.(V) -> ValidationResult) =
fun <V> settingValidator(validator: Reader.(V) -> ValidationResult) =
SettingValidator(validator)
fun <V> inValidatorContext(validator: ReadingContext.(V) -> SettingValidator<V>) =
fun <V> inValidatorContext(validator: Reader.(V) -> SettingValidator<V>) =
SettingValidator<V> { value ->
validator(value).validate(this, value)
}
@@ -95,7 +95,7 @@ interface Validatable<out V> {
val validator: SettingValidator<@UnsafeVariance V>
}
fun <V, Q : Validatable<Q>> ReadingContext.validateList(list: List<Q>) = settingValidator<V> {
fun <V, Q : Validatable<Q>> Reader.validateList(list: List<Q>) = settingValidator<V> {
list.fold(ValidationResult.OK as ValidationResult) { result, value ->
result and value.validator.validate(this, value).withTarget(value)
}
@@ -15,12 +15,12 @@ sealed class Task : EntityBase()
data class Task1<A, B : Any>(
override val path: String,
val action: WritingContext.(A) -> TaskResult<B>
val action: Writer.(A) -> TaskResult<B>
) : Task() {
class Builder<A, B : Any>(private val name: String) {
private var action: WritingContext.(A) -> TaskResult<B> = { Failure() }
private var action: Writer.(A) -> TaskResult<B> = { Failure() }
fun withAction(action: WritingContext.(A) -> TaskResult<B>) {
fun withAction(action: Writer.(A) -> TaskResult<B>) {
this.action = action
}
@@ -30,7 +30,7 @@ data class Task1<A, B : Any>(
data class PipelineTask(
override val path: String,
val action: WritingContext.() -> TaskResult<Unit>,
val action: Writer.() -> TaskResult<Unit>,
val before: List<PipelineTaskReference>,
val after: List<PipelineTaskReference>,
val phase: GenerationPhase,
@@ -41,7 +41,7 @@ data class PipelineTask(
private val name: String,
private val phase: GenerationPhase
) {
private var action: WritingContext.() -> TaskResult<Unit> = { UNIT_SUCCESS }
private var action: Writer.() -> TaskResult<Unit> = { UNIT_SUCCESS }
private val before = mutableListOf<PipelineTaskReference>()
private val after = mutableListOf<PipelineTaskReference>()
@@ -49,7 +49,7 @@ data class PipelineTask(
var title: String? = null
fun withAction(action: WritingContext.() -> TaskResult<Unit>) {
fun withAction(action: Writer.() -> TaskResult<Unit>) {
this.action = action
}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
import org.jetbrains.kotlin.tools.projectWizard.core.ActivityCheckerOwner
import org.jetbrains.kotlin.tools.projectWizard.core.Checker
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.Entity
import org.jetbrains.kotlin.tools.projectWizard.core.entity.EntityWithValue
@@ -58,7 +58,7 @@ class TemplateSetting<out V : Any, out T : SettingType<V>>(
sealed class SettingDefaultValue<out V : Any> {
data class Value<V : Any>(val value: V) : SettingDefaultValue<V>()
data class Dynamic<V : Any>(
val getter: ReadingContext.(SettingReference<V, SettingType<V>>) -> V
val getter: Reader.(SettingReference<V, SettingType<V>>) -> V
) : SettingDefaultValue<V>()
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator
@@ -17,13 +17,13 @@ abstract class SettingBuilder<V : Any, T : SettingType<V>>(
private val title: String,
private val neededAtPhase: GenerationPhase
) {
var isAvailable: ReadingContext.() -> Boolean = { true }
var isAvailable: Reader.() -> Boolean = { true }
open var defaultValue: SettingDefaultValue<V>? = null
var isSavable: Boolean = false
var isRequired: Boolean? = null
fun value(value: V) = SettingDefaultValue.Value(value)
fun dynamic(getter: ReadingContext.(SettingReference<V, SettingType<V>>) -> V) =
fun dynamic(getter: Reader.(SettingReference<V, SettingType<V>>) -> V) =
SettingDefaultValue.Dynamic(getter)
protected var validator =
@@ -33,7 +33,7 @@ abstract class SettingBuilder<V : Any, T : SettingType<V>>(
this.validator = this.validator and validator
}
fun validate(validator: ReadingContext.(V) -> ValidationResult) {
fun validate(validator: Reader.(V) -> ValidationResult) {
this.validator = this.validator and settingValidator(
validator
)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings
import org.jetbrains.kotlin.tools.projectWizard.Identificator
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.path
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator
@@ -21,7 +21,7 @@ sealed class SettingReference<out V : Any, out T : SettingType<V>> {
abstract val path: String
abstract val type: KClass<out T>
abstract fun ReadingContext.getSetting(): Setting<V, T>
abstract fun Reader.getSetting(): Setting<V, T>
final override fun toString() = path
final override fun equals(other: Any?) = other.safeAs<SettingReference<*, *>>()?.path == path
@@ -40,7 +40,7 @@ data class PluginSettingReference<out V : Any, out T : SettingType<V>>(
constructor(setting: PluginSetting<V, T>) :
this(setting.path, setting.type::class as KClass<T>)
override fun ReadingContext.getSetting(): Setting<V, T> = pluginSetting
override fun Reader.getSetting(): Setting<V, T> = pluginSetting
}
inline val <V : Any, reified T : SettingType<V>> PluginSetting<V, T>.reference: PluginSettingReference<V, T>
@@ -57,7 +57,7 @@ sealed class ModuleConfiguratorSettingReference<V : Any, T : SettingType<V>> : S
override val type: KClass<out T>
get() = setting.type::class
override fun ReadingContext.getSetting(): Setting<V, T> = setting
override fun Reader.getSetting(): Setting<V, T> = setting
abstract val module: Module?
}
@@ -89,7 +89,7 @@ sealed class TemplateSettingReference<V : Any, T : SettingType<V>> : SettingRefe
override val type: KClass<out T>
get() = setting.type::class
override fun ReadingContext.getSetting(): Setting<V, T> = setting
override fun Reader.getSetting(): Setting<V, T> = setting
abstract val module: Module?
}
@@ -214,4 +214,4 @@ object PathSettingType : SettingType<Path>() {
}
}
typealias DropDownSettingTypeFilter <V> = ReadingContext.(SettingReference<V, DropDownSettingType<V>>, V) -> Boolean
typealias DropDownSettingTypeFilter <V> = Reader.(SettingReference<V, DropDownSettingType<V>>, V) -> Boolean
@@ -6,14 +6,14 @@
package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
interface BuildSystemAvailabilityWizardService : WizardService {
fun isAvailable(buildSystemType: BuildSystemType): Boolean
}
fun ReadingContext.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
fun Reader.isBuildSystemAvailable(buildSystemType: BuildSystemType) =
service<BuildSystemAvailabilityWizardService>().isAvailable(buildSystemType)
class BuildSystemAvailabilityWizardServiceImpl : BuildSystemAvailabilityWizardService, IdeaIndependentWizardService {
@@ -6,13 +6,13 @@
package org.jetbrains.kotlin.tools.projectWizard.core.service
import org.jetbrains.kotlin.tools.projectWizard.WizardRunConfiguration
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
interface RunConfigurationsService : WizardService {
fun ReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>)
fun Reader.addRunConfigurations(configurations: List<WizardRunConfiguration>)
}
class RunConfigurationsServiceImpl : RunConfigurationsService, IdeaIndependentWizardService {
override fun ReadingContext.addRunConfigurations(configurations: List<WizardRunConfiguration>) = Unit
override fun Reader.addRunConfigurations(configurations: List<WizardRunConfiguration>) = Unit
}
@@ -48,15 +48,15 @@ interface AndroidModuleConfigurator : ModuleConfigurator,
listOf(AndroidPlugin::androidSdkPath.reference)
override fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
) = buildList<BuildSystemIR> {
+GradleOnlyPluginByNameIR(readingContext.createAndroidPlugin(module).pluginName)
+GradleOnlyPluginByNameIR(reader.createAndroidPlugin(module).pluginName)
+GradleOnlyPluginByNameIR("kotlin-android-extensions")
+AndroidConfigIR(
when (readingContext.createAndroidPlugin(module)) {
when (reader.createAndroidPlugin(module)) {
AndroidGradlePlugin.APPLICATION -> module.javaPackage(configurationData.pomIr)
AndroidGradlePlugin.LIBRARY -> null
}
@@ -64,15 +64,15 @@ interface AndroidModuleConfigurator : ModuleConfigurator,
+createRepositories(configurationData.kotlinVersion).map(::RepositoryIR)
}
fun ReadingContext.createAndroidPlugin(module: Module): AndroidGradlePlugin
fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin
override fun ReadingContext.createSettingsGradleIRs(module: Module) = buildList<BuildSystemIR> {
override fun Reader.createSettingsGradleIRs(module: Module) = buildList<BuildSystemIR> {
+createRepositories(KotlinPlugin::version.propertyValue).map { PluginManagementRepositoryIR(RepositoryIR(it)) }
+AndroidResolutionStrategyIR(Versions.GradlePlugins.ANDROID)
}
override fun createModuleIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
@@ -128,7 +128,7 @@ object AndroidTargetConfigurator : TargetConfigurator,
override val moduleSubType = ModuleSubType.android
override val moduleType = ModuleType.jvm
override fun ReadingContext.createAndroidPlugin(module: Module): AndroidGradlePlugin =
override fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin =
withSettingsOf(module) { androidPlugin.reference.settingValue }
override fun getConfiguratorSettings() = buildList<ModuleConfiguratorSetting<*, *>> {
@@ -136,7 +136,7 @@ object AndroidTargetConfigurator : TargetConfigurator,
+androidPlugin
}
override fun WritingContext.runArbitraryTask(
override fun Writer.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -26,11 +26,11 @@ object AndroidSinglePlatformModuleConfigurator :
override val requiresRootBuildFile: Boolean = true
override fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
) = buildList<BuildSystemIR> {
+super<AndroidModuleConfigurator>.createBuildFileIRs(readingContext, configurationData, module)
+super<AndroidModuleConfigurator>.createBuildFileIRs(reader, configurationData, module)
// it is explicitly here instead of by `createKotlinPluginIR` as it should be after `com.android.application`
+KotlinBuildSystemPluginIR(
@@ -46,11 +46,11 @@ object AndroidSinglePlatformModuleConfigurator :
}
override fun createModuleIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
) = buildList<BuildSystemIR> {
+super<AndroidModuleConfigurator>.createModuleIRs(readingContext, configurationData, module)
+super<AndroidModuleConfigurator>.createModuleIRs(reader, configurationData, module)
+ArtifactBasedLibraryDependencyIR(
MavenArtifact(DefaultRepository.GOOGLE, "androidx.appcompat", "appcompat"),
@@ -65,7 +65,7 @@ object AndroidSinglePlatformModuleConfigurator :
)
}
override fun WritingContext.runArbitraryTask(
override fun Writer.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -81,6 +81,6 @@ object AndroidSinglePlatformModuleConfigurator :
)
}
override fun ReadingContext.createAndroidPlugin(module: Module): AndroidGradlePlugin =
override fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin =
AndroidGradlePlugin.APPLICATION
}
@@ -25,7 +25,7 @@ object IOSSinglePlatformModuleConfigurator :
override val needCreateBuildFile: Boolean = false
override val requiresRootBuildFile: Boolean = true
override fun WritingContext.runArbitraryTask(
override fun Writer.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
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
@@ -37,7 +37,7 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi
)
override fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> = buildList {
@@ -164,7 +164,7 @@ interface ModuleConfiguratorWithSettings : ModuleConfigurator {
fun getPluginSettings(): List<PluginSettingReference<Any, SettingType<Any>>> = emptyList()
fun SettingsWritingContext.initDefaultValuesFor(module: Module) {
fun SettingsWriter.initDefaultValuesFor(module: Module) {
withSettingsOf(module) {
getConfiguratorSettings().forEach { setting ->
setting.reference.setSettingValueToItsDefaultIfItIsNotSetValue()
@@ -179,7 +179,7 @@ val ModuleConfigurator.settings
else -> emptyList()
}
fun ReadingContext.allSettingsOfModuleConfigurator(moduleConfigurator: ModuleConfigurator) = when (moduleConfigurator) {
fun Reader.allSettingsOfModuleConfigurator(moduleConfigurator: ModuleConfigurator) = when (moduleConfigurator) {
is ModuleConfiguratorWithSettings -> buildList<Setting<Any, SettingType<Any>>> {
+moduleConfigurator.getConfiguratorSettings()
+moduleConfigurator.getPluginSettings().map { it.pluginSetting }
@@ -205,14 +205,14 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
val requiresRootBuildFile: Boolean get() = false
fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
emptyList()
fun createModuleIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
@@ -225,7 +225,7 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? =
null
fun WritingContext.runArbitraryTask(
fun Writer.runArbitraryTask(
configurationData: ModuleConfigurationData,
module: Module,
modulePath: Path
@@ -276,5 +276,5 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor {
}
interface GradleModuleConfigurator : ModuleConfigurator {
fun ReadingContext.createSettingsGradleIRs(module: Module): List<BuildSystemIR> = emptyList()
fun Reader.createSettingsGradleIRs(module: Module): List<BuildSystemIR> = emptyList()
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSettingReference
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
@@ -39,12 +39,12 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings {
fun defaultTestFramework(): KotlinTestFramework
override fun createModuleIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
withSettingsOf(module) {
with(readingContext) {
reader {
testFramework.reference.settingValue.dependencyNames.map { dependencyName ->
KotlinArbitraryDependencyIR(
dependencyName,
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
@@ -36,7 +36,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
override val text = "For Current System"
override fun ReadingContext.createTargetIrs(
override fun Reader.createTargetIrs(
module: Module
): List<BuildSystemIR> {
val moduleName = module.name
@@ -79,7 +79,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
}
override fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> = buildList {
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList
@@ -23,9 +23,9 @@ interface TargetConfigurator : ModuleConfiguratorWithModuleType {
fun canCoexistsWith(other: List<TargetConfigurator>): Boolean = true
fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR>
fun Reader.createTargetIrs(module: Module): List<BuildSystemIR>
fun createInnerTargetIrs(
readingContext: ReadingContext,
reader: Reader,
module: Module
): List<BuildSystemIR> = emptyList()
}
@@ -46,7 +46,7 @@ interface SimpleTargetConfigurator : TargetConfigurator {
override val suggestedModuleName: String? get() = moduleSubType.name
override fun ReadingContext.createTargetIrs(
override fun Reader.createTargetIrs(
module: Module
): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
@@ -72,7 +72,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JS
override fun ReadingContext.createTargetIrs(
override fun Reader.createTargetIrs(
module: Module
): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
@@ -92,7 +92,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator {
override val suggestedModuleName = "nodeJs"
override fun ReadingContext.createTargetIrs(
override fun Reader.createTargetIrs(
module: Module
): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR(
@@ -123,10 +123,10 @@ object JvmTargetConfigurator : JvmModuleConfigurator,
override fun defaultTestFramework(): KotlinTestFramework = KotlinTestFramework.JUNIT4
override fun createInnerTargetIrs(
readingContext: ReadingContext,
reader: Reader,
module: Module
): List<BuildSystemIR> = buildList {
with(readingContext) {
reader {
withSettingsOf(module) {
val targetVersionValue = JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value
if (buildSystemType.isGradle) {
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import org.jetbrains.kotlin.tools.projectWizard.core.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.ModuleConfiguratorSetting
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
@@ -91,7 +91,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
override fun createBuildFileIRs(
readingContext: ReadingContext,
reader: Reader,
configurationData: ModuleConfigurationData,
module: Module
): List<BuildSystemIR> =
@@ -99,7 +99,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator,
+GradleImportIR("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")
val targetVersionValue = withSettingsOf(module) {
with(readingContext) {
reader {
JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value
}
}
@@ -39,14 +39,14 @@ class StructurePlugin(context: Context) : Plugin(context) {
}
}
val ReadingContext.projectPath
val Reader.projectPath
get() = StructurePlugin::projectPath.reference.settingValue
val ReadingContext.projectName
val Reader.projectName
get() = StructurePlugin::name.reference.settingValue
fun WritingContext.pomIR() = PomIR(
fun Writer.pomIR() = PomIR(
artifactId = StructurePlugin::artifactId.reference.settingValue,
groupId = StructurePlugin::groupId.reference.settingValue,
version = Version.fromString(StructurePlugin::version.reference.settingValue)
@@ -126,12 +126,12 @@ val BuildSystemType.isGradle
get() = this == BuildSystemType.GradleGroovyDsl
|| this == BuildSystemType.GradleKotlinDsl
val ReadingContext.allIRModules
val Reader.allIRModules
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
buildFile.modules.modules
}
val WritingContext.allModulesPaths
val Writer.allModulesPaths
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
val paths = when (val structure = buildFile.modules) {
is MultiplatformModulesStructureIR -> listOf(buildFile.directoryPath)
@@ -146,6 +146,6 @@ val WritingContext.allModulesPaths
}
val ReadingContext.buildSystemType: BuildSystemType
val Reader.buildSystemType: BuildSystemType
get() = BuildSystemPlugin::type.reference.settingValue
@@ -138,7 +138,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
}
}
val ReadingContext.settingsGradleBuildFileData
val Reader.settingsGradleBuildFileData
get() = when (buildSystemType) {
BuildSystemType.GradleKotlinDsl ->
BuildFileData(
@@ -100,7 +100,7 @@ class KotlinPlugin(context: Context) : Plugin(context) {
}
private fun WritingContext.createBuildFiles(modules: List<Module>): TaskResult<List<BuildFileIR>> =
private fun Writer.createBuildFiles(modules: List<Module>): TaskResult<List<BuildFileIR>> =
with(
ModulesToIRsConverter(
ModuleConfigurationData(
@@ -21,7 +21,7 @@ data class ModuleConfigurationData(
val kotlinVersion: Version,
val buildSystemType: BuildSystemType,
val pomIr: PomIR,
val writingContext: WritingContext
val writer: Writer
) {
val allModules = rootModules.withAllSubModules()
}
@@ -61,7 +61,7 @@ class ModulesToIRsConverter(
else -> rootPath / module.name
}
fun ReadingContext.createBuildFiles(): TaskResult<List<BuildFileIR>> = with(data) {
fun Reader.createBuildFiles(): TaskResult<List<BuildFileIR>> = with(data) {
val needExplicitRootBuildFile = !needFlattening
val parentModuleHasTransitivelySpecifiedKotlinVersion = allModules.any { modules ->
modules.configurator == AndroidSinglePlatformModuleConfigurator
@@ -86,7 +86,7 @@ class ModulesToIRsConverter(
}
private fun ReadingContext.createBuildFileForModule(
private fun Reader.createBuildFileForModule(
module: Module,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = when (val configurator = module.configurator) {
@@ -95,13 +95,13 @@ class ModulesToIRsConverter(
else -> Success(emptyList())
}
private fun ReadingContext.createSinglePlatformModule(
private fun Reader.createSinglePlatformModule(
module: Module,
configurator: SinglePlatformModuleConfigurator,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = with(data) {
val modulePath = calculatePathForModule(module, state.parentPath)
writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
writer.mutateProjectStructureByModuleConfigurator(module, modulePath)
val buildFileIR = run {
if (!configurator.needCreateBuildFile) return@run null
val dependenciesIRs = buildPersistenceList<BuildSystemIR> {
@@ -159,12 +159,12 @@ class ModulesToIRsConverter(
}
}
private fun ReadingContext.createMultiplatformModule(
private fun Reader.createMultiplatformModule(
module: Module,
state: ModulesToIrsState
): TaskResult<List<BuildFileIR>> = with(data) {
val modulePath = calculatePathForModule(module, state.parentPath)
writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
writer.mutateProjectStructureByModuleConfigurator(module, modulePath)
val targetIrs = module.subModules.flatMap { subModule ->
with(subModule.configurator as TargetConfigurator) { createTargetIrs(subModule) }
}
@@ -189,8 +189,8 @@ class ModulesToIRsConverter(
).asSingletonList().asSuccess()
}
private fun ReadingContext.createTargetModule(target: Module, modulePath: Path): MultiplatformModuleIR {
data.writingContext.mutateProjectStructureByModuleConfigurator(target, modulePath)
private fun Reader.createTargetModule(target: Module, modulePath: Path): MultiplatformModuleIR {
data.writer.mutateProjectStructureByModuleConfigurator(target, modulePath)
val sourcesetss = target.sourcesets.map { sourceset ->
val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize()
val sourcesetIrs = buildList<BuildSystemIR> {
@@ -226,7 +226,7 @@ class ModulesToIRsConverter(
)
}
private fun WritingContext.mutateProjectStructureByModuleConfigurator(
private fun Writer.mutateProjectStructureByModuleConfigurator(
module: Module,
modulePath: Path
): TaskResult<Unit> = with(module.configurator) {
@@ -239,7 +239,7 @@ class ModulesToIRsConverter(
}
}
private fun ReadingContext.createBuildFileIRs(
private fun Reader.createBuildFileIRs(
module: Module,
state: ModulesToIrsState
) = buildPersistenceList<BuildSystemIR> {
@@ -20,7 +20,7 @@ class ProjectTemplatesPlugin(context: Context) : Plugin(context) {
}
}
fun SettingsWritingContext.applyProjectTemplate(projectTemplate: ProjectTemplate) {
fun SettingsWriter.applyProjectTemplate(projectTemplate: ProjectTemplate) {
projectTemplate.setsValues.forEach { (setting, value) ->
setting.setValue(value)
}
@@ -106,7 +106,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
}
}
private fun WritingContext.applyFileTemplatesFromSourceset(
private fun Writer.applyFileTemplatesFromSourceset(
module: ModuleIR,
templateEngine: TemplateEngine,
interceptionPointSettings: Map<InterceptionPoint<Any>, Any>
@@ -129,7 +129,7 @@ class TemplatesPlugin(context: Context) : Plugin(context) {
}.sequenceIgnore()
}
private fun WritingContext.defaultSettings(moduleIR: ModuleIR) = mapOf(
private fun Writer.defaultSettings(moduleIR: ModuleIR) = mapOf(
"projectName" to projectName,
"moduleName" to moduleIR.name
)
@@ -68,7 +68,7 @@ class Module(
else -> "Module"
}
fun SettingsWritingContext.initDefaultValuesForSettings() {
fun SettingsWriter.initDefaultValuesForSettings() {
configurator.safeAs<ModuleConfiguratorWithSettings>()?.apply { initDefaultValuesFor(this@Module) }
template?.apply { initDefaultValuesFor(this@Module) }
}
@@ -67,15 +67,15 @@ enum class SourcesetType: DisplayableSettingItem {
}
fun WritingContext.updateBuildFiles(action: (BuildFileIR) -> TaskResult<BuildFileIR>): TaskResult<Unit> =
fun Writer.updateBuildFiles(action: (BuildFileIR) -> TaskResult<BuildFileIR>): TaskResult<Unit> =
BuildSystemPlugin::buildFiles.update { buildFiles ->
buildFiles.mapSequence(action)
}
fun WritingContext.updateModules(action: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<Unit> =
fun Writer.updateModules(action: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<Unit> =
updateBuildFiles { buildFile ->
buildFile.withModulesUpdated { action(it) }
}
fun WritingContext.forEachModule(action: (ModuleIR) -> TaskResult<Unit>): TaskResult<Unit> =
fun Writer.forEachModule(action: (ModuleIR) -> TaskResult<Unit>): TaskResult<Unit> =
updateModules { moduleIR -> action(moduleIR).map { moduleIR } }
@@ -1,6 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
@@ -19,7 +19,7 @@ class ConsoleJvmApplicationTemplate : Template() {
""".trimIndent()
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
override fun WritingContext.getIrsToAddToBuildFile(
override fun Writer.getIrsToAddToBuildFile(
module: ModuleIR
) = buildList<BuildSystemIR> {
+runTaskIrs("MainKt")
@@ -28,7 +28,7 @@ class ConsoleJvmApplicationTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.addWithJavaIntoJvmTarget()
override fun WritingContext.getFileTemplates(module: ModuleIR) =
override fun Writer.getFileTemplates(module: ModuleIR) =
buildList<FileTemplateDescriptorWithPath> {
+(FileTemplateDescriptor("$id/main.kt.vm", "main.kt".asPath()) asSrcOf SourcesetType.main)
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.asPath
import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.TemplateSetting
@@ -29,7 +29,7 @@ class KtorServerTemplate : Template() {
override val moduleTypes: Set<ModuleType> = setOf(ModuleType.jvm)
override val id: String = "ktorServer"
override fun WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> =
override fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> =
withSettingsOf(module.originalModule) {
buildList {
+ktorArtifactDependency(serverEngine.reference.settingValue.dependencyName)
@@ -42,7 +42,7 @@ class KtorServerTemplate : Template() {
}
}
override fun WritingContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
override fun Writer.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
+RepositoryIR(Repositories.KTOR_BINTRAY)
+RepositoryIR(DefaultRepository.JCENTER)
+runTaskIrs(mainClass = "ServerKt")
@@ -51,7 +51,7 @@ class KtorServerTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.addWithJavaIntoJvmTarget()
override fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = listOf(
override fun Writer.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = listOf(
FileTemplateDescriptor("$id/server.kt.vm", "server.kt".asPath()) asSrcOf SourcesetType.main
)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.tools.projectWizard.templates
import org.jetbrains.kotlin.tools.projectWizard.core.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
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
@@ -25,7 +25,7 @@ class NativeConsoleApplicationTemplate : Template() {
override fun updateTargetIr(module: ModuleIR, targetConfigurationIR: TargetConfigurationIR): TargetConfigurationIR =
targetConfigurationIR.withIrs(NativeTargetInternalIR("main"))
override fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = buildList {
override fun Writer.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 ReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = buildList {
override fun Reader.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 WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = withSettingsOf(module.originalModule) {
override fun Writer.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 WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> =
override fun Writer.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> =
withSettingsOf(module.originalModule) {
buildList {
val hasKtorServNeighbourTarget = module.safeAs<MultiplatformModuleIR>()
@@ -200,7 +200,7 @@ class SimpleJsClientTemplate : Template() {
}
}
override fun WritingContext.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
override fun Writer.getIrsToAddToBuildFile(module: ModuleIR): List<BuildSystemIR> = buildList {
+RepositoryIR(DefaultRepository.JCENTER)
if (module is MultiplatformModuleIR) {
+GradleImportIR("org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack")
@@ -75,7 +75,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
open val settings: List<TemplateSetting<*, *>> = emptyList()
open val interceptionPoints: List<InterceptionPoint<Any>> = emptyList()
fun SettingsWritingContext.initDefaultValuesFor(module: Module) {
fun SettingsWriter.initDefaultValuesFor(module: Module) {
withSettingsOf(module) {
settings.forEach { setting ->
setting.reference.setSettingValueToItsDefaultIfItIsNotSetValue()
@@ -83,10 +83,10 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
}
}
open fun WritingContext.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = emptyList()
open fun Writer.getRequiredLibraries(module: ModuleIR): List<DependencyIR> = emptyList()
//TODO: use setting reading context
open fun WritingContext.getIrsToAddToBuildFile(
open fun Writer.getIrsToAddToBuildFile(
module: ModuleIR
): List<BuildSystemIR> = emptyList()
@@ -95,13 +95,13 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
targetConfigurationIR: TargetConfigurationIR
): TargetConfigurationIR = targetConfigurationIR
open fun WritingContext.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = emptyList()
open fun Writer.getFileTemplates(module: ModuleIR): List<FileTemplateDescriptorWithPath> = emptyList()
open fun createInterceptors(module: ModuleIR): List<TemplateInterceptor> = emptyList()
open fun ReadingContext.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
open fun Reader.createRunConfigurations(module: ModuleIR): List<WizardRunConfiguration> = emptyList()
fun WritingContext.applyToSourceset(
fun Writer.applyToSourceset(
module: ModuleIR
): TaskResult<TemplateApplicationResult> {
val librariesToAdd = getRequiredLibraries(module)
@@ -121,7 +121,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
return result.asSuccess()
}
fun WritingContext.settingsAsMap(module: Module): Map<String, Any> =
fun Writer.settingsAsMap(module: Module): Map<String, Any> =
withSettingsOf(module) {
settings.associate { setting ->
setting.path to setting.reference.settingValue
@@ -129,7 +129,7 @@ abstract class Template : SettingsOwner, EntitiesOwnerDescriptor {
} + createDefaultSettings()
private fun WritingContext.createDefaultSettings() = mapOf(
private fun Writer.createDefaultSettings() = mapOf(
"projectName" to StructurePlugin::name.settingValue.capitalize()
)
@@ -257,7 +257,7 @@ fun Template.settings(module: Module) = withSettingsOf(module) {
settings.map { it.reference }
}
fun WritingContext.applyTemplateToModule(
fun Writer.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.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.Writer
import org.jetbrains.kotlin.tools.projectWizard.core.div
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService
@@ -17,7 +17,7 @@ import java.io.StringWriter
interface TemplateEngine {
fun renderTemplate(template: FileTemplateDescriptor, data: Map<String, Any?>): String
fun WritingContext.writeTemplate(template: FileTemplate): TaskResult<Unit> {
fun Writer.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())