[Gradle, JS] Detect multiple plugins for NodeJsRootPlugin and YarnPlugin
^KT-39210 fixed ^KT-31669 fixed
This commit is contained in:
+1
-1
@@ -24,7 +24,7 @@ internal class KotlinPluginInMultipleProjectsHolder(
|
||||
|
||||
val loadedInProjectsPropertyName = getPropertyName(kotlinPluginVersion)
|
||||
|
||||
if (!differentVersionsInDifferentProject || loadedInProjectPath == null) {
|
||||
if (loadedInProjectPath == null) {
|
||||
loadedInProjectPath = projectPath
|
||||
|
||||
val ext = project.rootProject.extensions.getByType(ExtraPropertiesExtension::class.java)
|
||||
|
||||
+25
@@ -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.gradle.targets.js
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginInMultipleProjectsHolder
|
||||
import org.jetbrains.kotlin.gradle.plugin.MULTIPLE_KOTLIN_PLUGINS_LOADED_WARNING
|
||||
|
||||
internal object MultiplePluginDeclarationDetector {
|
||||
private val pluginInMultipleProjectsHolder = KotlinPluginInMultipleProjectsHolder(
|
||||
differentVersionsInDifferentProject = false
|
||||
)
|
||||
|
||||
fun detect(project: Project) {
|
||||
pluginInMultipleProjectsHolder
|
||||
.addProject(project)
|
||||
|
||||
if (pluginInMultipleProjectsHolder.isInMultipleProjects(project)) {
|
||||
error(MULTIPLE_KOTLIN_PLUGINS_LOADED_WARNING)
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-17
@@ -10,7 +10,10 @@ import org.gradle.api.Task
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryType
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||
@@ -29,22 +32,6 @@ abstract class KotlinJsIrSubTarget(
|
||||
) : KotlinJsSubTargetDsl {
|
||||
val project get() = target.project
|
||||
|
||||
init {
|
||||
val kotlinPluginInMultipleProjectsHolder = KotlinPluginInMultipleProjectsHolder(
|
||||
differentVersionsInDifferentProject = false
|
||||
)
|
||||
|
||||
val anyProjectAffected = kotlinPluginInMultipleProjectsHolder.getAffectedProjects(project)
|
||||
?.isNotEmpty() ?: false
|
||||
|
||||
if (anyProjectAffected) {
|
||||
error(MULTIPLE_KOTLIN_PLUGINS_LOADED_WARNING)
|
||||
}
|
||||
|
||||
kotlinPluginInMultipleProjectsHolder
|
||||
.addProject(project)
|
||||
}
|
||||
|
||||
private val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||
|
||||
abstract val testTaskDescription: String
|
||||
|
||||
+3
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.EXTENSION_NAME
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
|
||||
@@ -15,6 +16,8 @@ import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||
|
||||
open class NodeJsRootPlugin : Plugin<Project> {
|
||||
override fun apply(project: Project): Unit = project.run {
|
||||
MultiplePluginDeclarationDetector.detect(project)
|
||||
|
||||
project.plugins.apply(BasePlugin::class.java)
|
||||
|
||||
check(project == project.rootProject) {
|
||||
|
||||
+4
-17
@@ -10,8 +10,11 @@ import org.gradle.api.Task
|
||||
import org.gradle.api.plugins.ExtensionAware
|
||||
import org.gradle.api.tasks.TaskProvider
|
||||
import org.gradle.language.base.plugins.LifecycleBasePlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlatformTestRun
|
||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl
|
||||
@@ -31,22 +34,6 @@ abstract class KotlinJsSubTarget(
|
||||
) : KotlinJsSubTargetDsl {
|
||||
val project get() = target.project
|
||||
|
||||
init {
|
||||
val kotlinPluginInMultipleProjectsHolder = KotlinPluginInMultipleProjectsHolder(
|
||||
differentVersionsInDifferentProject = false
|
||||
)
|
||||
|
||||
val anyProjectAffected = kotlinPluginInMultipleProjectsHolder.getAffectedProjects(project)
|
||||
?.isNotEmpty() ?: false
|
||||
|
||||
if (anyProjectAffected) {
|
||||
error(MULTIPLE_KOTLIN_PLUGINS_LOADED_WARNING)
|
||||
}
|
||||
|
||||
kotlinPluginInMultipleProjectsHolder
|
||||
.addProject(project)
|
||||
}
|
||||
|
||||
private val nodeJs = NodeJsRootPlugin.apply(project.rootProject)
|
||||
|
||||
abstract val testTaskDescription: String
|
||||
|
||||
+3
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn
|
||||
import org.gradle.api.Plugin
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.plugins.BasePlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
|
||||
@@ -15,6 +16,8 @@ import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
|
||||
|
||||
open class YarnPlugin : Plugin<Project> {
|
||||
override fun apply(project: Project): Unit = project.run {
|
||||
MultiplePluginDeclarationDetector.detect(project)
|
||||
|
||||
check(project == project.rootProject) {
|
||||
"YarnPlugin can be applied only to root project"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user