From 2fa5cba980cf56175ac8197a3fabaefe3b527a40 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 31 Mar 2025 13:35:37 +0300 Subject: [PATCH 1/4] Do not mark the serialization JPMS dependency as transitive See --- core/jvm/java9/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/jvm/java9/module-info.java b/core/jvm/java9/module-info.java index 9ab8c5bb..43124e7c 100644 --- a/core/jvm/java9/module-info.java +++ b/core/jvm/java9/module-info.java @@ -1,6 +1,6 @@ module kotlinx.datetime { requires transitive kotlin.stdlib; - requires transitive static kotlinx.serialization.core; + requires static kotlinx.serialization.core; exports kotlinx.datetime; exports kotlinx.datetime.serializers; From 4117fea2a3bdcf4a1722facc52e60d98b52e63f6 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 31 Mar 2025 15:22:42 +0300 Subject: [PATCH 2/4] Introduce a test for using kotlinx-datetime with JPMS --- jpms-test/build.gradle.kts | 7 +++++++ jpms-test/src/main/java/module-info.java | 4 ++++ .../src/main/java/my/jpms/test/InitLocalDate.java | 14 ++++++++++++++ settings.gradle.kts | 2 ++ 4 files changed, 27 insertions(+) create mode 100644 jpms-test/build.gradle.kts create mode 100644 jpms-test/src/main/java/module-info.java create mode 100644 jpms-test/src/main/java/my/jpms/test/InitLocalDate.java diff --git a/jpms-test/build.gradle.kts b/jpms-test/build.gradle.kts new file mode 100644 index 00000000..7b6b8829 --- /dev/null +++ b/jpms-test/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + kotlin("jvm") +} + +dependencies { + api(project(":kotlinx-datetime")) +} diff --git a/jpms-test/src/main/java/module-info.java b/jpms-test/src/main/java/module-info.java new file mode 100644 index 00000000..bca55b70 --- /dev/null +++ b/jpms-test/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module my.jpms.test { + requires transitive kotlin.stdlib; + requires transitive kotlinx.datetime; +} diff --git a/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java b/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java new file mode 100644 index 00000000..dc1bad5e --- /dev/null +++ b/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java @@ -0,0 +1,14 @@ +/* + * Copyright 2019-2025 JetBrains s.r.o. and contributors. + * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. + */ + +package my.jpms.test; + +import kotlinx.datetime.*; + +public class InitLocalDate { + LocalDate newLocalDate() { + return new LocalDate(2025, 3, 31); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index ab7a6af5..b6c4d105 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -24,4 +24,6 @@ include(":serialization") project(":serialization").name = "kotlinx-datetime-serialization" include(":js-without-timezones") project(":js-without-timezones").name = "kotlinx-datetime-js-test-without-timezones" +include(":jpms-test") +project(":jpms-test").name = "kotlinx-datetime-test-with-jpms" include(":benchmarks") From b1a62fc8af581ea40d168b0441c64881369dc5e0 Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 31 Mar 2025 15:27:27 +0300 Subject: [PATCH 3/4] Move all integration tests into a separate directory There are too many of them at this point to keep them in the root. --- .../jpms-test}/build.gradle.kts | 0 .../jpms-test}/src/main/java/module-info.java | 0 .../src/main/java/my/jpms/test/InitLocalDate.java | 0 .../js-without-timezones}/build.gradle.kts | 0 .../common/test/TimezonesWithoutDatabaseTest.kt | 0 .../serialization}/build.gradle.kts | 0 .../common/test/DateTimePeriodSerializationTest.kt | 0 .../common/test/DateTimeUnitSerializationTest.kt | 0 .../common/test/DayOfWeekSerializationTest.kt | 0 .../common/test/InstantSerializationTest.kt | 0 .../serialization}/common/test/IntegrationTest.kt | 0 .../common/test/LocalDateSerializationTest.kt | 0 .../common/test/LocalDateTimeSerializationTest.kt | 0 .../common/test/LocalTimeSerializationTest.kt | 0 .../common/test/MonthSerializationTest.kt | 0 .../common/test/TimeZoneSerializationTest.kt | 0 .../common/test/UtcOffsetSerializationTest.kt | 0 .../serialization}/js/test/JsJodaTimeZoneModule.kt | 0 .../wasmJs/test/JsJodaTimeZoneModule.kt | 0 settings.gradle.kts | 12 ++++++------ 20 files changed, 6 insertions(+), 6 deletions(-) rename {jpms-test => integration-testing/jpms-test}/build.gradle.kts (100%) rename {jpms-test => integration-testing/jpms-test}/src/main/java/module-info.java (100%) rename {jpms-test => integration-testing/jpms-test}/src/main/java/my/jpms/test/InitLocalDate.java (100%) rename {js-without-timezones => integration-testing/js-without-timezones}/build.gradle.kts (100%) rename {js-without-timezones => integration-testing/js-without-timezones}/common/test/TimezonesWithoutDatabaseTest.kt (100%) rename {serialization => integration-testing/serialization}/build.gradle.kts (100%) rename {serialization => integration-testing/serialization}/common/test/DateTimePeriodSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/DateTimeUnitSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/DayOfWeekSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/InstantSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/IntegrationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/LocalDateSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/LocalDateTimeSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/LocalTimeSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/MonthSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/TimeZoneSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/common/test/UtcOffsetSerializationTest.kt (100%) rename {serialization => integration-testing/serialization}/js/test/JsJodaTimeZoneModule.kt (100%) rename {serialization => integration-testing/serialization}/wasmJs/test/JsJodaTimeZoneModule.kt (100%) diff --git a/jpms-test/build.gradle.kts b/integration-testing/jpms-test/build.gradle.kts similarity index 100% rename from jpms-test/build.gradle.kts rename to integration-testing/jpms-test/build.gradle.kts diff --git a/jpms-test/src/main/java/module-info.java b/integration-testing/jpms-test/src/main/java/module-info.java similarity index 100% rename from jpms-test/src/main/java/module-info.java rename to integration-testing/jpms-test/src/main/java/module-info.java diff --git a/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java b/integration-testing/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java similarity index 100% rename from jpms-test/src/main/java/my/jpms/test/InitLocalDate.java rename to integration-testing/jpms-test/src/main/java/my/jpms/test/InitLocalDate.java diff --git a/js-without-timezones/build.gradle.kts b/integration-testing/js-without-timezones/build.gradle.kts similarity index 100% rename from js-without-timezones/build.gradle.kts rename to integration-testing/js-without-timezones/build.gradle.kts diff --git a/js-without-timezones/common/test/TimezonesWithoutDatabaseTest.kt b/integration-testing/js-without-timezones/common/test/TimezonesWithoutDatabaseTest.kt similarity index 100% rename from js-without-timezones/common/test/TimezonesWithoutDatabaseTest.kt rename to integration-testing/js-without-timezones/common/test/TimezonesWithoutDatabaseTest.kt diff --git a/serialization/build.gradle.kts b/integration-testing/serialization/build.gradle.kts similarity index 100% rename from serialization/build.gradle.kts rename to integration-testing/serialization/build.gradle.kts diff --git a/serialization/common/test/DateTimePeriodSerializationTest.kt b/integration-testing/serialization/common/test/DateTimePeriodSerializationTest.kt similarity index 100% rename from serialization/common/test/DateTimePeriodSerializationTest.kt rename to integration-testing/serialization/common/test/DateTimePeriodSerializationTest.kt diff --git a/serialization/common/test/DateTimeUnitSerializationTest.kt b/integration-testing/serialization/common/test/DateTimeUnitSerializationTest.kt similarity index 100% rename from serialization/common/test/DateTimeUnitSerializationTest.kt rename to integration-testing/serialization/common/test/DateTimeUnitSerializationTest.kt diff --git a/serialization/common/test/DayOfWeekSerializationTest.kt b/integration-testing/serialization/common/test/DayOfWeekSerializationTest.kt similarity index 100% rename from serialization/common/test/DayOfWeekSerializationTest.kt rename to integration-testing/serialization/common/test/DayOfWeekSerializationTest.kt diff --git a/serialization/common/test/InstantSerializationTest.kt b/integration-testing/serialization/common/test/InstantSerializationTest.kt similarity index 100% rename from serialization/common/test/InstantSerializationTest.kt rename to integration-testing/serialization/common/test/InstantSerializationTest.kt diff --git a/serialization/common/test/IntegrationTest.kt b/integration-testing/serialization/common/test/IntegrationTest.kt similarity index 100% rename from serialization/common/test/IntegrationTest.kt rename to integration-testing/serialization/common/test/IntegrationTest.kt diff --git a/serialization/common/test/LocalDateSerializationTest.kt b/integration-testing/serialization/common/test/LocalDateSerializationTest.kt similarity index 100% rename from serialization/common/test/LocalDateSerializationTest.kt rename to integration-testing/serialization/common/test/LocalDateSerializationTest.kt diff --git a/serialization/common/test/LocalDateTimeSerializationTest.kt b/integration-testing/serialization/common/test/LocalDateTimeSerializationTest.kt similarity index 100% rename from serialization/common/test/LocalDateTimeSerializationTest.kt rename to integration-testing/serialization/common/test/LocalDateTimeSerializationTest.kt diff --git a/serialization/common/test/LocalTimeSerializationTest.kt b/integration-testing/serialization/common/test/LocalTimeSerializationTest.kt similarity index 100% rename from serialization/common/test/LocalTimeSerializationTest.kt rename to integration-testing/serialization/common/test/LocalTimeSerializationTest.kt diff --git a/serialization/common/test/MonthSerializationTest.kt b/integration-testing/serialization/common/test/MonthSerializationTest.kt similarity index 100% rename from serialization/common/test/MonthSerializationTest.kt rename to integration-testing/serialization/common/test/MonthSerializationTest.kt diff --git a/serialization/common/test/TimeZoneSerializationTest.kt b/integration-testing/serialization/common/test/TimeZoneSerializationTest.kt similarity index 100% rename from serialization/common/test/TimeZoneSerializationTest.kt rename to integration-testing/serialization/common/test/TimeZoneSerializationTest.kt diff --git a/serialization/common/test/UtcOffsetSerializationTest.kt b/integration-testing/serialization/common/test/UtcOffsetSerializationTest.kt similarity index 100% rename from serialization/common/test/UtcOffsetSerializationTest.kt rename to integration-testing/serialization/common/test/UtcOffsetSerializationTest.kt diff --git a/serialization/js/test/JsJodaTimeZoneModule.kt b/integration-testing/serialization/js/test/JsJodaTimeZoneModule.kt similarity index 100% rename from serialization/js/test/JsJodaTimeZoneModule.kt rename to integration-testing/serialization/js/test/JsJodaTimeZoneModule.kt diff --git a/serialization/wasmJs/test/JsJodaTimeZoneModule.kt b/integration-testing/serialization/wasmJs/test/JsJodaTimeZoneModule.kt similarity index 100% rename from serialization/wasmJs/test/JsJodaTimeZoneModule.kt rename to integration-testing/serialization/wasmJs/test/JsJodaTimeZoneModule.kt diff --git a/settings.gradle.kts b/settings.gradle.kts index b6c4d105..4504252c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,10 +20,10 @@ include(":core") project(":core").name = "kotlinx-datetime" include(":timezones/full") project(":timezones/full").name = "kotlinx-datetime-zoneinfo" -include(":serialization") -project(":serialization").name = "kotlinx-datetime-serialization" -include(":js-without-timezones") -project(":js-without-timezones").name = "kotlinx-datetime-js-test-without-timezones" -include(":jpms-test") -project(":jpms-test").name = "kotlinx-datetime-test-with-jpms" +include(":integration-testing/serialization") +project(":integration-testing/serialization").name = "kotlinx-datetime-serialization" +include(":integration-testing/js-without-timezones") +project(":integration-testing/js-without-timezones").name = "kotlinx-datetime-js-test-without-timezones" +include(":integration-testing/jpms-test") +project(":integration-testing/jpms-test").name = "kotlinx-datetime-test-with-jpms" include(":benchmarks") From df75736fa86dcccd076d97a9ca8e31478a97f4ea Mon Sep 17 00:00:00 2001 From: Dmitry Khalanskiy Date: Mon, 31 Mar 2025 15:54:12 +0200 Subject: [PATCH 4/4] Set the Java toolchain to 11 for the JPMS test --- integration-testing/jpms-test/build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/integration-testing/jpms-test/build.gradle.kts b/integration-testing/jpms-test/build.gradle.kts index 7b6b8829..29d6acf8 100644 --- a/integration-testing/jpms-test/build.gradle.kts +++ b/integration-testing/jpms-test/build.gradle.kts @@ -2,6 +2,10 @@ plugins { kotlin("jvm") } +java { + toolchain { languageVersion.set(JavaLanguageVersion.of(11)) } +} + dependencies { api(project(":kotlinx-datetime")) }