[MPP] Disable KGP import for the standalone kotlin-js Gradle plugin
KTIJ-24745
This commit is contained in:
committed by
Space Team
parent
93fc9097c8
commit
5d664aac92
+5
@@ -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"
|
||||
|
||||
+2
@@ -33,6 +33,8 @@ open class KotlinJsPlugin(
|
||||
|
||||
checkGradleCompatibility()
|
||||
|
||||
project.enableKgpDependencyResolution(isEnabled = false)
|
||||
|
||||
val kotlinExtension = project.kotlinExtension as KotlinJsProjectExtension
|
||||
customizeKotlinDependencies(project)
|
||||
|
||||
|
||||
+13
@@ -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
|
||||
}
|
||||
+124
@@ -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))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user