[MPP] Disable KGP import for the standalone kotlin-js Gradle plugin

KTIJ-24745
This commit is contained in:
Pavel Kirpichenkov
2023-02-28 21:40:17 +02:00
committed by Space Team
parent 93fc9097c8
commit 5d664aac92
4 changed files with 144 additions and 0 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLI
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_HIERARCHICAL_STRUCTURE_BY_DEFAULT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_HIERARCHICAL_STRUCTURE_SUPPORT
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_DEPRECATED_PROPERTIES_NO_WARN
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_SLOW_SOURCES_JAR_RESOLVER
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_DEPENDENCY_PROPAGATION
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_NATIVE_USE_XCODE_MESSAGE_STYLE
@@ -410,6 +411,9 @@ internal class PropertiesProvider private constructor(private val project: Proje
val enableIntransitiveMetadataConfiguration: Boolean
get() = booleanProperty(KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION) ?: false
val enableKgpDependencyResolution: Boolean?
get() = booleanProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION)
val enableSlowIdeSourcesJarResolver: Boolean
get() = booleanProperty(KOTLIN_MPP_IMPORT_ENABLE_SLOW_SOURCES_JAR_RESOLVER) ?: true
@@ -591,6 +595,7 @@ internal class PropertiesProvider private constructor(private val project: Proje
const val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION = "kotlin.mpp.androidSourceSetLayoutVersion"
const val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION_1_NO_WARN = "${KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_VERSION}1.nowarn"
const val KOTLIN_MPP_ANDROID_SOURCE_SET_LAYOUT_ANDROID_STYLE_NO_WARN = "kotlin.mpp.androidSourceSetLayoutV2AndroidStyleDirs.nowarn"
const val KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION = "kotlin.mpp.import.enableKgpDependencyResolution"
const val KOTLIN_MPP_IMPORT_ENABLE_SLOW_SOURCES_JAR_RESOLVER = "kotlin.mpp.import.enableSlowSourcesJarResolver"
const val KOTLIN_MPP_ENABLE_INTRANSITIVE_METADATA_CONFIGURATION = "kotlin.mpp.enableIntransitiveMetadataConfiguration"
const val KOTLIN_NATIVE_DEPENDENCY_PROPAGATION = "kotlin.native.enableDependencyPropagation"
@@ -33,6 +33,8 @@ open class KotlinJsPlugin(
checkGradleCompatibility()
project.enableKgpDependencyResolution(isEnabled = false)
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
customizeKotlinDependencies(project)
@@ -0,0 +1,13 @@
/*
* Copyright 2010-2023 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.utils
import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION
internal fun Project.enableKgpDependencyResolution(isEnabled: Boolean) {
extensions.extraProperties.set(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION, "$isEnabled") // IJ property parser expects a String
}
@@ -0,0 +1,124 @@
/*
* Copyright 2010-2023 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.regressionTests
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.PropertyNames.KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION
import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin
import org.jetbrains.kotlin.gradle.util.buildProject
import org.junit.Test
import kotlin.test.assertEquals
class JsPluginKgpDependencyResolutionPropertyTest {
@Test
fun `test project with js plugin has kgp dependency resolution disabled`() {
val project = buildProject {
plugins.apply("org.jetbrains.kotlin.js")
}
val kotlin = project.kotlinExtension as KotlinJsProjectExtension
kotlin.js(KotlinJsCompilerType.IR)
project.evaluate()
assertEquals("false", project.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
@Test
fun `test kgp dependency resolution state in a nested js project with a top-level mpp project`() {
val project = buildProject {
applyMultiplatformPlugin()
}
val subproject = buildProject({ withParent(project) }) {
plugins.apply("org.jetbrains.kotlin.js")
}
project.evaluate()
assertEquals(null, project.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
assertEquals("false", subproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
@Test
fun `test kgp import state in a nested js project with a top-level mpp project and enabled kgp dependency resolution`() {
val project = buildProject {
applyMultiplatformPlugin()
extensions.extraProperties.set(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION, "true")
}
val subproject = buildProject({ withParent(project) }) {
plugins.apply("org.jetbrains.kotlin.js")
}
project.evaluate()
assertEquals("true", project.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
assertEquals("false", subproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
@Test
fun `test kgp dependency resolution state in a nested mpp project with a top-level js project`() {
val project = buildProject {
plugins.apply("org.jetbrains.kotlin.js")
}
val subproject = buildProject({ withParent(project) }) {
applyMultiplatformPlugin()
}
(project.kotlinExtension as KotlinJsProjectExtension).js(KotlinJsCompilerType.IR)
project.evaluate()
assertEquals("false", project.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
// Requires a workaround, one has to set the property explicitly for the MPP project nested under the JS project.
// The standalone JS plugin is only going to be supported for a small period of time from now.
assertEquals("false", subproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
@Test
fun `test kgp dependency resolution state in a nested mpp project with a top-level js project and enabled kgp import`() {
val project = buildProject {
plugins.apply("org.jetbrains.kotlin.js")
}
val subproject = buildProject({ withParent(project) }) {
applyMultiplatformPlugin()
extensions.extraProperties.set(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION, "true")
}
(project.kotlinExtension as KotlinJsProjectExtension).js(KotlinJsCompilerType.IR)
project.evaluate()
assertEquals("false", project.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
assertEquals("true", subproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
@Test
fun `test kgp dependency resolution state in an mpp project alongside a js project`() {
val project = buildProject {
}
val mppSubproject = buildProject({ withParent(project) }) {
applyMultiplatformPlugin()
}
val jsSubproject = buildProject({ withParent(project) }) {
plugins.apply("org.jetbrains.kotlin.js")
}
(jsSubproject.kotlinExtension as KotlinJsProjectExtension).js(KotlinJsCompilerType.IR)
project.evaluate()
assertEquals(null, mppSubproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
assertEquals("false", jsSubproject.findProperty(KOTLIN_MPP_IMPORT_ENABLE_KGP_DEPENDENCY_RESOLUTION))
}
}