diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaJpsWizardService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaJpsWizardService.kt index 0b58e51da62..3954251ad8b 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaJpsWizardService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaJpsWizardService.kt @@ -6,18 +6,15 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.service import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix -import com.intellij.ide.impl.NewProjectUtil import com.intellij.ide.util.projectWizard.ModuleBuilder import com.intellij.jarRepository.JarRepositoryManager import com.intellij.jarRepository.RemoteRepositoryDescription -import com.intellij.openapi.Disposable import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProviderImpl import com.intellij.openapi.module.ModifiableModuleModel import com.intellij.openapi.module.ModuleTypeId import com.intellij.openapi.project.Project import com.intellij.openapi.roots.* import com.intellij.openapi.roots.libraries.ui.OrderRoot -import com.intellij.openapi.util.Disposer import com.intellij.openapi.vfs.VfsUtil import com.intellij.util.PathUtil import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties @@ -41,7 +38,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.NewProjectWizardModuleBui import org.jetbrains.kotlin.idea.framework.KotlinSdkType import org.jetbrains.kotlin.platform.jvm.JvmPlatforms import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JvmModuleConfigurator -import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.withSettingsOf +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.inContextOfModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository import java.nio.file.Path import java.util.* @@ -116,7 +113,7 @@ private class JpsModuleConfigurationUpdater( } private fun ModuleIR.jvmTarget() = reader { - withSettingsOf(originalModule) { + inContextOfModuleConfigurator(originalModule) { JvmModuleConfigurator.targetJvmVersion.reference.settingValue } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/PropertiesOwner.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/PropertiesOwner.kt new file mode 100644 index 00000000000..f94d4b234bd --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/PropertiesOwner.kt @@ -0,0 +1,25 @@ +/* + * 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 + +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PropertyBuilder +import kotlin.properties.ReadOnlyProperty + +interface PropertiesOwner { + fun propertyDelegate( + create: (path: String) -> PropertyBuilder + ): ReadOnlyProperty> + + fun property( + defaultValue: T, + init: PropertyBuilder.() -> Unit = {} + ): ReadOnlyProperty> = + propertyDelegate { path -> PropertyBuilder(path, defaultValue).apply(init) } + + fun listProperty(vararg defaultValues: T, init: PropertyBuilder>.() -> Unit = {}) = + property(defaultValues.toList(), init) +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt index 55bbc38625d..c2aa161098f 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Context.kt @@ -1,6 +1,10 @@ package org.jetbrains.kotlin.tools.projectWizard.core import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PluginProperty +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PluginPropertyReference +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PropertyContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PropertyReference import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.core.service.SettingSavingWizardService @@ -109,9 +113,16 @@ class Context private constructor( fun serviceByClass(klass: KClass, filter: (S) -> Boolean = { true }): S = servicesManager.serviceByClass(klass, filter) ?: error("Service ${klass.simpleName} was not found") + + val PluginProperty.reference: PluginPropertyReference + get() = PluginPropertyReference(this) + val PluginProperty.propertyValue: T get() = propertyContext[this] ?: error("No value is present for property `$this`") + val PropertyReference.propertyValue: T + get() = propertyContext[this] ?: error("No value is present for property `$this`") + val > SettingReference.settingValue: V get() = settingContext[this] ?: error("No value is present for setting `$this`") @@ -171,6 +182,10 @@ class Context private constructor( fun PluginProperty.update( updater: suspend ComputeContext<*>.(T) -> TaskResult + ): TaskResult = reference.update(updater) + + fun PropertyReference.update( + updater: suspend ComputeContext<*>.(T) -> TaskResult ): TaskResult = compute { val (newValue) = updater(propertyValue) propertyContext[this@update] = newValue @@ -182,6 +197,10 @@ class Context private constructor( fun PluginProperty>.addValues( values: List + ): TaskResult = reference.addValues(values) + + fun PropertyReference>.addValues( + values: List ): TaskResult = update { oldValues -> success(oldValues + values) } @JvmName("write") @@ -193,6 +212,10 @@ class Context private constructor( settingContext[this] = newValue } + fun PropertyReference.initDefaultValue(newValue: V) { + propertyContext[this] = property.defaultValue + } + fun > SettingReference.setSettingValueToItsDefaultIfItIsNotSetValue() { val defaultValue = savedOrDefaultValue ?: return if (notRequiredSettingValue == null) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt index 671b1eeb07a..a15cfe22fab 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/Plugin.kt @@ -3,6 +3,9 @@ package org.jetbrains.kotlin.tools.projectWizard.core import org.jetbrains.kotlin.tools.projectWizard.PropertiesOwner import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PluginProperty +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.PropertyBuilder import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/EntityReference.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/EntityReference.kt new file mode 100644 index 00000000000..9e2ffc766ed --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/EntityReference.kt @@ -0,0 +1,17 @@ +/* + * 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.core.entity + +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.SettingReference +import org.jetbrains.kotlin.tools.projectWizard.core.safeAs + +abstract class EntityReference { + abstract val path: String + + final override fun toString() = path + final override fun equals(other: Any?) = other.safeAs>()?.path == path + final override fun hashCode() = path.hashCode() +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt deleted file mode 100644 index e9445d6b70c..00000000000 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/Property.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.jetbrains.kotlin.tools.projectWizard.core.entity - -class PropertyContext : ValuedEntityContext>() - -interface Property : Entity { - val defaultValue: T -} - -data class InternalProperty( - override val path: String, - override val defaultValue: T, -) : Property, EntityWithValue() - -sealed class PropertyImpl : Property - -class PluginProperty( - internal: Property -) : PropertyImpl(), Property by internal - -class PropertyBuilder( - private val name: String, - private val defaultValue: T -) { - fun build(): Property = InternalProperty(name, defaultValue) -} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/ValuedEntityContext.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/ValuedEntityContext.kt index e27801a1ecb..7940e6cdbf0 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/ValuedEntityContext.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/ValuedEntityContext.kt @@ -1,7 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity abstract class ValuedEntityContext { - private val values = mutableMapOf() + protected val values = mutableMapOf() @Suppress("UNCHECKED_CAST") operator fun get(entity: E) = diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/Property.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/Property.kt new file mode 100644 index 00000000000..0f34c42273f --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/Property.kt @@ -0,0 +1,47 @@ +/* + * 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.core.entity.properties + +import org.jetbrains.kotlin.tools.projectWizard.core.entity.Entity +import org.jetbrains.kotlin.tools.projectWizard.core.entity.EntityWithValue +import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValuedEntityContext + +class PropertyContext : ValuedEntityContext>() { + @Suppress("UNCHECKED_CAST") + operator fun get(entity: PropertyReference) = + values[entity.path] as? V + + operator fun set(entity: PropertyReference, value: Any) { + values[entity.path] = value + } +} + +interface Property : Entity { + val defaultValue: T +} + +data class InternalProperty( + override val path: String, + override val defaultValue: T, +) : Property, EntityWithValue() + +sealed class PropertyImpl : Property + +class PluginProperty( + internal: Property +) : PropertyImpl(), Property by internal + +class ModuleConfiguratorProperty( + internal: Property +) : PropertyImpl(), Property by internal + + +class PropertyBuilder( + private val name: String, + private val defaultValue: T +) { + fun build(): Property = InternalProperty(name, defaultValue) +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/PropertyReference.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/PropertyReference.kt new file mode 100644 index 00000000000..9de8223dbc6 --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/properties/PropertyReference.kt @@ -0,0 +1,28 @@ +/* + * 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.core.entity.properties + +import org.jetbrains.kotlin.tools.projectWizard.core.entity.EntityReference +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module + +sealed class PropertyReference : EntityReference() { + abstract val property: Property +} + +class PluginPropertyReference(override val property: PluginProperty): PropertyReference() { + override val path: String + get() = property.path +} + +class ModuleConfiguratorPropertyReference( + val configurator: ModuleConfigurator, + val module: Module, + override val property: ModuleConfiguratorProperty +) : PropertyReference() { + override val path: String + get() = "${configurator.id}/${module.identificator}/${property.path}" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt index 2fabd0c4006..466b53f6d3c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/settings/SettingReference.kt @@ -5,26 +5,19 @@ package org.jetbrains.kotlin.tools.projectWizard.core.entity.settings -import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.core.Reader -import org.jetbrains.kotlin.tools.projectWizard.core.safeAs +import org.jetbrains.kotlin.tools.projectWizard.core.entity.EntityReference import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.templates.Template import kotlin.reflect.KClass -sealed class SettingReference> { - @get:NonNls - abstract val path: String +sealed class SettingReference>: EntityReference() { abstract val type: KClass abstract fun Reader.getSetting(): Setting - - final override fun toString() = path - final override fun equals(other: Any?) = other.safeAs>()?.path == path - final override fun hashCode() = path.hashCode() } data class PluginSettingReference>( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt index 64e9894d838..6f9f1b05224 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt @@ -140,7 +140,7 @@ object AndroidTargetConfigurator : TargetConfigurator, override val text = KotlinNewProjectWizardBundle.message("module.configurator.android") override fun Reader.createAndroidPlugin(module: Module): AndroidGradlePlugin = - withSettingsOf(module) { androidPlugin.reference.settingValue } + inContextOfModuleConfigurator(module) { androidPlugin.reference.settingValue } override fun getConfiguratorSettings() = buildList> { +super.getConfiguratorSettings() diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt index 409726c21a0..f12632da6aa 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt @@ -70,7 +70,7 @@ object IOSSinglePlatformModuleConfigurator : SinglePlatformModuleConfigurator, M } private fun Reader.createTemplatesSettingValues(module: Module): Map { - val dependentModule = withSettingsOf(module) { + val dependentModule = inContextOfModuleConfigurator(module) { dependentModule.reference.notRequiredSettingValue?.module } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index 53b568d9d7d..1e864a9d2de 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -2,8 +2,10 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.kotlin.tools.projectWizard.Identificator +import org.jetbrains.kotlin.tools.projectWizard.PropertiesOwner import org.jetbrains.kotlin.tools.projectWizard.SettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.* import org.jetbrains.kotlin.tools.projectWizard.enumSettingImpl import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR @@ -21,41 +23,49 @@ import java.nio.file.Path import kotlin.properties.ReadOnlyProperty -interface ModuleConfiguratorSettingsEnvironment { +interface ModuleConfiguratorContext { val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference + + val ModuleConfiguratorProperty.reference: PropertyReference } -class ModuleBasedConfiguratorSettingsEnvironment( +class ModuleBasedConfiguratorContext( private val configurator: ModuleConfigurator, private val module: Module -) : ModuleConfiguratorSettingsEnvironment { +) : ModuleConfiguratorContext { override val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference get() = ModuleBasedConfiguratorSettingReference(configurator, module, this) + + override val ModuleConfiguratorProperty.reference: PropertyReference + get() = ModuleConfiguratorPropertyReference(configurator, module, this) } -class IdBasedConfiguratorSettingsEnvironment( +class IdBasedConfiguratorContext( private val configurator: ModuleConfigurator, private val moduleId: Identificator -) : ModuleConfiguratorSettingsEnvironment { +) : ModuleConfiguratorContext { override val > ModuleConfiguratorSetting.reference: ModuleConfiguratorSettingReference get() = IdBasedConfiguratorSettingReference(configurator, moduleId, this) + + override val ModuleConfiguratorProperty.reference: PropertyReference + get() = error("Should not be called as IdBasedConfiguratorContext used only for parsing settings") } -fun withSettingsOf( +fun inContextOfModuleConfigurator( moduleId: Identificator, configurator: ModuleConfigurator, - function: ModuleConfiguratorSettingsEnvironment.() -> T -): T = function(IdBasedConfiguratorSettingsEnvironment(configurator, moduleId)) + function: ModuleConfiguratorContext.() -> T +): T = function(IdBasedConfiguratorContext(configurator, moduleId)) -fun withSettingsOf( +fun inContextOfModuleConfigurator( module: Module, configurator: ModuleConfigurator = module.configurator, - function: ModuleConfiguratorSettingsEnvironment.() -> T -): T = function(ModuleBasedConfiguratorSettingsEnvironment(configurator, module)) + function: ModuleConfiguratorContext.() -> T +): T = function(ModuleBasedConfiguratorContext(configurator, module)) fun > Reader.settingValue(module: Module, setting: ModuleConfiguratorSetting): V? = - withSettingsOf(module) { + inContextOfModuleConfigurator(module) { setting.reference.notRequiredSettingValue } @@ -166,13 +176,47 @@ abstract class ModuleConfiguratorSettings : SettingsOwner { enumSettingImpl(title, neededAtPhase, init) as ReadOnlyProperty>> } +interface ModuleConfiguratorWithProperties : ModuleConfigurator { + fun getConfiguratorProperties(): List> + + fun SettingsWriter.initDefaultValuesForProperties(module: Module) { + inContextOfModuleConfigurator(module) { + getConfiguratorProperties().forEach { property -> + property.reference.initDefaultValue(module) + } + } + } +} + +interface ModuleConfiguratorProperties : PropertiesOwner { + override fun propertyDelegate( + create: (path: String) -> PropertyBuilder, + ): ReadOnlyProperty> = + cached { name -> ModuleConfiguratorProperty(create(name).build()) } + + @Suppress("UNCHECKED_CAST") + override fun property( + defaultValue: T, + init: PropertyBuilder.() -> Unit, + ): ReadOnlyProperty> = + super.property(defaultValue, init) as ReadOnlyProperty> + + @Suppress("UNCHECKED_CAST") + override fun listProperty( + vararg defaultValues: T, + init: PropertyBuilder>.() -> Unit + ): ReadOnlyProperty>> = + super.listProperty(defaultValues = defaultValues, init) as ReadOnlyProperty>> +} + + interface ModuleConfiguratorWithSettings : ModuleConfigurator { fun getConfiguratorSettings(): List> = emptyList() fun getPluginSettings(): List>> = emptyList() fun SettingsWriter.initDefaultValuesFor(module: Module) { - withSettingsOf(module) { + inContextOfModuleConfigurator(module) { getConfiguratorSettings().forEach { setting -> setting.reference.setSettingValueToItsDefaultIfItIsNotSetValue() } @@ -180,7 +224,7 @@ interface ModuleConfiguratorWithSettings : ModuleConfigurator { } fun > Reader.settingsValue(module: Module, setting: ModuleConfiguratorSetting): V = - withSettingsOf(module) { setting.reference.settingValue } + inContextOfModuleConfigurator(module) { setting.reference.settingValue } } val ModuleConfigurator.settings @@ -285,7 +329,7 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { path, map, configurator.settings.map { setting -> - val reference = withSettingsOf(moduleIdentificator, configurator) { setting.reference } + val reference = inContextOfModuleConfigurator(moduleIdentificator, configurator) { setting.reference } reference to setting } ) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt index e2b0a2e225b..e08b188cdd0 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle 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.entity.settings.SettingType import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType @@ -56,7 +55,7 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings { configurationData: ModulesToIrConversionData, module: Module ): List = - withSettingsOf(module) { + inContextOfModuleConfigurator(module) { reader { testFramework.reference.settingValue.dependencyNames.map { dependencyName -> KotlinArbitraryDependencyIR( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt index d7cce22ec4e..2e68c168f34 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/TargetConfigurator.kt @@ -146,7 +146,7 @@ object JvmTargetConfigurator : JvmModuleConfigurator, module: Module ): List = irsList { reader { - withSettingsOf(module) { + inContextOfModuleConfigurator(module) { val targetVersionValue = JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value if (buildSystemType.isGradle) { "compilations.all" { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt index 42070bde7fb..1b63859d984 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators -import kotlinx.collections.immutable.toPersistentList import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.Reader @@ -11,14 +10,10 @@ import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.DefaultTargetConfigurationIR -import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.TargetAccessIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.MavenPropertyIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType -import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin 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.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType @@ -115,7 +110,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator, buildList { +GradleImportIR("org.jetbrains.kotlin.gradle.tasks.KotlinCompile") - val targetVersionValue = withSettingsOf(module) { + val targetVersionValue = inContextOfModuleConfigurator(module) { reader { JvmModuleConfigurator.targetJvmVersion.reference.settingValue.value } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt index 8486349de82..1f1d2b863fb 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/AndroidPlugin.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidModuleConfigurator diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt index 9b4487de52e..d4d22362b62 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/RunConfigurationsPlugin.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.Plugin import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.RunConfigurationsService import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt index 9f242d05947..52adfa70024 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/StructurePlugin.kt @@ -4,7 +4,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt index 8bebce57280..22ea146b37c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt @@ -6,7 +6,7 @@ import org.jetbrains.annotations.NonNls import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.BuildSystemAvailabilityWizardService diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt index 006ff25dc3b..34a828e8ccd 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/gradle/GradlePlugin.kt @@ -4,7 +4,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index ac972d8c9b0..1caa8f34544 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -4,6 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.* +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt index 93249270e09..63e4722ee3c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/projectTemplates/ProjectTemplatesPlugin.kt @@ -3,7 +3,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates import org.jetbrains.kotlin.tools.projectWizard.KotlinNewProjectWizardBundle import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt index ab937b1554b..1318cb3ab45 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatePlugin.kt @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Plugin import org.jetbrains.kotlin.tools.projectWizard.core.PluginSettingsOwner import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.templates.Template diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt index 9db55a0c733..ffcecb98f1a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt @@ -4,7 +4,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.Defaults.SRC_DIR import org.jetbrains.kotlin.tools.projectWizard.core.entity.PipelineTask -import org.jetbrains.kotlin.tools.projectWizard.core.entity.Property +import org.jetbrains.kotlin.tools.projectWizard.core.entity.properties.Property import org.jetbrains.kotlin.tools.projectWizard.core.entity.settings.PluginSetting import org.jetbrains.kotlin.tools.projectWizard.core.service.TemplateEngineService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index a0668c3f231..f1354f91b1c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -103,7 +103,7 @@ class TemplateSettingsBuilder( class ConfiguratorSettingsBuilder( val module: Module, val configurator: C -) : ModuleConfiguratorSettingsEnvironment by ModuleBasedConfiguratorSettingsEnvironment(configurator, module) { +) : ModuleConfiguratorContext by ModuleBasedConfiguratorContext(configurator, module) { init { assert(module.configurator === configurator) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt index 93a58b6496c..37a109adc8a 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt @@ -76,6 +76,7 @@ class Module( fun SettingsWriter.initDefaultValuesForSettings() { configurator.safeAs()?.apply { initDefaultValuesFor(this@Module) } + configurator.safeAs()?.apply { initDefaultValuesForProperties(this@Module) } template?.apply { initDefaultValuesFor(this@Module) } } @@ -114,7 +115,7 @@ class Module( } val moduleConfiguratorValidator = settingValidator { module -> - withSettingsOf(module) { + inContextOfModuleConfigurator(module) { allSettingsOfModuleConfigurator(module.configurator).map { setting -> val reference = when (setting) { is PluginSetting> -> setting.reference diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt index 22ff0278325..7f1e930db2b 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt @@ -83,7 +83,7 @@ sealed class ModuleDependencyType( to: Module, toModulePath: Path, data: ModulesToIrConversionData - ): TaskResult = withSettingsOf(from) { + ): TaskResult = inContextOfModuleConfigurator(from) { IOSSinglePlatformModuleConfigurator.dependentModule.reference .setValue(IOSSinglePlatformModuleConfigurator.DependentModuleReference(to)) val dummyFilePath = Defaults.SRC_DIR / "${to.iosTargetSafe()!!.name}Main" / to.configurator.kotlinDirectoryName / "dummyFile.kt" diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt index 15ba58d8edd..1db2cfa50f1 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/SimpleJsClientTemplate.kt @@ -45,7 +45,7 @@ class SimpleJsClientTemplate : Template() { JsBrowserTargetConfigurator -> true BrowserJsSinglePlatformModuleConfigurator -> { with(reader) { - withSettingsOf(module, module.configurator) { + inContextOfModuleConfigurator(module, module.configurator) { JSConfigurator.kind.reference.notRequiredSettingValue == JsTargetKind.APPLICATION } }