Skip to content

Commit 77b659c

Browse files
committed
Restore binary compatibility of year() and monthNumber()
Fixes #545
1 parent 5a2a6e1 commit 77b659c

File tree

5 files changed

+93
-7
lines changed

5 files changed

+93
-7
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ allprojects {
3030
kotlinOptions.freeCompilerArgs += "-version"
3131
}
3232
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile>().configureEach {
33-
compilerOptions { freeCompilerArgs.add("-Xjvm-default=disable") }
33+
compilerOptions { freeCompilerArgs.add("-Xjvm-default=all-compatibility") }
3434
}
3535
tasks.withType<org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile>().configureEach {
3636
compilerOptions { freeCompilerArgs.add("-Xpartial-linkage-loglevel=ERROR") }

core/api/kotlinx-datetime.api

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -878,16 +878,30 @@ public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder {
878878
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithDate : kotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth {
879879
public abstract fun date (Lkotlinx/datetime/format/DateTimeFormat;)V
880880
public abstract fun day (Lkotlinx/datetime/format/Padding;)V
881-
public abstract fun dayOfMonth (Lkotlinx/datetime/format/Padding;)V
881+
public static synthetic fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
882+
public fun dayOfMonth (Lkotlinx/datetime/format/Padding;)V
883+
public static synthetic fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
882884
public abstract fun dayOfWeek (Lkotlinx/datetime/format/DayOfWeekNames;)V
883885
public abstract fun dayOfYear (Lkotlinx/datetime/format/Padding;)V
886+
public static synthetic fun dayOfYear$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
884887
}
885888

886889
public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithDate$DefaultImpls {
887-
public static synthetic fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
888-
public static fun dayOfMonth (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;)V
889-
public static synthetic fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
890-
public static synthetic fun dayOfYear$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
890+
public static final field Companion Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate$DefaultImpls$Companion;
891+
public fun <init> ()V
892+
public static final fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
893+
public static final fun dayOfMonth (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;)V
894+
public static final fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
895+
public static final fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
896+
public static final fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
897+
}
898+
899+
public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithDate$DefaultImpls$Companion {
900+
public final fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
901+
public final fun dayOfMonth (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;)V
902+
public final fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
903+
public final fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
904+
public final fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
891905
}
892906

893907
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithDateTime : kotlinx/datetime/format/DateTimeFormatBuilder$WithDate, kotlinx/datetime/format/DateTimeFormatBuilder$WithTime {
@@ -911,12 +925,17 @@ public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithDateTimeCom
911925

912926
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithTime : kotlinx/datetime/format/DateTimeFormatBuilder {
913927
public abstract fun amPmHour (Lkotlinx/datetime/format/Padding;)V
928+
public static synthetic fun amPmHour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
914929
public abstract fun amPmMarker (Ljava/lang/String;Ljava/lang/String;)V
915930
public abstract fun hour (Lkotlinx/datetime/format/Padding;)V
931+
public static synthetic fun hour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
916932
public abstract fun minute (Lkotlinx/datetime/format/Padding;)V
933+
public static synthetic fun minute$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
917934
public abstract fun second (Lkotlinx/datetime/format/Padding;)V
918-
public abstract fun secondFraction (I)V
935+
public static synthetic fun second$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
936+
public fun secondFraction (I)V
919937
public abstract fun secondFraction (II)V
938+
public static synthetic fun secondFraction$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;IIILjava/lang/Object;)V
920939
public abstract fun time (Lkotlinx/datetime/format/DateTimeFormat;)V
921940
}
922941

@@ -932,8 +951,11 @@ public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithTime$Defaul
932951
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset : kotlinx/datetime/format/DateTimeFormatBuilder {
933952
public abstract fun offset (Lkotlinx/datetime/format/DateTimeFormat;)V
934953
public abstract fun offsetHours (Lkotlinx/datetime/format/Padding;)V
954+
public static synthetic fun offsetHours$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
935955
public abstract fun offsetMinutesOfHour (Lkotlinx/datetime/format/Padding;)V
956+
public static synthetic fun offsetMinutesOfHour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
936957
public abstract fun offsetSecondsOfMinute (Lkotlinx/datetime/format/Padding;)V
958+
public static synthetic fun offsetSecondsOfMinute$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
937959
}
938960

939961
public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset$DefaultImpls {
@@ -945,7 +967,9 @@ public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset$D
945967
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth : kotlinx/datetime/format/DateTimeFormatBuilder {
946968
public abstract fun monthName (Lkotlinx/datetime/format/MonthNames;)V
947969
public abstract fun monthNumber (Lkotlinx/datetime/format/Padding;)V
970+
public static synthetic fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
948971
public abstract fun year (Lkotlinx/datetime/format/Padding;)V
972+
public static synthetic fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
949973
public abstract fun yearMonth (Lkotlinx/datetime/format/DateTimeFormat;)V
950974
public abstract fun yearTwoDigits (I)V
951975
}

core/common/src/format/DateTimeFormatBuilder.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import kotlinx.datetime.*
99
import kotlinx.datetime.internal.*
1010
import kotlinx.datetime.internal.format.*
1111

12+
@OptIn(ExperimentalMultiplatform::class)
13+
@OptionalExpectation
14+
internal expect annotation class MyJvmDefaultWithoutCompatibility()
15+
1216
/**
1317
* Common functions for all format builders.
1418
*/
@@ -85,6 +89,7 @@ public sealed interface DateTimeFormatBuilder {
8589
/**
8690
* Functions specific to the datetime format builders containing the local-date fields.
8791
*/
92+
@MyJvmDefaultWithoutCompatibility
8893
public sealed interface WithDate : WithYearMonth {
8994
/**
9095
* A day-of-month number, from 1 to 31.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 2019-2025 JetBrains s.r.o. and contributors.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
package kotlinx.datetime.format
7+
8+
/**
9+
* This class preserves backward compatibility with the version 0.6.2 of `kotlinx-datetime`,
10+
* where `year` and `monthNumber` with default values were parts of the `WithDate` interface.
11+
*
12+
* Now, these methods were moved to the `WithYearMonth` interface,
13+
* but the static methods corresponding to the default values are not inherited.
14+
*/
15+
@PublishedApi
16+
internal class `DateTimeFormatBuilder$WithDate$DefaultImpls` {
17+
// public static synthetic fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
18+
// public static synthetic fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
19+
// public static synthetic fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
20+
// public static fun dayOfMonth (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;)V
21+
// public static synthetic fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
22+
23+
companion object {
24+
@JvmStatic
25+
fun `monthNumber$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
26+
format.monthNumber()
27+
}
28+
29+
@JvmStatic
30+
fun `year$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
31+
format.year()
32+
}
33+
34+
@JvmStatic
35+
fun `day$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
36+
format.day()
37+
}
38+
39+
@JvmStatic
40+
fun dayOfMonth(format: DateTimeFormatBuilder.WithDate, padding: Padding?) {
41+
format.day(padding = padding ?: Padding.ZERO)
42+
}
43+
44+
@JvmStatic
45+
fun `dayOfMonth$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
46+
format.day()
47+
}
48+
}
49+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
* Copyright 2019-2025 JetBrains s.r.o. and contributors.
3+
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
4+
*/
5+
6+
package kotlinx.datetime.format
7+
8+
internal actual typealias MyJvmDefaultWithoutCompatibility = JvmDefaultWithoutCompatibility

0 commit comments

Comments
 (0)