Skip to content

Commit 19dfa80

Browse files
authored
Restore binary compatibility of year(), monthNumber(), and dayOfYear() (#548)
Fixes #545
1 parent 2e4fda1 commit 19dfa80

File tree

5 files changed

+101
-7
lines changed

5 files changed

+101
-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: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -878,16 +878,32 @@ 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 dayOfYear$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
896+
public static final fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
897+
public static final fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
898+
}
899+
900+
public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithDate$DefaultImpls$Companion {
901+
public final fun day$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
902+
public final fun dayOfMonth (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;)V
903+
public final fun dayOfMonth$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
904+
public final fun dayOfYear$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
905+
public final fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
906+
public final fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
891907
}
892908

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

912928
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithTime : kotlinx/datetime/format/DateTimeFormatBuilder {
913929
public abstract fun amPmHour (Lkotlinx/datetime/format/Padding;)V
930+
public static synthetic fun amPmHour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
914931
public abstract fun amPmMarker (Ljava/lang/String;Ljava/lang/String;)V
915932
public abstract fun hour (Lkotlinx/datetime/format/Padding;)V
933+
public static synthetic fun hour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
916934
public abstract fun minute (Lkotlinx/datetime/format/Padding;)V
935+
public static synthetic fun minute$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
917936
public abstract fun second (Lkotlinx/datetime/format/Padding;)V
918-
public abstract fun secondFraction (I)V
937+
public static synthetic fun second$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
938+
public fun secondFraction (I)V
919939
public abstract fun secondFraction (II)V
940+
public static synthetic fun secondFraction$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithTime;IIILjava/lang/Object;)V
920941
public abstract fun time (Lkotlinx/datetime/format/DateTimeFormat;)V
921942
}
922943

@@ -932,8 +953,11 @@ public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithTime$Defaul
932953
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset : kotlinx/datetime/format/DateTimeFormatBuilder {
933954
public abstract fun offset (Lkotlinx/datetime/format/DateTimeFormat;)V
934955
public abstract fun offsetHours (Lkotlinx/datetime/format/Padding;)V
956+
public static synthetic fun offsetHours$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
935957
public abstract fun offsetMinutesOfHour (Lkotlinx/datetime/format/Padding;)V
958+
public static synthetic fun offsetMinutesOfHour$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
936959
public abstract fun offsetSecondsOfMinute (Lkotlinx/datetime/format/Padding;)V
960+
public static synthetic fun offsetSecondsOfMinute$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
937961
}
938962

939963
public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset$DefaultImpls {
@@ -945,7 +969,9 @@ public final class kotlinx/datetime/format/DateTimeFormatBuilder$WithUtcOffset$D
945969
public abstract interface class kotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth : kotlinx/datetime/format/DateTimeFormatBuilder {
946970
public abstract fun monthName (Lkotlinx/datetime/format/MonthNames;)V
947971
public abstract fun monthNumber (Lkotlinx/datetime/format/Padding;)V
972+
public static synthetic fun monthNumber$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
948973
public abstract fun year (Lkotlinx/datetime/format/Padding;)V
974+
public static synthetic fun year$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithYearMonth;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
949975
public abstract fun yearMonth (Lkotlinx/datetime/format/DateTimeFormat;)V
950976
public abstract fun yearTwoDigits (I)V
951977
}

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.

core/jvm/src/format/Deprecations.kt

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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+
// public static synthetic fun dayOfYear$default (Lkotlinx/datetime/format/DateTimeFormatBuilder$WithDate;Lkotlinx/datetime/format/Padding;ILjava/lang/Object;)V
23+
24+
companion object {
25+
@JvmStatic
26+
fun `monthNumber$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
27+
format.monthNumber()
28+
}
29+
30+
@JvmStatic
31+
fun `dayOfYear$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
32+
format.dayOfYear()
33+
}
34+
35+
@JvmStatic
36+
fun `year$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
37+
format.year()
38+
}
39+
40+
@JvmStatic
41+
fun `day$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
42+
format.day()
43+
}
44+
45+
@JvmStatic
46+
fun dayOfMonth(format: DateTimeFormatBuilder.WithDate, padding: Padding?) {
47+
format.day(padding = padding ?: Padding.ZERO)
48+
}
49+
50+
@JvmStatic
51+
fun `dayOfMonth$default`(format: DateTimeFormatBuilder.WithDate, padding: Padding?, i: Int, j: Any?) {
52+
format.day()
53+
}
54+
}
55+
}
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)