From cca8c9a6e5188dd81370046deea351aa2103f1ed Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Tue, 25 Mar 2025 14:43:21 +0100 Subject: [PATCH 1/5] Upgrade Gradle to 8.13 --- build.gradle.kts | 16 ++++++- .../src/main/kotlin/AuxBuildConfiguration.kt | 13 ------ .../animalsniffer-conventions.gradle.kts | 39 ------------------ .../animalsniffer-jvm-conventions.gradle.kts | 11 +++++ ...iffer-multiplatform-conventions.gradle.kts | 11 +++++ gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 43462 -> 43705 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 8 ++-- gradlew.bat | 22 +++++----- kotlinx-coroutines-core/build.gradle.kts | 19 ++++++--- 11 files changed, 70 insertions(+), 74 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/animalsniffer-conventions.gradle.kts create mode 100644 buildSrc/src/main/kotlin/animalsniffer-jvm-conventions.gradle.kts create mode 100644 buildSrc/src/main/kotlin/animalsniffer-multiplatform-conventions.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts index dc4a7f12f6..f0a6efcc9e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -95,7 +95,20 @@ allprojects { } // needs to be before evaluationDependsOn due to weird Gradle ordering -apply(plugin = "animalsniffer-conventions") +configure(subprojects) { + fun Project.shouldSniff(): Boolean = + platformOf(project) == "jvm" && project.name !in unpublished && project.name !in sourceless + && project.name !in androidNonCompatibleProjects + // Skip JDK 8 projects or unpublished ones + if (shouldSniff()) { + println("Configuring Animal Sniffer for $this") + if (isMultiplatform) { + apply(plugin = "animalsniffer-multiplatform-conventions") + } else { + apply(plugin = "animalsniffer-jvm-conventions") + } + } +} configure(subprojects.filter { !sourceless.contains(it.name) }) { if (isMultiplatform) { @@ -157,4 +170,3 @@ rootProject.registerTopLevelDeployTask() // Report Kotlin compiler version when building project println("Using Kotlin compiler version: ${KotlinCompilerVersion.VERSION}") - diff --git a/buildSrc/src/main/kotlin/AuxBuildConfiguration.kt b/buildSrc/src/main/kotlin/AuxBuildConfiguration.kt index 558f95c763..be3770e932 100644 --- a/buildSrc/src/main/kotlin/AuxBuildConfiguration.kt +++ b/buildSrc/src/main/kotlin/AuxBuildConfiguration.kt @@ -13,7 +13,6 @@ object AuxBuildConfiguration { @JvmStatic fun configure(rootProject: Project) { rootProject.allprojects { - workaroundForCleanTask() CacheRedirector.configure(this) workaroundForCoroutinesLeakageToClassPath() } @@ -27,18 +26,6 @@ object AuxBuildConfiguration { } } - private fun Project.workaroundForCleanTask() { - // the 'clean' task cannot delete expanded.lock file on Windows as it is still held by Gradle, failing the build - // Gradle issue: https://github.com/gradle/gradle/issues/25752 - tasks { - val clean by existing(Delete::class) { - setDelete(fileTree(layout.buildDirectory) { - exclude("tmp/.cache/expanded/expanded.lock") - }) - } - } - } - /* * 'kotlinx-coroutines-core' dependency leaks into test runtime classpath via 'kotlin-compiler-embeddable' * and conflicts with our own test/runtime incompatibilities (e.g. when class is moved from a main to test), diff --git a/buildSrc/src/main/kotlin/animalsniffer-conventions.gradle.kts b/buildSrc/src/main/kotlin/animalsniffer-conventions.gradle.kts deleted file mode 100644 index 74693f9dca..0000000000 --- a/buildSrc/src/main/kotlin/animalsniffer-conventions.gradle.kts +++ /dev/null @@ -1,39 +0,0 @@ -import ru.vyarus.gradle.plugin.animalsniffer.* - -configure(subprojects) { - // Skip JDK 8 projects or unpublished ones - if (!shouldSniff()) return@configure - apply(plugin = "ru.vyarus.animalsniffer") - project.plugins.withType(JavaPlugin::class.java) { - configure { - sourceSets = listOf((project.extensions.getByName("sourceSets") as SourceSetContainer).getByName("main")) - } - val signature: Configuration by configurations - dependencies { - signature("net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature") - signature("org.codehaus.mojo.signature:java17:1.0@signature") - } - - if (project.name == coreModule) { - // Specific files so nothing from core is accidentally skipped - tasks.withType().configureEach { - exclude("**/future/FutureKt*") - exclude("**/future/ContinuationHandler*") - exclude("**/future/CompletableFutureCoroutine*") - - exclude("**/stream/StreamKt*") - exclude("**/stream/StreamFlow*") - - exclude("**/time/TimeKt*") - } - } - } -} - -fun Project.shouldSniff(): Boolean { - // Skip all non-JVM projects - if (platformOf(project) != "jvm") return false - val name = project.name - if (name in unpublished || name in sourceless || name in androidNonCompatibleProjects) return false - return true -} diff --git a/buildSrc/src/main/kotlin/animalsniffer-jvm-conventions.gradle.kts b/buildSrc/src/main/kotlin/animalsniffer-jvm-conventions.gradle.kts new file mode 100644 index 0000000000..5ebd5c7248 --- /dev/null +++ b/buildSrc/src/main/kotlin/animalsniffer-jvm-conventions.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("ru.vyarus.animalsniffer") +} + +project.plugins.withType(JavaPlugin::class.java) { + val signature: Configuration by configurations + dependencies { + signature("net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature") + signature("org.codehaus.mojo.signature:java17:1.0@signature") + } +} diff --git a/buildSrc/src/main/kotlin/animalsniffer-multiplatform-conventions.gradle.kts b/buildSrc/src/main/kotlin/animalsniffer-multiplatform-conventions.gradle.kts new file mode 100644 index 0000000000..08b11d003d --- /dev/null +++ b/buildSrc/src/main/kotlin/animalsniffer-multiplatform-conventions.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("ru.vyarus.animalsniffer") +} + +project.plugins.withType(KotlinMultiplatformConventionsPlugin::class.java) { + val signature: Configuration by configurations + dependencies { + signature("net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature") + signature("org.codehaus.mojo.signature:java17:1.0@signature") + } +} diff --git a/gradle.properties b/gradle.properties index 88b96ac426..d86c6c8edb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,7 +28,7 @@ jna_version=5.9.0 # Gradle jdk_toolchain_version=11 -animalsniffer_version=1.7.1 +animalsniffer_version=2.0.0 # Android versions android_version=4.1.1.4 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index d64cd4917707c1f8861d8cb53dd15194d4248596..9bbc975c742b298b441bfb90dbc124400a3751b9 100644 GIT binary patch delta 34482 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e6aba2515d..2a6e21b2ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip +distributionSha256Sum=fba8464465835e74f7270bbf43d6d8a8d7709ab0a43ce1aa3323f73e9aa0c612 +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4269..faf93008b7 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -203,7 +205,7 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. diff --git a/gradlew.bat b/gradlew.bat index 6689b85bee..9b42019c79 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/kotlinx-coroutines-core/build.gradle.kts b/kotlinx-coroutines-core/build.gradle.kts index ce3250c150..75fd8eb4d3 100644 --- a/kotlinx-coroutines-core/build.gradle.kts +++ b/kotlinx-coroutines-core/build.gradle.kts @@ -1,11 +1,13 @@ import org.gradle.api.tasks.testing.* import org.gradle.kotlin.dsl.* +import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.targets.native.tasks.* import org.jetbrains.kotlin.gradle.tasks.* import org.jetbrains.kotlin.gradle.testing.* +import ru.vyarus.gradle.plugin.animalsniffer.AnimalSniffer plugins { kotlin("multiplatform") @@ -84,11 +86,6 @@ kotlin { } } } - - jvm { - // For animal sniffer - withJava() - } } private fun KotlinMultiplatformExtension.setupBenchmarkSourceSets(ss: NamedDomainObjectContainer) { @@ -293,3 +290,15 @@ artifacts { tasks.named("dokkaHtmlPartial") { dependsOn(jvmJar) } + +// Specific files so nothing from core is accidentally skipped +tasks.withType().configureEach { + exclude("**/future/FutureKt*") + exclude("**/future/ContinuationHandler*") + exclude("**/future/CompletableFutureCoroutine*") + + exclude("**/stream/StreamKt*") + exclude("**/stream/StreamFlow*") + + exclude("**/time/TimeKt*") +} From 192acf4327f3803c40f95115bb2746ecc63ccb25 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Wed, 26 Mar 2025 12:35:30 +0100 Subject: [PATCH 2/5] Restore an Android compatibility trick (removed in #4196) --- kotlinx-coroutines-core/jvm/src/Executors.kt | 11 +++++----- .../jvm/src/internal/Concurrent.kt | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/kotlinx-coroutines-core/jvm/src/Executors.kt b/kotlinx-coroutines-core/jvm/src/Executors.kt index bdfbe6dbbc..9bd48b1537 100644 --- a/kotlinx-coroutines-core/jvm/src/Executors.kt +++ b/kotlinx-coroutines-core/jvm/src/Executors.kt @@ -117,12 +117,13 @@ private class DispatcherExecutor(@JvmField val dispatcher: CoroutineDispatcher) internal class ExecutorCoroutineDispatcherImpl(override val executor: Executor) : ExecutorCoroutineDispatcher(), Delay { + /* + * Attempts to reflectively (to be Java 6 compatible) invoke + * ScheduledThreadPoolExecutor.setRemoveOnCancelPolicy in order to cleanup + * internal scheduler queue on cancellation. + */ init { - /* Attempt to invoke ScheduledThreadPoolExecutor.setRemoveOnCancelPolicy in order to clean up - * the internal scheduler queue on cancellation. */ - if (executor is ScheduledThreadPoolExecutor) { - executor.removeOnCancelPolicy = true - } + removeFutureOnCancel(executor) } override fun dispatch(context: CoroutineContext, block: Runnable) { diff --git a/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt b/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt index ee35a3a011..0e052c1644 100644 --- a/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt +++ b/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt @@ -1,6 +1,9 @@ package kotlinx.coroutines.internal +import java.lang.reflect.Method import java.util.* +import java.util.concurrent.Executor +import java.util.concurrent.ScheduledThreadPoolExecutor import kotlin.concurrent.withLock as withLockJvm internal actual typealias ReentrantLock = java.util.concurrent.locks.ReentrantLock @@ -18,3 +21,20 @@ internal actual annotation class BenignDataRace() @Suppress("NOTHING_TO_INLINE") // So that R8 can completely remove ConcurrentKt class internal actual inline fun identitySet(expectedSize: Int): MutableSet = Collections.newSetFromMap(IdentityHashMap(expectedSize)) + +private val REMOVE_FUTURE_ON_CANCEL: Method? = try { + ScheduledThreadPoolExecutor::class.java.getMethod("setRemoveOnCancelPolicy", Boolean::class.java) +} catch (_: Throwable) { + null +} + +@Suppress("NAME_SHADOWING") +internal fun removeFutureOnCancel(executor: Executor): Boolean { + try { + val executor = executor as? ScheduledThreadPoolExecutor ?: return false + (REMOVE_FUTURE_ON_CANCEL ?: return false).invoke(executor, true) + return true + } catch (_: Throwable) { + return false // failed to setRemoveOnCancelPolicy, assume it does not remove the future on cancel + } +} From 6193d808ff269cbf406c942f12704cfa53cba119 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Tue, 25 Mar 2025 16:36:59 +0100 Subject: [PATCH 3/5] Cleanup deprecated API usages --- build.gradle.kts | 1 - kotlinx-coroutines-bom/build.gradle.kts | 5 ++++- kotlinx-coroutines-test/build.gradle.kts | 3 +-- reactive/kotlinx-coroutines-rx2/build.gradle.kts | 4 ++-- reactive/kotlinx-coroutines-rx3/build.gradle.kts | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f0a6efcc9e..7b9248ca49 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -101,7 +101,6 @@ configure(subprojects) { && project.name !in androidNonCompatibleProjects // Skip JDK 8 projects or unpublished ones if (shouldSniff()) { - println("Configuring Animal Sniffer for $this") if (isMultiplatform) { apply(plugin = "animalsniffer-multiplatform-conventions") } else { diff --git a/kotlinx-coroutines-bom/build.gradle.kts b/kotlinx-coroutines-bom/build.gradle.kts index 3eb59266ee..b600e9c3c4 100644 --- a/kotlinx-coroutines-bom/build.gradle.kts +++ b/kotlinx-coroutines-bom/build.gradle.kts @@ -1,4 +1,5 @@ import org.gradle.api.publish.maven.internal.publication.DefaultMavenPublication +import java.util.Locale plugins { id("java-platform") @@ -38,7 +39,9 @@ publishing { forEach { pub -> pub as DefaultMavenPublication pub.unsetModuleDescriptorGenerator() - tasks.matching { it.name == "generateMetadataFileFor${pub.name.capitalize()}Publication" }.all { + tasks.matching { + it.name == "generateMetadataFileFor${ pub.name.replaceFirstChar { it.uppercaseChar() } }Publication" + }.all { onlyIf { false } } } diff --git a/kotlinx-coroutines-test/build.gradle.kts b/kotlinx-coroutines-test/build.gradle.kts index fb06e6c177..5e29e6ae75 100644 --- a/kotlinx-coroutines-test/build.gradle.kts +++ b/kotlinx-coroutines-test/build.gradle.kts @@ -1,5 +1,4 @@ -import org.jetbrains.kotlin.gradle.plugin.mpp.* -import org.jetbrains.kotlin.gradle.targets.js.dsl.* +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl kotlin { sourceSets { diff --git a/reactive/kotlinx-coroutines-rx2/build.gradle.kts b/reactive/kotlinx-coroutines-rx2/build.gradle.kts index 09562c4e11..bc7ac285a4 100644 --- a/reactive/kotlinx-coroutines-rx2/build.gradle.kts +++ b/reactive/kotlinx-coroutines-rx2/build.gradle.kts @@ -18,7 +18,7 @@ tasks.withType(DokkaTaskPartial::class) { val testNG by tasks.registering(Test::class) { useTestNG() - reports.html.outputLocation = file("$buildDir/reports/testng") + reports.html.outputLocation = file("${layout.buildDirectory.get()}/reports/testng") include("**/*ReactiveStreamTckTest.*") // Skip testNG when tests are filtered with --tests, otherwise it simply fails onlyIf { @@ -32,5 +32,5 @@ val testNG by tasks.registering(Test::class) { val test by tasks.getting(Test::class) { dependsOn(testNG) - reports.html.outputLocation = file("$buildDir/reports/junit") + reports.html.outputLocation = file("${layout.buildDirectory.get()}/reports/junit") } diff --git a/reactive/kotlinx-coroutines-rx3/build.gradle.kts b/reactive/kotlinx-coroutines-rx3/build.gradle.kts index 1b761b6fd4..f88d2ecb30 100644 --- a/reactive/kotlinx-coroutines-rx3/build.gradle.kts +++ b/reactive/kotlinx-coroutines-rx3/build.gradle.kts @@ -18,7 +18,7 @@ tasks.withType(DokkaTaskPartial::class) { val testNG by tasks.registering(Test::class) { useTestNG() - reports.html.outputLocation = file("$buildDir/reports/testng") + reports.html.outputLocation = file("${layout.buildDirectory.get()}/reports/testng") include("**/*ReactiveStreamTckTest.*") // Skip testNG when tests are filtered with --tests, otherwise it simply fails onlyIf { @@ -32,5 +32,5 @@ val testNG by tasks.registering(Test::class) { val test by tasks.getting(Test::class) { dependsOn(testNG) - reports.html.outputLocation = file("$buildDir/reports/junit") + reports.html.outputLocation = file("${layout.buildDirectory.get()}/reports/junit") } From f01971cb4854b6ceea4eaa5464c56b22d8bff7c5 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Thu, 27 Mar 2025 12:42:32 +0100 Subject: [PATCH 4/5] Only leave jvmMain as the target to sniff --- kotlinx-coroutines-core/build.gradle.kts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kotlinx-coroutines-core/build.gradle.kts b/kotlinx-coroutines-core/build.gradle.kts index 75fd8eb4d3..8ddea4f5d3 100644 --- a/kotlinx-coroutines-core/build.gradle.kts +++ b/kotlinx-coroutines-core/build.gradle.kts @@ -292,7 +292,7 @@ tasks.named("dokkaHtmlPartial") { } // Specific files so nothing from core is accidentally skipped -tasks.withType().configureEach { +tasks.withType { exclude("**/future/FutureKt*") exclude("**/future/ContinuationHandler*") exclude("**/future/CompletableFutureCoroutine*") @@ -302,3 +302,7 @@ tasks.withType().configureEach { exclude("**/time/TimeKt*") } + +animalsniffer { + defaultTargets = setOf("jvmMain") +} From 6bb5cf73fe3c79d0119bc81411b193c848616a8a Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Thu, 3 Apr 2025 13:59:18 +0200 Subject: [PATCH 5/5] Add a comment --- kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt b/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt index 0e052c1644..db2cb0da39 100644 --- a/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt +++ b/kotlinx-coroutines-core/jvm/src/internal/Concurrent.kt @@ -28,6 +28,8 @@ private val REMOVE_FUTURE_ON_CANCEL: Method? = try { null } +/* We can not simply call `setRemoveOnCancelPolicy`, even though the code would compile and tests would pass, + * because older Android versions don't support it. */ @Suppress("NAME_SHADOWING") internal fun removeFutureOnCancel(executor: Executor): Boolean { try {