[Gradle, JS] Activate legacy plugin and new plugin via gradle property

This commit is contained in:
Ilya Goncharov
2020-01-20 11:26:56 +03:00
parent 29c2d62e43
commit e6be134f2a
3 changed files with 44 additions and 5 deletions

View File

@@ -77,6 +77,8 @@ abstract class KotlinBasePluginWrapper(
kotlinGradleBuildServices.detectKotlinPluginLoadedInMultipleProjects(project, kotlinPluginVersion)
defineExtension(project)
project.createKotlinExtension(projectExtensionClass).apply {
fun kotlinSourceSetContainer(factory: NamedDomainObjectFactory<KotlinSourceSet>) =
project.container(KotlinSourceSet::class.java, factory)
@@ -107,6 +109,9 @@ abstract class KotlinBasePluginWrapper(
project: Project,
kotlinGradleBuildServices: KotlinGradleBuildServices
): Plugin<Project>
protected open fun defineExtension(project: Project) {
}
}
open class KotlinPluginWrapper @Inject constructor(
@@ -156,11 +161,28 @@ open class Kotlin2JsPluginWrapper @Inject constructor(
open class KotlinJsPluginWrapper @Inject constructor(
fileResolver: FileResolver
) : KotlinBasePluginWrapper(fileResolver) {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinJsPlugin(kotlinPluginVersion)
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> {
val propertiesProvider = PropertiesProvider(project)
override val projectExtensionClass: KClass<out KotlinJsProjectExtension>
get() = KotlinJsProjectExtension::class
return when (propertiesProvider.jsMode) {
JsMode.IR -> KotlinJsIrPlugin(kotlinPluginVersion)
JsMode.LEGACY -> KotlinJsPlugin(kotlinPluginVersion)
JsMode.MIXED -> KotlinJsPlugin(kotlinPluginVersion)
}
}
override lateinit var projectExtensionClass: KClass<out KotlinProjectExtension>
override fun defineExtension(project: Project) {
val propertiesProvider = PropertiesProvider(project)
when (propertiesProvider.jsMode) {
JsMode.IR -> projectExtensionClass = KotlinJsIrProjectExtension::class
JsMode.LEGACY -> projectExtensionClass = KotlinJsProjectExtension::class
JsMode.MIXED -> {
} //TODO MIXED MODE
}
}
override fun createTestRegistry(project: Project) = KotlinTestsRegistry(project, "test")
}

View File

@@ -168,6 +168,12 @@ internal class PropertiesProvider private constructor(private val project: Proje
val jsDiscoverTypes: Boolean?
get() = booleanProperty("kotlin.js.experimental.discoverTypes")
/**
* Use Kotlin/JS backend mode
*/
val jsMode: JsMode
get() = property("kotlin.js.mode")?.let { JsMode.byCompilerArgument(it) } ?: JsMode.IR
private fun propertyWithDeprecatedVariant(propName: String, deprecatedPropName: String): String? {
val deprecatedProperty = property(deprecatedPropName)
if (deprecatedProperty != null) {
@@ -201,3 +207,14 @@ internal class PropertiesProvider private constructor(private val project: Proje
}
}
}
internal enum class JsMode {
LEGACY,
IR,
MIXED;
companion object {
fun byCompilerArgument(argument: String): JsMode? =
JsMode.values().firstOrNull { it.name.equals(argument, ignoreCase = true) }
}
}

View File

@@ -1 +1 @@
implementation-class=org.jetbrains.kotlin.gradle.plugin.KotlinJsIrPluginWrapper
implementation-class=org.jetbrains.kotlin.gradle.plugin.KotlinJsPluginWrapper