From 4708525b9a72880f00ba66e08bcc195ab79fd770 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Thu, 3 Sep 2020 20:18:33 +0900 Subject: [PATCH] Pill: Refactor Pill variants, replace DEFAULT variant with nullable value --- .../src/main/kotlin/pill/PillExtension.kt | 26 +++++------------ .../src/JpsCompatiblePluginTasks.kt | 5 ---- .../pill-importer/src/PillExtensionMirror.kt | 29 +++++-------------- plugins/pill/pill-importer/src/parser.kt | 2 +- 4 files changed, 17 insertions(+), 45 deletions(-) diff --git a/buildSrc/src/main/kotlin/pill/PillExtension.kt b/buildSrc/src/main/kotlin/pill/PillExtension.kt index 4eaf76a2f1d..8c6d939ba7f 100644 --- a/buildSrc/src/main/kotlin/pill/PillExtension.kt +++ b/buildSrc/src/main/kotlin/pill/PillExtension.kt @@ -10,26 +10,16 @@ import java.io.File import org.gradle.api.Project open class PillExtension { + /* + * Here's how you can specify a custom variant: + * `./gradlew pill -Dpill.variant=` + */ enum class Variant { - // Default variant (./gradlew pill) - BASE { - override val includes = setOf(BASE) - }, - - // Full variant (./gradlew pill -Dpill.variant=full) - FULL { - override val includes = setOf(BASE, FULL) - }, - - // 'BASE' if the "jps-compatible" plugin is applied, 'NONE' otherwise - DEFAULT { - override val includes = emptySet() - }; - - abstract val includes: Set + BASE, // Includes compiler and IDE (default) + FULL, // Includes compiler, IDE and Gradle plugin } - open var variant: Variant = Variant.DEFAULT + open var variant: Variant? = null open var excludedDirs: List = emptyList() @@ -40,7 +30,7 @@ open class PillExtension { @Suppress("unused") fun serialize() = mapOf( - "variant" to variant.name, + "variant" to variant?.name, "excludedDirs" to excludedDirs ) } \ No newline at end of file diff --git a/plugins/pill/pill-importer/src/JpsCompatiblePluginTasks.kt b/plugins/pill/pill-importer/src/JpsCompatiblePluginTasks.kt index a67b9ba539c..21bd592faed 100644 --- a/plugins/pill/pill-importer/src/JpsCompatiblePluginTasks.kt +++ b/plugins/pill/pill-importer/src/JpsCompatiblePluginTasks.kt @@ -86,11 +86,6 @@ class JpsCompatiblePluginTasks(private val rootProject: Project, private val pla rootProject.logger.lifecycle("Pill: Setting up project for the '${variant.name.toLowerCase()}' variant...") - if (variant == PillExtensionMirror.Variant.DEFAULT) { - rootProject.logger.error("'none' and 'default' should not be passed as a Pill variant property value") - return - } - val parserContext = ParserContext(variant) val dependencyPatcher = DependencyPatcher(rootProject) diff --git a/plugins/pill/pill-importer/src/PillExtensionMirror.kt b/plugins/pill/pill-importer/src/PillExtensionMirror.kt index 6f6ca2a1fc6..ce91b96f4e6 100644 --- a/plugins/pill/pill-importer/src/PillExtensionMirror.kt +++ b/plugins/pill/pill-importer/src/PillExtensionMirror.kt @@ -8,26 +8,14 @@ package org.jetbrains.kotlin.pill import java.io.File import org.gradle.api.Project -open class PillExtensionMirror(variant: String, val excludedDirs: List) { - val variant = Variant.valueOf(variant) +open class PillExtensionMirror(variant: String?, val excludedDirs: List) { + val variant = if (variant == null) null else Variant.valueOf(variant) - enum class Variant { - // Default variant (./gradlew pill) - BASE { - override val includes = setOf(BASE) - }, + enum class Variant(includesFactory: () -> Set) { + BASE({ setOf(BASE) }), // Includes compiler and IDE (default) + FULL({ setOf(BASE, FULL) }); // Includes compiler, IDE and Gradle plugin - // Full variant (./gradlew pill -Dpill.variant=full) - FULL { - override val includes = setOf(BASE, FULL) - }, - - // 'BASE' if the "jps-compatible" plugin is applied, 'NONE' otherwise - DEFAULT { - override val includes = emptySet() - }; - - abstract val includes: Set + val includes by lazy { includesFactory() } } } @@ -37,11 +25,10 @@ fun Project.findPillExtensionMirror(): PillExtensionMirror? { @Suppress("UNCHECKED_CAST") val serialized = ext::class.java.getMethod("serialize").invoke(ext) as Map - val variant = serialized["variant"] as String + val variant = serialized["variant"] as String? @Suppress("UNCHECKED_CAST") val excludedDirs = serialized["excludedDirs"] as List - val constructor = PillExtensionMirror::class.java.declaredConstructors.single() - return constructor.newInstance(variant, excludedDirs) as PillExtensionMirror + return PillExtensionMirror(variant, excludedDirs) } \ No newline at end of file diff --git a/plugins/pill/pill-importer/src/parser.kt b/plugins/pill/pill-importer/src/parser.kt index e2802b1d0d0..6745e9f63bb 100644 --- a/plugins/pill/pill-importer/src/parser.kt +++ b/plugins/pill/pill-importer/src/parser.kt @@ -114,7 +114,7 @@ fun parse(project: Project, context: ParserContext): PProject = with(context) { fun Project.matchesSelectedVariant(): Boolean { val extension = this.findPillExtensionMirror() ?: return true - val projectVariant = extension.variant.takeUnless { it == Variant.DEFAULT } ?: Variant.BASE + val projectVariant = extension.variant ?: Variant.BASE return projectVariant in context.variant.includes }