Wizard: always use all plugin set in tests
This commit is contained in:
+1
-1
@@ -21,7 +21,7 @@ dependencies {
|
|||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 29
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId 'testArtifactId'
|
applicationId 'testGroupId.android'
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 1
|
versionCode 1
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ dependencies {
|
|||||||
android {
|
android {
|
||||||
compileSdkVersion(29)
|
compileSdkVersion(29)
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "testArtifactId"
|
applicationId = "testGroupId.android"
|
||||||
minSdkVersion(24)
|
minSdkVersion(24)
|
||||||
targetSdkVersion(29)
|
targetSdkVersion(29)
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
|
|||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
+2
@@ -1,3 +1,5 @@
|
|||||||
|
android:
|
||||||
|
androidSdkPath: androidSdkPath
|
||||||
kotlin:
|
kotlin:
|
||||||
projectKind: Multiplatform
|
projectKind: Multiplatform
|
||||||
modules:
|
modules:
|
||||||
|
|||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
-5
@@ -1,5 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.MavenPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
|
||||||
org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
|
||||||
+15
-13
@@ -5,11 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.cli
|
package org.jetbrains.kotlin.tools.projectWizard.cli
|
||||||
|
|
||||||
|
import com.intellij.testFramework.UsefulTestCase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.ExceptionError
|
import org.jetbrains.kotlin.tools.projectWizard.core.ExceptionError
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.div
|
import org.jetbrains.kotlin.tools.projectWizard.core.div
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.onFailure
|
import org.jetbrains.kotlin.tools.projectWizard.core.onFailure
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.Services
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.Services
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.Plugins
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.MavenPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.MavenPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GroovyDslPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.KotlinDslPlugin
|
||||||
@@ -18,27 +20,24 @@ import java.nio.file.Files
|
|||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
|
|
||||||
abstract class AbstractBuildFileGenerationTest : AbstractPluginBasedTest() {
|
abstract class AbstractBuildFileGenerationTest : UsefulTestCase() {
|
||||||
fun doTest(directoryPath: String) {
|
fun doTest(directoryPath: String) {
|
||||||
val directory = Paths.get(directoryPath)
|
val directory = Paths.get(directoryPath)
|
||||||
val testData = init(directory)
|
val expectedDirectory = expectedDirectory(directory)
|
||||||
if (KotlinDslPlugin::class in testData.pluginClasses) {
|
|
||||||
doTest(directory, testData, BuildSystem.GRADLE_KOTLIN_DSL)
|
for (buildSystem in BuildSystem.values()) {
|
||||||
}
|
if (Files.exists(expectedDirectory / buildSystem.buildFileName)) {
|
||||||
if (GroovyDslPlugin::class in testData.pluginClasses) {
|
doTest(directory, buildSystem)
|
||||||
doTest(directory, testData, BuildSystem.GRADLE_GROOVY_DSL)
|
}
|
||||||
}
|
|
||||||
if (MavenPlugin::class in testData.pluginClasses) {
|
|
||||||
doTest(directory, testData, BuildSystem.MAVEN)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doTest(directory: Path, testData: WizardTestData, buildSystem: BuildSystem) {
|
private fun doTest(directory: Path, buildSystem: BuildSystem) {
|
||||||
val yaml = directory.resolve("settings.yaml").toFile().readText() + "\n" +
|
val yaml = directory.resolve("settings.yaml").toFile().readText() + "\n" +
|
||||||
defaultStructure + "\n" +
|
defaultStructure + "\n" +
|
||||||
buildSystem.yaml
|
buildSystem.yaml
|
||||||
val tempDir = Files.createTempDirectory(null)
|
val tempDir = Files.createTempDirectory(null)
|
||||||
val wizard = YamlWizard(yaml, tempDir.toString(), testData.createPlugins, isUnitTestMode = true)
|
val wizard = YamlWizard(yaml, tempDir.toString(), Plugins.allPlugins, isUnitTestMode = true)
|
||||||
val result = wizard.apply(Services.IDEA_INDEPENDENT_SERVICES, GenerationPhase.ALL)
|
val result = wizard.apply(Services.IDEA_INDEPENDENT_SERVICES, GenerationPhase.ALL)
|
||||||
result.onFailure { errors ->
|
result.onFailure { errors ->
|
||||||
errors.forEach { error ->
|
errors.forEach { error ->
|
||||||
@@ -49,7 +48,7 @@ abstract class AbstractBuildFileGenerationTest : AbstractPluginBasedTest() {
|
|||||||
fail(errors.joinToString("\n"))
|
fail(errors.joinToString("\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
val expectedDirectory = (directory / EXPECTED_DIRECTORY_NAME).takeIf { Files.exists(it) } ?: directory
|
val expectedDirectory = expectedDirectory(directory)
|
||||||
|
|
||||||
compareFiles(
|
compareFiles(
|
||||||
expectedDirectory.allBuildFiles(buildSystem), expectedDirectory,
|
expectedDirectory.allBuildFiles(buildSystem), expectedDirectory,
|
||||||
@@ -84,6 +83,9 @@ abstract class AbstractBuildFileGenerationTest : AbstractPluginBasedTest() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun expectedDirectory(directory: Path): Path =
|
||||||
|
(directory / EXPECTED_DIRECTORY_NAME).takeIf { Files.exists(it) } ?: directory
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val EXPECTED_DIRECTORY_NAME = "expected"
|
private const val EXPECTED_DIRECTORY_NAME = "expected"
|
||||||
|
|
||||||
|
|||||||
-45
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.cli
|
|
||||||
|
|
||||||
import com.intellij.testFramework.UsefulTestCase
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.PluginReference
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.StructurePlugin
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
|
|
||||||
import java.nio.file.Path
|
|
||||||
import kotlin.reflect.full.primaryConstructor
|
|
||||||
|
|
||||||
abstract class AbstractPluginBasedTest : UsefulTestCase() {
|
|
||||||
open val defaultPlugins: List<PluginReference> = listOf(
|
|
||||||
StructurePlugin::class,
|
|
||||||
TemplatesPlugin::class
|
|
||||||
)
|
|
||||||
|
|
||||||
protected fun init(directory: Path): WizardTestData {
|
|
||||||
val pluginNames = directory.resolve("plugins.txt").toFile().readLines().mapNotNull { name ->
|
|
||||||
name.trim().takeIf { it.isNotBlank() }
|
|
||||||
}.distinct()
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
val pluginClasses = defaultPlugins + pluginNames.map { pluginName ->
|
|
||||||
Class.forName(pluginName).kotlin as PluginReference
|
|
||||||
}
|
|
||||||
|
|
||||||
val createPlugins = { context: Context ->
|
|
||||||
pluginClasses.map { pluginClass ->
|
|
||||||
pluginClass.primaryConstructor!!.call(context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return WizardTestData(pluginClasses, createPlugins)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class WizardTestData(
|
|
||||||
val pluginClasses: List<PluginReference>,
|
|
||||||
val createPlugins: (Context) -> List<Plugin>
|
|
||||||
)
|
|
||||||
+5
-56
@@ -1,68 +1,17 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.core
|
package org.jetbrains.kotlin.tools.projectWizard.core
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingReference
|
typealias Checker = ReadingContext.() -> Boolean
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingType
|
|
||||||
|
|
||||||
|
val ALWAYS_AVAILABLE_CHECKER = checker { true }
|
||||||
|
|
||||||
sealed class CheckerRule {
|
fun checker(check: Checker) = check
|
||||||
abstract fun check(context: ReadingContext): Boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
data class RuleBySettingValue(
|
|
||||||
val settingReference: SettingReference<Any, SettingType<Any>>,
|
|
||||||
val expectedValue: Any
|
|
||||||
) : CheckerRule() {
|
|
||||||
override fun check(context: ReadingContext): Boolean = with(context) {
|
|
||||||
settingReference.notRequiredSettingValue() == expectedValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data class OrRule(
|
|
||||||
val left: CheckerRule,
|
|
||||||
val right: CheckerRule
|
|
||||||
) : CheckerRule() {
|
|
||||||
override fun check(context: ReadingContext): Boolean = left.check(context) || right.check(context)
|
|
||||||
}
|
|
||||||
|
|
||||||
data class Checker(val rules: List<CheckerRule>) {
|
|
||||||
fun check(context: ReadingContext) =
|
|
||||||
rules.all { rule -> rule.check(context) }
|
|
||||||
|
|
||||||
class Builder {
|
|
||||||
private val rules = mutableListOf<CheckerRule>()
|
|
||||||
|
|
||||||
infix fun <V : Any, T: SettingType<V>> SettingReference<V, T>.shouldBeEqual(value: V) =
|
|
||||||
RuleBySettingValue(this, value)
|
|
||||||
|
|
||||||
infix fun CheckerRule.or(other: CheckerRule) =
|
|
||||||
OrRule(this, other)
|
|
||||||
|
|
||||||
fun extend(parent: Checker) {
|
|
||||||
this.rules += parent.rules
|
|
||||||
}
|
|
||||||
|
|
||||||
fun rule(rule: CheckerRule) {
|
|
||||||
rules += rule
|
|
||||||
}
|
|
||||||
|
|
||||||
fun build() = Checker(rules)
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
val ALWAYS_AVAILABLE = Checker(emptyList())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun checker(init: Checker.Builder.() -> Unit) =
|
|
||||||
Checker.Builder().apply(init).build()
|
|
||||||
|
|
||||||
|
|
||||||
interface ContextOwner {
|
interface ContextOwner {
|
||||||
val context: Context
|
val context: Context
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ActivityCheckerOwner {
|
interface ActivityCheckerOwner {
|
||||||
val activityChecker: Checker
|
val isAvailable: Checker
|
||||||
|
|
||||||
fun isActive(readingContext: ReadingContext) = activityChecker.check(readingContext)
|
fun isActive(readingContext: ReadingContext) = isAvailable(readingContext)
|
||||||
}
|
}
|
||||||
+6
-4
@@ -177,7 +177,7 @@ data class InternalSetting<out V : Any, out T : SettingType<V>>(
|
|||||||
override val path: String,
|
override val path: String,
|
||||||
override val title: String,
|
override val title: String,
|
||||||
override val defaultValue: V?,
|
override val defaultValue: V?,
|
||||||
override val activityChecker: Checker,
|
override val isAvailable: Checker,
|
||||||
override val isRequired: Boolean,
|
override val isRequired: Boolean,
|
||||||
override val isSavable: Boolean,
|
override val isSavable: Boolean,
|
||||||
override var neededAtPhase: GenerationPhase,
|
override var neededAtPhase: GenerationPhase,
|
||||||
@@ -200,14 +200,16 @@ class TemplateSetting<out V : Any, out T : SettingType<V>>(
|
|||||||
) : SettingImpl<V, T>(), Setting<V, T> by internal
|
) : SettingImpl<V, T>(), Setting<V, T> by internal
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
abstract class SettingBuilder<V : Any, T : SettingType<V>>(
|
abstract class SettingBuilder<V : Any, T : SettingType<V>>(
|
||||||
private val path: String,
|
private val path: String,
|
||||||
private val title: String,
|
private val title: String,
|
||||||
private val neededAtPhase: GenerationPhase
|
private val neededAtPhase: GenerationPhase
|
||||||
) {
|
) {
|
||||||
var checker: Checker = Checker.ALWAYS_AVAILABLE
|
var isAvailable: ReadingContext.() -> Boolean = { true }
|
||||||
var defaultValue: V? = null
|
var defaultValue: V? = null
|
||||||
var isSavable: Boolean = false
|
var isSavable: Boolean = false
|
||||||
|
var isRequired: Boolean? = null
|
||||||
|
|
||||||
protected var validator = SettingValidator<V> { ValidationResult.OK }
|
protected var validator = SettingValidator<V> { ValidationResult.OK }
|
||||||
|
|
||||||
@@ -226,8 +228,8 @@ abstract class SettingBuilder<V : Any, T : SettingType<V>>(
|
|||||||
path = path,
|
path = path,
|
||||||
title = title,
|
title = title,
|
||||||
defaultValue = defaultValue,
|
defaultValue = defaultValue,
|
||||||
activityChecker = checker,
|
isAvailable = isAvailable,
|
||||||
isRequired = defaultValue == null,
|
isRequired = isRequired ?: (defaultValue == null),
|
||||||
isSavable = isSavable,
|
isSavable = isSavable,
|
||||||
neededAtPhase = neededAtPhase,
|
neededAtPhase = neededAtPhase,
|
||||||
validator = validator,
|
validator = validator,
|
||||||
|
|||||||
+3
-3
@@ -42,7 +42,7 @@ data class PipelineTask(
|
|||||||
val before: List<PipelineTaskReference>,
|
val before: List<PipelineTaskReference>,
|
||||||
val after: List<PipelineTaskReference>,
|
val after: List<PipelineTaskReference>,
|
||||||
val phase: GenerationPhase,
|
val phase: GenerationPhase,
|
||||||
val checker: Checker,
|
val isAvailable: Checker,
|
||||||
val title: String?
|
val title: String?
|
||||||
) : Task() {
|
) : Task() {
|
||||||
class Builder(
|
class Builder(
|
||||||
@@ -53,7 +53,7 @@ data class PipelineTask(
|
|||||||
private val before = mutableListOf<PipelineTaskReference>()
|
private val before = mutableListOf<PipelineTaskReference>()
|
||||||
private val after = mutableListOf<PipelineTaskReference>()
|
private val after = mutableListOf<PipelineTaskReference>()
|
||||||
|
|
||||||
var activityChecker: Checker = Checker.ALWAYS_AVAILABLE
|
var isAvailable: Checker = ALWAYS_AVAILABLE_CHECKER
|
||||||
|
|
||||||
var title: String? = null
|
var title: String? = null
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ data class PipelineTask(
|
|||||||
this.after.addAll(after)
|
this.after.addAll(after)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun build(): PipelineTask = PipelineTask(name, action, before, after, phase, activityChecker, title)
|
fun build(): PipelineTask = PipelineTask(name, action, before, after, phase, isAvailable, title)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+12
-3
@@ -8,11 +8,13 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.checker
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidModuleConfigurator
|
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.AndroidModuleConfigurator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.allModules
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.allIRModules
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.gradle.GradlePlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.withAllSubModules
|
||||||
|
|
||||||
class AndroidPlugin(context: Context) : Plugin(context) {
|
class AndroidPlugin(context: Context) : Plugin(context) {
|
||||||
val androidSdkPath by pathSetting(
|
val androidSdkPath by pathSetting(
|
||||||
@@ -20,15 +22,22 @@ class AndroidPlugin(context: Context) : Plugin(context) {
|
|||||||
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
neededAtPhase = GenerationPhase.PROJECT_GENERATION
|
||||||
) {
|
) {
|
||||||
isSavable = true
|
isSavable = true
|
||||||
|
isAvailable = isAndroidContainingProject
|
||||||
shouldExists()
|
shouldExists()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val isAndroidContainingProject = checker {
|
||||||
|
KotlinPlugin::modules.settingValue
|
||||||
|
.withAllSubModules(includeSourcesets = true)
|
||||||
|
.any { it.configurator is AndroidModuleConfigurator }
|
||||||
|
}
|
||||||
|
|
||||||
val addAndroidSdkToLocalProperties by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val addAndroidSdkToLocalProperties by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runBefore(GradlePlugin::createLocalPropertiesFile)
|
runBefore(GradlePlugin::createLocalPropertiesFile)
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
|
isAvailable = isAndroidContainingProject
|
||||||
withAction {
|
withAction {
|
||||||
if (allModules.none { it.originalModule.configurator is AndroidModuleConfigurator }) return@withAction UNIT_SUCCESS
|
if (allIRModules.none { it.originalModule.configurator is AndroidModuleConfigurator }) return@withAction UNIT_SUCCESS
|
||||||
val path = AndroidPlugin::androidSdkPath.settingValue
|
val path = AndroidPlugin::androidSdkPath.settingValue
|
||||||
GradlePlugin::localProperties.addValues(
|
GradlePlugin::localProperties.addValues(
|
||||||
"sdk.dir" to path
|
"sdk.dir" to path
|
||||||
|
|||||||
+2
-3
@@ -86,13 +86,12 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
|||||||
withAction {
|
withAction {
|
||||||
val data = BuildSystemPlugin::buildSystemData.propertyValue.first { it.type == buildSystemType }
|
val data = BuildSystemPlugin::buildSystemData.propertyValue.first { it.type == buildSystemType }
|
||||||
service<ProjectImportingWizardService> { service -> service.isSuitableFor(data.type) }!!
|
service<ProjectImportingWizardService> { service -> service.isSuitableFor(data.type) }!!
|
||||||
.importProject(StructurePlugin::projectPath.reference.settingValue, allModules)
|
.importProject(StructurePlugin::projectPath.reference.settingValue, allIRModules)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected fun addBuildSystemData(data: BuildSystemData) = pipelineTask(GenerationPhase.PREPARE) {
|
protected fun addBuildSystemData(data: BuildSystemData) = pipelineTask(GenerationPhase.PREPARE) {
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
activityChecker = Checker.ALWAYS_AVAILABLE
|
|
||||||
withAction {
|
withAction {
|
||||||
BuildSystemPlugin::buildSystemData.addValues(data)
|
BuildSystemPlugin::buildSystemData.addValues(data)
|
||||||
}
|
}
|
||||||
@@ -125,7 +124,7 @@ val BuildSystemType.isGradle
|
|||||||
get() = this == BuildSystemType.GradleGroovyDsl
|
get() = this == BuildSystemType.GradleGroovyDsl
|
||||||
|| this == BuildSystemType.GradleKotlinDsl
|
|| this == BuildSystemType.GradleKotlinDsl
|
||||||
|
|
||||||
val WritingContext.allModules
|
val ReadingContext.allIRModules
|
||||||
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
|
get() = BuildSystemPlugin::buildFiles.propertyValue.flatMap { buildFile ->
|
||||||
buildFile.modules.modules
|
buildFile.modules.modules
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -3,7 +3,6 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.asSuccess
|
import org.jetbrains.kotlin.tools.projectWizard.core.asSuccess
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.checker
|
import org.jetbrains.kotlin.tools.projectWizard.core.checker
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RootFileModuleStructureIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RootFileModuleStructureIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.ModulesDependencyMavenIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.ModulesDependencyMavenIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.PluginRepositoryMavenIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.PluginRepositoryMavenIR
|
||||||
@@ -17,13 +16,13 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
override val title: String = "Maven"
|
override val title: String = "Maven"
|
||||||
|
|
||||||
private val isMaven = checker {
|
private val isMaven = checker {
|
||||||
rule(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.Maven)
|
BuildSystemPlugin::type.settingValue == BuildSystemType.Maven
|
||||||
}
|
}
|
||||||
|
|
||||||
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
activityChecker = isMaven
|
isAvailable = isMaven
|
||||||
withAction {
|
withAction {
|
||||||
BuildSystemPlugin::buildFiles.update { buildFiles ->
|
BuildSystemPlugin::buildFiles.update { buildFiles ->
|
||||||
if (buildFiles.size == 1) return@update buildFiles.asSuccess()
|
if (buildFiles.size == 1) return@update buildFiles.asSuccess()
|
||||||
@@ -45,7 +44,7 @@ class MavenPlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
val addBuildSystemPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val addBuildSystemPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createPluginRepositories)
|
runAfter(KotlinPlugin::createPluginRepositories)
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
activityChecker = isMaven
|
isAvailable = isMaven
|
||||||
|
|
||||||
withAction {
|
withAction {
|
||||||
val repositories = BuildSystemPlugin::pluginRepositoreis.propertyValue
|
val repositories = BuildSystemPlugin::pluginRepositoreis.propertyValue
|
||||||
|
|||||||
+7
-12
@@ -23,13 +23,13 @@ import org.jetbrains.kotlin.tools.projectWizard.templates.FileTemplateDescriptor
|
|||||||
abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
||||||
val createGradleWrapper by booleanSetting("Create Gradle Wrapper", GenerationPhase.FIRST_STEP) {
|
val createGradleWrapper by booleanSetting("Create Gradle Wrapper", GenerationPhase.FIRST_STEP) {
|
||||||
defaultValue = true
|
defaultValue = true
|
||||||
checker = isGradle
|
isAvailable = isGradle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val version by versionSetting("Gradle Version", GenerationPhase.FIRST_STEP) {
|
val version by versionSetting("Gradle Version", GenerationPhase.FIRST_STEP) {
|
||||||
defaultValue = defaultVersions.first()
|
defaultValue = defaultVersions.first()
|
||||||
checker = isGradle
|
isAvailable = isGradle
|
||||||
}
|
}
|
||||||
|
|
||||||
val gradleVersions by property<List<Version>>(emptyList())
|
val gradleVersions by property<List<Version>>(emptyList())
|
||||||
@@ -39,7 +39,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
val createGradlePropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createGradlePropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
runBefore(TemplatesPlugin::renderFileTemplates)
|
runBefore(TemplatesPlugin::renderFileTemplates)
|
||||||
activityChecker = isGradle
|
isAvailable = isGradle
|
||||||
withAction {
|
withAction {
|
||||||
TemplatesPlugin::addFileTemplate.execute(
|
TemplatesPlugin::addFileTemplate.execute(
|
||||||
FileTemplate(
|
FileTemplate(
|
||||||
@@ -63,7 +63,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
val createLocalPropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createLocalPropertiesFile by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createModules)
|
runAfter(KotlinPlugin::createModules)
|
||||||
runBefore(TemplatesPlugin::renderFileTemplates)
|
runBefore(TemplatesPlugin::renderFileTemplates)
|
||||||
activityChecker = isGradle
|
isAvailable = isGradle
|
||||||
withAction {
|
withAction {
|
||||||
TemplatesPlugin::addFileTemplate.execute(
|
TemplatesPlugin::addFileTemplate.execute(
|
||||||
FileTemplate(
|
FileTemplate(
|
||||||
@@ -80,17 +80,12 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val isGradle = checker {
|
private val isGradle = checker { buildSystemType.isGradle }
|
||||||
rule(
|
|
||||||
(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.GradleKotlinDsl) or
|
|
||||||
(BuildSystemPlugin::type.reference shouldBeEqual BuildSystemType.GradleGroovyDsl)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val initGradleWrapperTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val initGradleWrapperTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runBefore(TemplatesPlugin::renderFileTemplates)
|
runBefore(TemplatesPlugin::renderFileTemplates)
|
||||||
activityChecker = isGradle
|
isAvailable = isGradle
|
||||||
withAction {
|
withAction {
|
||||||
if (!GradlePlugin::createGradleWrapper.reference.settingValue) return@withAction UNIT_SUCCESS
|
if (!GradlePlugin::createGradleWrapper.reference.settingValue) return@withAction UNIT_SUCCESS
|
||||||
TemplatesPlugin::addFileTemplate.execute(
|
TemplatesPlugin::addFileTemplate.execute(
|
||||||
@@ -111,7 +106,7 @@ abstract class GradlePlugin(context: Context) : BuildSystemPlugin(context) {
|
|||||||
|
|
||||||
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
val createSettingsFileTask by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runAfter(KotlinPlugin::createPluginRepositories)
|
runAfter(KotlinPlugin::createPluginRepositories)
|
||||||
activityChecker = isGradle
|
isAvailable = isGradle
|
||||||
withAction {
|
withAction {
|
||||||
val (createBuildFile, buildFileName) = settingsGradleBuildFileData ?: return@withAction UNIT_SUCCESS
|
val (createBuildFile, buildFileName) = settingsGradleBuildFileData ?: return@withAction UNIT_SUCCESS
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
package org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.context.ReadingContext
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
|
||||||
@@ -130,11 +131,11 @@ enum class ProjectKind(override val text: String) : DisplayableSettingItem {
|
|||||||
fun List<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
|
fun List<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
|
||||||
fun handleModule(module: Module) {
|
fun handleModule(module: Module) {
|
||||||
+module
|
+module
|
||||||
if (module.kind == ModuleKind.singleplatformJvm
|
if (module.kind != ModuleKind.multiplatform
|
||||||
|| includeSourcesets && module.kind == ModuleKind.multiplatform
|
|| includeSourcesets && module.kind == ModuleKind.multiplatform
|
||||||
) {
|
) {
|
||||||
module.subModules.forEach(::handleModule)
|
module.subModules.forEach(::handleModule)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
forEach(::handleModule)
|
forEach(::handleModule)
|
||||||
}
|
}
|
||||||
+4
-2
@@ -1,6 +1,7 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates
|
package org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.CustomMultiplatformProjectTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.CustomMultiplatformProjectTemplate
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate
|
import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate
|
||||||
@@ -13,12 +14,13 @@ class ProjectTemplatesPlugin(context: Context) : Plugin(context) {
|
|||||||
CustomMultiplatformProjectTemplate
|
CustomMultiplatformProjectTemplate
|
||||||
}) {
|
}) {
|
||||||
values = ProjectTemplate.ALL
|
values = ProjectTemplate.ALL
|
||||||
|
isRequired = false
|
||||||
}
|
}
|
||||||
|
|
||||||
val initTemplate by pipelineTask(GenerationPhase.INIT_TEMPLATE) {
|
val initTemplate by pipelineTask(GenerationPhase.INIT_TEMPLATE) {
|
||||||
withAction {
|
withAction {
|
||||||
val selectedTemplate = ProjectTemplatesPlugin::template.settingValue
|
val selectedTemplate = ProjectTemplatesPlugin::template.reference.notRequiredSettingValue
|
||||||
selectedTemplate.setsValues.forEach { (setting, value) ->
|
selectedTemplate?.setsValues?.forEach { (setting, value) ->
|
||||||
context.settingContext[setting] = value
|
context.settingContext[setting] = value
|
||||||
}
|
}
|
||||||
UNIT_SUCCESS
|
UNIT_SUCCESS
|
||||||
|
|||||||
+2
-1
@@ -33,6 +33,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
|
|||||||
for (setting in pluginSettings) {
|
for (setting in pluginSettings) {
|
||||||
if (setting.neededAtPhase !in phases) continue
|
if (setting.neededAtPhase !in phases) continue
|
||||||
if (!setting.isSavable) continue
|
if (!setting.isSavable) continue
|
||||||
|
if (!setting.isAvailable(valuesReadingContext)) continue
|
||||||
val serializer = setting.type.serializer as? SerializerImpl<Any> ?: continue
|
val serializer = setting.type.serializer as? SerializerImpl<Any> ?: continue
|
||||||
service<SettingSavingWizardService>().saveSettingValue(
|
service<SettingSavingWizardService>().saveSettingValue(
|
||||||
setting.path,
|
setting.path,
|
||||||
@@ -58,7 +59,7 @@ abstract class Wizard(createPlugins: PluginsCreator, val servicesManager: Servic
|
|||||||
.distinctBy { it.path }
|
.distinctBy { it.path }
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { task -> task.phase in phases }
|
.filter { task -> task.phase in phases }
|
||||||
.filter { task -> task.checker.check(taskRunningContext) }
|
.filter { task -> task.isAvailable(taskRunningContext) }
|
||||||
.map { task -> onTaskExecuting(task); task.action(taskRunningContext) }
|
.map { task -> onTaskExecuting(task); task.action(taskRunningContext) }
|
||||||
.sequenceFailFirst()
|
.sequenceFailFirst()
|
||||||
.ignore()
|
.ignore()
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ class TaskSorterTest {
|
|||||||
before = emptyList(),
|
before = emptyList(),
|
||||||
after = emptyList(),
|
after = emptyList(),
|
||||||
phase = GenerationPhase.FIRST_STEP,
|
phase = GenerationPhase.FIRST_STEP,
|
||||||
checker = Checker.ALWAYS_AVAILABLE,
|
isAvailable = ALWAYS_AVAILABLE_CHECKER,
|
||||||
title = null
|
title = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user