-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Alternative solution how to add compiler plugin dependency to the pro…
…ject (#386) * Do not require to add atomicfu compiler plugin dependency manually to the buildscript of the project. This change reverts #377. To prevent resolution conflicts of the compiler plugin version, atomicfu-gradle-plugin adds dependency to the earliest plugin version 1.6.20 and gradle should resolve it to the newest version present in the classpath of the user project. Fixes #384 * Old atomicfu-gradle-plugin tests: remove tasks that used to log classpath of the plugin for atomicfu-gradle-plugin tests, as those tests are already removed. * Resolved the warning for compileOnly dependency to kotlin-stdlib present in Native sourceSets. kotlin-stdlib dependency is added as an implementation dependency now, though it's version is marked as prefered to avoid resolution in the user project.
- Loading branch information
1 parent
d96a9e6
commit c5685d4
Showing
17 changed files
with
196 additions
and
118 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
integration-testing/examples/plugin-order-bug/build.gradle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
buildscript { | ||
repositories { | ||
mavenLocal() | ||
mavenCentral() | ||
} | ||
|
||
dependencies { | ||
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlinVersion.get()}") | ||
classpath("org.jetbrains.kotlinx:atomicfu-gradle-plugin:${libs.versions.atomicfuVersion.get()}") | ||
} | ||
} | ||
// Apply KGP via buildscript to check this issue: #384 | ||
apply plugin: 'org.jetbrains.kotlin.multiplatform' | ||
apply plugin: 'kotlinx-atomicfu' | ||
|
||
repositories { | ||
mavenCentral() | ||
maven{ url = "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } | ||
mavenLocal() | ||
} | ||
|
||
kotlin { | ||
jvm() | ||
|
||
js() | ||
|
||
wasmJs {} | ||
wasmWasi {} | ||
|
||
macosArm64() | ||
macosX64() | ||
linuxArm64() | ||
linuxX64() | ||
mingwX64() | ||
|
||
sourceSets { | ||
commonMain { | ||
dependencies { | ||
implementation(kotlin("stdlib")) | ||
implementation(kotlin("test-junit")) | ||
} | ||
} | ||
commonTest {} | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
integration-testing/examples/plugin-order-bug/gradle.properties
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
## | ||
## Copyright 2016-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. | ||
## | ||
kotlin_version=1.9.20 | ||
atomicfu_version=0.23.1-SNAPSHOT |
19 changes: 19 additions & 0 deletions
19
integration-testing/examples/plugin-order-bug/settings.gradle.kts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
pluginManagement { | ||
repositories { | ||
mavenLocal() | ||
mavenCentral() | ||
maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") | ||
gradlePluginPortal() | ||
} | ||
} | ||
|
||
dependencyResolutionManagement { | ||
versionCatalogs { | ||
create("libs") { | ||
version("atomicfuVersion", providers.gradleProperty("atomicfu_version").orNull) | ||
version("kotlinVersion", providers.gradleProperty("kotlin_version").orNull) | ||
} | ||
} | ||
} | ||
|
||
rootProject.name = "plugin-order-bug" |
27 changes: 27 additions & 0 deletions
27
integration-testing/examples/plugin-order-bug/src/commonMain/kotlin/AtomicSampleClass.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* Copyright 2016-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. | ||
*/ | ||
|
||
package examples.mpp_sample | ||
|
||
import kotlinx.atomicfu.* | ||
import kotlinx.atomicfu.locks.* | ||
import kotlin.test.* | ||
|
||
public class AtomicSampleClass { | ||
private val _x = atomic(0) | ||
val x get() = _x.value | ||
|
||
public fun doWork(finalValue: Int) { | ||
assertEquals(0, x) | ||
assertEquals(0, _x.getAndSet(3)) | ||
assertEquals(3, x) | ||
assertTrue(_x.compareAndSet(3, finalValue)) | ||
} | ||
|
||
private val lock = reentrantLock() | ||
|
||
public fun synchronizedFoo(value: Int): Int { | ||
return lock.withLock { value } | ||
} | ||
} |
17 changes: 17 additions & 0 deletions
17
integration-testing/examples/plugin-order-bug/src/commonTest/kotlin/AtomicSampleTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
/* | ||
* Copyright 2016-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. | ||
*/ | ||
|
||
import kotlin.test.* | ||
import examples.mpp_sample.* | ||
|
||
class AtomicSampleTest { | ||
|
||
@Test | ||
fun testInt() { | ||
val a = AtomicSampleClass() | ||
a.doWork(1234) | ||
assertEquals(1234, a.x) | ||
assertEquals(42, a.synchronizedFoo(42)) | ||
} | ||
} |
46 changes: 46 additions & 0 deletions
46
...src/functionalTest/kotlin/kotlinx.atomicfu.gradle.plugin.test/cases/PluginOrderBugTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package kotlinx.atomicfu.gradle.plugin.test.cases | ||
|
||
import kotlinx.atomicfu.gradle.plugin.test.framework.checker.getProjectClasspath | ||
import kotlinx.atomicfu.gradle.plugin.test.framework.runner.* | ||
import kotlinx.atomicfu.gradle.plugin.test.framework.runner.GradleBuild | ||
import kotlinx.atomicfu.gradle.plugin.test.framework.runner.cleanAndBuild | ||
import kotlinx.atomicfu.gradle.plugin.test.framework.runner.createGradleBuildFromSources | ||
import kotlin.test.* | ||
|
||
/** | ||
* This test reproduces and tracks the issue #384. | ||
*/ | ||
class PluginOrderBugTest { | ||
private val pluginOrderBugProject: GradleBuild = createGradleBuildFromSources("plugin-order-bug") | ||
|
||
@Test | ||
fun testUserProjectBuild() { | ||
val buildResult = pluginOrderBugProject.cleanAndBuild() | ||
assertTrue(buildResult.isSuccessful, buildResult.output) | ||
} | ||
|
||
/** | ||
* Ensures that the version of atomicfu compiler plugin in the project's classpath equals the version of KGP used in the project. | ||
*/ | ||
@Test | ||
fun testResolvedCompilerPluginDependency() { | ||
val classpath = pluginOrderBugProject.getProjectClasspath() | ||
assertTrue(classpath.contains("org.jetbrains.kotlin:atomicfu:${pluginOrderBugProject.getKotlinVersion()}")) | ||
} | ||
|
||
/** | ||
* kotlin-stdlib is an implementation dependency of :atomicfu module, | ||
* because compileOnly dependencies are not applicable for Native targets (#376). | ||
* | ||
* This test ensures that kotlin-stdlib of the Kotlin version used to build kotlinx-atomicfu library is not "required" in the user's project. | ||
* The user project should use kotlin-stdlib version that is present in it's classpath. | ||
*/ | ||
@Test | ||
fun testTransitiveKotlinStdlibDependency() { | ||
val dependencies = pluginOrderBugProject.dependencies() | ||
assertFalse(dependencies.output.contains("org.jetbrains.kotlin:kotlin-stdlib:{strictly $libraryKotlinVersion}"), | ||
"Strict requirement for 'org.jetbrains.kotlin:kotlin-stdlib:{strictly $libraryKotlinVersion}' was found in the project ${pluginOrderBugProject.projectName} dependencies, " + | ||
"while Kotlin version used in the project is ${pluginOrderBugProject.getKotlinVersion()}" | ||
) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.