Wizard: use kotlinx-collections-immutable for storing IRs

This commit is contained in:
Ilya Kirillov
2020-02-27 19:34:45 +03:00
parent e38448c6f2
commit d639816393
13 changed files with 64 additions and 43 deletions
@@ -9,6 +9,7 @@ dependencies {
testImplementation(project(":kotlin-test:kotlin-test-junit")) testImplementation(project(":kotlin-test:kotlin-test-junit"))
testImplementation(commonDep("junit:junit")) testImplementation(commonDep("junit:junit"))
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.2")
} }
sourceSets { sourceSets {
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.core package org.jetbrains.kotlin.tools.projectWizard.core
import kotlinx.collections.immutable.toPersistentList
import java.io.IOException import java.io.IOException
import java.nio.file.Path import java.nio.file.Path
import java.nio.file.Paths import java.nio.file.Paths
@@ -95,6 +96,9 @@ class ListBuilder<T> {
fun <T> buildList(builder: ListBuilder<T>.() -> Unit) = fun <T> buildList(builder: ListBuilder<T>.() -> Unit) =
ListBuilder<T>().apply(builder).build() ListBuilder<T>().apply(builder).build()
fun <T> buildPersistenceList(builder: ListBuilder<T>.() -> Unit) =
buildList(builder).toPersistentList()
object RandomIdGenerator { object RandomIdGenerator {
private val chars = ('a'..'z') + ('A'..'Z') + ('0'..'9') private val chars = ('a'..'z') + ('A'..'Z') + ('0'..'9')
private const val idLength = 8 private const val idLength = 8
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import kotlinx.collections.immutable.PersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.*
import org.jetbrains.kotlin.tools.projectWizard.core.safeAs import org.jetbrains.kotlin.tools.projectWizard.core.safeAs
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.*
@@ -21,9 +22,9 @@ data class BuildFileIR(
val directoryPath: Path, val directoryPath: Path,
val modules: ModulesStructureIR, val modules: ModulesStructureIR,
val pom: PomIR, val pom: PomIR,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : FileIR { ) : FileIR {
override fun withReplacedIrs(irs: List<BuildSystemIR>): BuildFileIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): BuildFileIR = copy(irs = irs)
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun withModulesUpdated(updater: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<BuildFileIR> = fun withModulesUpdated(updater: (ModuleIR) -> TaskResult<ModuleIR>): TaskResult<BuildFileIR> =
@@ -139,12 +140,12 @@ sealed class ModulesStructureIR : BuildSystemIR, IrsOwner {
data class MultiplatformModulesStructureIR( data class MultiplatformModulesStructureIR(
val targets: List<BuildSystemIR>, val targets: List<BuildSystemIR>,
override val modules: List<MultiplatformModuleIR>, override val modules: List<MultiplatformModuleIR>,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : GradleIR, ModulesStructureIR() { ) : GradleIR, ModulesStructureIR() {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override fun withModules(modules: List<ModuleIR>) = copy(modules = modules as List<MultiplatformModuleIR>) override fun withModules(modules: List<ModuleIR>) = copy(modules = modules as List<MultiplatformModuleIR>)
override fun withReplacedIrs(irs: List<BuildSystemIR>): MultiplatformModulesStructureIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): MultiplatformModulesStructureIR = copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
sectionCall("kotlin") { sectionCall("kotlin") {
@@ -173,10 +174,10 @@ fun MultiplatformModulesStructureIR.updateTargets(
data class SingleplatformModulesStructureWithSingleModuleIR( data class SingleplatformModulesStructureWithSingleModuleIR(
val module: SingleplatformModuleIR, val module: SingleplatformModuleIR,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : ModulesStructureIR() { ) : ModulesStructureIR() {
override val modules: List<SingleplatformModuleIR> = listOf(module) override val modules: List<SingleplatformModuleIR> = listOf(module)
override fun withReplacedIrs(irs: List<BuildSystemIR>): SingleplatformModulesStructureWithSingleModuleIR = override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): SingleplatformModulesStructureWithSingleModuleIR =
copy(irs = irs) copy(irs = irs)
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -188,10 +189,10 @@ data class SingleplatformModulesStructureWithSingleModuleIR(
} }
} }
data class RootFileModuleStructureIR(override val irs: List<BuildSystemIR>) : ModulesStructureIR() { data class RootFileModuleStructureIR(override val irs: PersistentList<BuildSystemIR>) : ModulesStructureIR() {
override val modules = emptyList<ModuleIR>() override val modules = emptyList<ModuleIR>()
override fun withReplacedIrs(irs: List<BuildSystemIR>): RootFileModuleStructureIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): RootFileModuleStructureIR = copy(irs = irs)
override fun BuildFilePrinter.render() = when (this) { override fun BuildFilePrinter.render() = when (this) {
is MavenPrinter -> { is MavenPrinter -> {
@@ -1,13 +1,15 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import kotlinx.collections.immutable.*
interface IrsOwner { interface IrsOwner {
val irs: List<BuildSystemIR> val irs: PersistentList<BuildSystemIR>
fun withReplacedIrs(irs: List<BuildSystemIR>): IrsOwner fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): IrsOwner
} }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun <I : IrsOwner> I.withIrs(irs: List<BuildSystemIR>) = withReplacedIrs(irs = this.irs + irs) as I fun <I : IrsOwner> I.withIrs(irs: List<BuildSystemIR>) = withReplacedIrs(irs = this.irs + irs.toPersistentList()) as I
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun <I : IrsOwner> I.withIrs(vararg irs: BuildSystemIR) = withReplacedIrs(irs = this.irs + irs) as I fun <I : IrsOwner> I.withIrs(vararg irs: BuildSystemIR) = withReplacedIrs(irs = this.irs + irs) as I
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import kotlinx.collections.immutable.PersistentList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
@@ -24,12 +25,12 @@ sealed class ModuleIR : IrsOwner, BuildSystemIR {
data class SingleplatformModuleIR( data class SingleplatformModuleIR(
override val name: String, override val name: String,
override val path: Path, override val path: Path,
override val irs: List<BuildSystemIR>, override val irs: PersistentList<BuildSystemIR>,
override val template: Template?, override val template: Template?,
override val originalModule: Module, override val originalModule: Module,
override val sourcesets: List<SingleplatformSourcesetIR> override val sourcesets: List<SingleplatformSourcesetIR>
) : ModuleIR() { ) : ModuleIR() {
override fun withReplacedIrs(irs: List<BuildSystemIR>): SingleplatformModuleIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): SingleplatformModuleIR = copy(irs = irs)
override fun BuildFilePrinter.render() = when (this) { override fun BuildFilePrinter.render() = when (this) {
is GradlePrinter -> { is GradlePrinter -> {
@@ -49,12 +50,12 @@ data class SingleplatformModuleIR(
data class MultiplatformModuleIR( data class MultiplatformModuleIR(
override val name: String, override val name: String,
override val path: Path, override val path: Path,
override val irs: List<BuildSystemIR>, override val irs: PersistentList<BuildSystemIR>,
override val template: Template?, override val template: Template?,
override val originalModule: Module, override val originalModule: Module,
override val sourcesets: List<MultiplatformSourcesetIR> override val sourcesets: List<MultiplatformSourcesetIR>
) : GradleIR, ModuleIR() { ) : GradleIR, ModuleIR() {
override fun withReplacedIrs(irs: List<BuildSystemIR>): MultiplatformModuleIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): MultiplatformModuleIR = copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
sourcesets.map { sourceset -> sourcesets.map { sourceset ->
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
import kotlinx.collections.immutable.PersistentList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.BuildFilePrinter
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
@@ -22,10 +23,10 @@ sealed class SourcesetIR : BuildSystemIR {
data class SingleplatformSourcesetIR( data class SingleplatformSourcesetIR(
override val sourcesetType: SourcesetType, override val sourcesetType: SourcesetType,
override val path: Path, override val path: Path,
override val irs: List<BuildSystemIR>, override val irs: PersistentList<BuildSystemIR>,
override val original: Sourceset override val original: Sourceset
) : SourcesetIR(), IrsOwner { ) : SourcesetIR(), IrsOwner {
override fun withReplacedIrs(irs: List<BuildSystemIR>): SingleplatformSourcesetIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): SingleplatformSourcesetIR = copy(irs = irs)
override fun BuildFilePrinter.render() = Unit override fun BuildFilePrinter.render() = Unit
} }
@@ -33,10 +34,10 @@ data class MultiplatformSourcesetIR(
override val sourcesetType: SourcesetType, override val sourcesetType: SourcesetType,
override val path: Path, override val path: Path,
val targetName: String, val targetName: String,
override val irs: List<BuildSystemIR>, override val irs: PersistentList<BuildSystemIR>,
override val original: Sourceset override val original: Sourceset
) : SourcesetIR(), IrsOwner, GradleIR { ) : SourcesetIR(), IrsOwner, GradleIR {
override fun withReplacedIrs(irs: List<BuildSystemIR>): MultiplatformSourcesetIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): MultiplatformSourcesetIR = copy(irs = irs)
override fun GradlePrinter.renderGradle() = getting(sourcesetName, prefix = null) { override fun GradlePrinter.renderGradle() = getting(sourcesetName, prefix = null) {
val dependencies = irsOfType<DependencyIR>() val dependencies = irsOfType<DependencyIR>()
@@ -5,15 +5,16 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle
import kotlinx.collections.immutable.PersistentList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.*
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
data class SettingsGradleFileIR( data class SettingsGradleFileIR(
val projectName: String, val projectName: String,
val subProjects: List<String>, val subProjects: List<String>,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : FileIR, GradleIR { ) : FileIR, GradleIR {
override fun withReplacedIrs(irs: List<BuildSystemIR>): SettingsGradleFileIR = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): SettingsGradleFileIR = copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
irsOfTypeOrNull<PluginManagementIR>()?.let { pluginManagementIrs -> irsOfTypeOrNull<PluginManagementIR>()?.let { pluginManagementIrs ->
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform
import kotlinx.collections.immutable.PersistentList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.IrsOwner import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.IrsOwner
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinIR
@@ -37,12 +38,12 @@ fun TargetConfigurationIR.addWithJavaIntoJvmTarget() = when {
data class DefaultTargetConfigurationIR( data class DefaultTargetConfigurationIR(
val targetAccess: TargetAccessIR, val targetAccess: TargetAccessIR,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : TargetConfigurationIR { ) : TargetConfigurationIR {
override val targetName: String override val targetName: String
get() = targetAccess.nonDefaultName ?: targetAccess.type.name get() = targetAccess.nonDefaultName ?: targetAccess.type.name
override fun withReplacedIrs(irs: List<BuildSystemIR>): DefaultTargetConfigurationIR = override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): DefaultTargetConfigurationIR =
copy(irs = irs) copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
@@ -59,9 +60,9 @@ data class DefaultTargetConfigurationIR(
data class NonDefaultTargetConfigurationIR( data class NonDefaultTargetConfigurationIR(
val variableName: String, val variableName: String,
override val targetName: String, override val targetName: String,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : TargetConfigurationIR { ) : TargetConfigurationIR {
override fun withReplacedIrs(irs: List<BuildSystemIR>): NonDefaultTargetConfigurationIR = override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>): NonDefaultTargetConfigurationIR =
copy(irs = irs) copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
@@ -78,9 +79,9 @@ data class NonDefaultTargetConfigurationIR(
data class CompilationIR( data class CompilationIR(
val name: String, val name: String,
override val irs: List<BuildSystemIR> override val irs: PersistentList<BuildSystemIR>
) : MultiplatformIR, IrsOwner { ) : MultiplatformIR, IrsOwner {
override fun withReplacedIrs(irs: List<BuildSystemIR>) = copy(irs = irs) override fun withReplacedIrs(irs: PersistentList<BuildSystemIR>) = copy(irs = irs)
override fun GradlePrinter.renderGradle() { override fun GradlePrinter.renderGradle() {
getting(name, "compilations") { irs.listNl() } getting(name, "compilations") { irs.listNl() }
} }
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.buildList 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.BuildSystemIR
@@ -69,7 +70,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc
+NonDefaultTargetConfigurationIR( +NonDefaultTargetConfigurationIR(
variableName = variableName, variableName = variableName,
targetName = moduleName, targetName = moduleName,
irs = createInnerTargetIrs(module) irs = createInnerTargetIrs(module).toPersistentList()
) )
} }
} }
@@ -1,7 +1,9 @@
package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.core.buildList
import org.jetbrains.kotlin.tools.projectWizard.core.buildPersistenceList
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.* 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.DefaultTargetConfigurationIR
@@ -41,7 +43,7 @@ interface SimpleTargetConfigurator : TargetConfigurator {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList { override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(moduleSubType), module.createTargetAccessIr(moduleSubType),
createInnerTargetIrs(module) createInnerTargetIrs(module).toPersistentList()
) )
} }
} }
@@ -65,7 +67,7 @@ object JsBrowserTargetConfigurator : JsTargetConfigurator, ModuleConfiguratorWit
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList { override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js), module.createTargetAccessIr(ModuleSubType.js),
buildList { buildPersistenceList {
+RawGradleIR { +RawGradleIR {
sectionCall("browser") {} sectionCall("browser") {}
} }
@@ -83,7 +85,7 @@ object JsNodeTargetConfigurator : JsTargetConfigurator {
override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList { override fun ReadingContext.createTargetIrs(module: Module): List<BuildSystemIR> = buildList {
+DefaultTargetConfigurationIR( +DefaultTargetConfigurationIR(
module.createTargetAccessIr(ModuleSubType.js), module.createTargetAccessIr(ModuleSubType.js),
buildList { buildPersistenceList {
+RawGradleIR { +RawGradleIR {
sectionCall("nodejs") {} sectionCall("nodejs") {}
} }
@@ -1,5 +1,6 @@
package org.jetbrains.kotlin.tools.projectWizard.plugins package org.jetbrains.kotlin.tools.projectWizard.plugins
import kotlinx.collections.immutable.persistentListOf
import org.jetbrains.kotlin.tools.projectWizard.core.Context import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.JpsPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.JpsPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.MavenPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.MavenPlugin
@@ -11,7 +12,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.*
object Plugins { object Plugins {
val allPlugins = { context: Context -> val allPlugins = { context: Context ->
listOf( persistentListOf(
StructurePlugin(context), StructurePlugin(context),
GroovyDslPlugin(context), GroovyDslPlugin(context),
@@ -126,7 +126,10 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
val settingsGradleIR = SettingsGradleFileIR( val settingsGradleIR = SettingsGradleFileIR(
StructurePlugin::name.settingValue, StructurePlugin::name.settingValue,
allModulesPaths.map { path -> path.joinToString(separator = "") { ":$it" } }, allModulesPaths.map { path -> path.joinToString(separator = "") { ":$it" } },
repositories + GradlePlugin::settingsGradleFileIRs.propertyValue buildPersistenceList {
+repositories
+GradlePlugin::settingsGradleFileIRs.propertyValue
}
) )
val buildFileText = createBuildFile().printBuildFile { settingsGradleIR.render(this) } val buildFileText = createBuildFile().printBuildFile { settingsGradleIR.render(this) }
service<FileSystemWizardService>().createFile( service<FileSystemWizardService>().createFile(
@@ -1,5 +1,7 @@
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList
import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext
import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext import org.jetbrains.kotlin.tools.projectWizard.core.context.WritingContext
import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.*
@@ -79,9 +81,9 @@ class ModulesToIRsConverter(
BuildFileIR( BuildFileIR(
projectName, projectName,
projectPath, projectPath,
RootFileModuleStructureIR(emptyList()), RootFileModuleStructureIR(persistentListOf()),
pomIr, pomIr,
rootBuildFileIrs rootBuildFileIrs.toPersistentList()
) )
} }
@@ -102,7 +104,7 @@ class ModulesToIRsConverter(
val modulePath = calculatePathForModule(module, state.parentPath) val modulePath = calculatePathForModule(module, state.parentPath)
writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath) writingContext.mutateProjectStructureByModuleConfigurator(module, modulePath)
val configurator = module.configurator val configurator = module.configurator
val dependenciesIRs = buildList<BuildSystemIR> { val dependenciesIRs = buildPersistenceList<BuildSystemIR> {
+module.sourcesets.flatMap { sourceset -> +module.sourcesets.flatMap { sourceset ->
sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) } sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) }
} }
@@ -129,7 +131,7 @@ class ModulesToIRsConverter(
SingleplatformSourcesetIR( SingleplatformSourcesetIR(
sourceset.sourcesetType, sourceset.sourcesetType,
modulePath / Defaults.SRC_DIR / sourceset.sourcesetType.name, modulePath / Defaults.SRC_DIR / sourceset.sourcesetType.name,
sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) }, sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) }.toPersistentList(),
sourceset sourceset
) )
} }
@@ -139,7 +141,7 @@ class ModulesToIRsConverter(
modulePath, modulePath,
SingleplatformModulesStructureWithSingleModuleIR( SingleplatformModulesStructureWithSingleModuleIR(
moduleIr, moduleIr,
emptyList() persistentListOf()
), ),
pomIr.copy(artifactId = module.name), pomIr.copy(artifactId = module.name),
createBuildFileIRs(module, state) createBuildFileIRs(module, state)
@@ -173,10 +175,10 @@ class ModulesToIRsConverter(
MultiplatformModulesStructureIR( MultiplatformModulesStructureIR(
targetIrs, targetIrs,
targetModuleIrs, targetModuleIrs,
emptyList() persistentListOf()
), ),
pomIr, pomIr,
buildList { buildPersistenceList {
+createBuildFileIRs(module, state) +createBuildFileIRs(module, state)
module.subModules.forEach { +createBuildFileIRs(it, state) } module.subModules.forEach { +createBuildFileIRs(it, state) }
} }
@@ -206,14 +208,14 @@ class ModulesToIRsConverter(
sourceset.sourcesetType, sourceset.sourcesetType,
modulePath / Defaults.SRC_DIR / sourcesetName, modulePath / Defaults.SRC_DIR / sourcesetName,
target.name, target.name,
sourcesetIrs, sourcesetIrs.toPersistentList(),
sourceset sourceset
) )
} }
return MultiplatformModuleIR( return MultiplatformModuleIR(
target.name, target.name,
modulePath, modulePath,
with(target.configurator) { createModuleIRs(this@createTargetModule, data, target) }, with(target.configurator) { createModuleIRs(this@createTargetModule, data, target) }.toPersistentList(),
target.template, target.template,
target, target,
sourcesetss sourcesetss
@@ -236,7 +238,7 @@ class ModulesToIRsConverter(
private fun ReadingContext.createBuildFileIRs( private fun ReadingContext.createBuildFileIRs(
module: Module, module: Module,
state: ModulesToIrsState state: ModulesToIrsState
) = buildList<BuildSystemIR> { ) = buildPersistenceList<BuildSystemIR> {
val kotlinPlugin = module.configurator.createKotlinPluginIR(data, module) val kotlinPlugin = module.configurator.createKotlinPluginIR(data, module)
?.let { plugin -> ?.let { plugin ->
// do not print version for non-root modules for gradle // do not print version for non-root modules for gradle