Skip to content

Commit 3c7fb8f

Browse files
committed
Enable all-compatibility mode for generating Java 8's default methods in interfaces
It will allow new clients to benefit from this JVM feature while still generating $DefaultImpls for older clients.
1 parent bb67a8c commit 3c7fb8f

File tree

3 files changed

+19
-37
lines changed

3 files changed

+19
-37
lines changed

buildSrc/src/main/kotlin/source-sets-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ kotlin {
3232
@OptIn(ExperimentalKotlinGradlePluginApi::class)
3333
compilerOptions {
3434
jvmTarget = JvmTarget.JVM_1_8
35-
freeCompilerArgs.add("-Xjdk-release=1.8")
35+
freeCompilerArgs.addAll("-Xjdk-release=1.8", "-Xjvm-default=all-compatibility")
3636
}
3737
}
3838
jvmToolchain(jdkToolchainVersion)

core/api/kotlinx-serialization-core.api

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public final class kotlinx/serialization/descriptors/PrimitiveKind$STRING : kotl
281281
}
282282

283283
public abstract interface class kotlinx/serialization/descriptors/SerialDescriptor {
284-
public abstract fun getAnnotations ()Ljava/util/List;
284+
public fun getAnnotations ()Ljava/util/List;
285285
public abstract fun getElementAnnotations (I)Ljava/util/List;
286286
public abstract fun getElementDescriptor (I)Lkotlinx/serialization/descriptors/SerialDescriptor;
287287
public abstract fun getElementIndex (Ljava/lang/String;)I
@@ -290,8 +290,8 @@ public abstract interface class kotlinx/serialization/descriptors/SerialDescript
290290
public abstract fun getKind ()Lkotlinx/serialization/descriptors/SerialKind;
291291
public abstract fun getSerialName ()Ljava/lang/String;
292292
public abstract fun isElementOptional (I)Z
293-
public abstract fun isInline ()Z
294-
public abstract fun isNullable ()Z
293+
public fun isInline ()Z
294+
public fun isNullable ()Z
295295
}
296296

297297
public final class kotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls {
@@ -361,7 +361,6 @@ public abstract class kotlinx/serialization/encoding/AbstractDecoder : kotlinx/s
361361
public final fun decodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)B
362362
public fun decodeChar ()C
363363
public final fun decodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)C
364-
public fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
365364
public fun decodeDouble ()D
366365
public final fun decodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)D
367366
public fun decodeEnum (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
@@ -376,10 +375,7 @@ public abstract class kotlinx/serialization/encoding/AbstractDecoder : kotlinx/s
376375
public fun decodeNotNullMark ()Z
377376
public fun decodeNull ()Ljava/lang/Void;
378377
public final fun decodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
379-
public fun decodeNullableSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
380-
public fun decodeSequentially ()Z
381378
public fun decodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
382-
public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
383379
public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
384380
public static synthetic fun decodeSerializableValue$default (Lkotlinx/serialization/encoding/AbstractDecoder;Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
385381
public fun decodeShort ()S
@@ -392,7 +388,6 @@ public abstract class kotlinx/serialization/encoding/AbstractDecoder : kotlinx/s
392388

393389
public abstract class kotlinx/serialization/encoding/AbstractEncoder : kotlinx/serialization/encoding/CompositeEncoder, kotlinx/serialization/encoding/Encoder {
394390
public fun <init> ()V
395-
public fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
396391
public fun beginStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeEncoder;
397392
public fun encodeBoolean (Z)V
398393
public final fun encodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IZ)V
@@ -412,19 +407,15 @@ public abstract class kotlinx/serialization/encoding/AbstractEncoder : kotlinx/s
412407
public final fun encodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;II)V
413408
public fun encodeLong (J)V
414409
public final fun encodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IJ)V
415-
public fun encodeNotNullMark ()V
416410
public fun encodeNull ()V
417411
public fun encodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
418-
public fun encodeNullableSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
419412
public fun encodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
420-
public fun encodeSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
421413
public fun encodeShort (S)V
422414
public final fun encodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IS)V
423415
public fun encodeString (Ljava/lang/String;)V
424416
public final fun encodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/String;)V
425417
public fun encodeValue (Ljava/lang/Object;)V
426418
public fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
427-
public fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
428419
}
429420

430421
public abstract interface class kotlinx/serialization/encoding/ChunkedDecoder {
@@ -438,16 +429,18 @@ public abstract interface class kotlinx/serialization/encoding/CompositeDecoder
438429
public abstract fun decodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
439430
public abstract fun decodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)B
440431
public abstract fun decodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)C
441-
public abstract fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
432+
public fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
442433
public abstract fun decodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)D
443434
public abstract fun decodeElementIndex (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
444435
public abstract fun decodeFloatElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)F
445436
public abstract fun decodeInlineElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/Decoder;
446437
public abstract fun decodeIntElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)I
447438
public abstract fun decodeLongElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)J
448439
public abstract fun decodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
449-
public abstract fun decodeSequentially ()Z
440+
public static synthetic fun decodeNullableSerializableElement$default (Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
441+
public fun decodeSequentially ()Z
450442
public abstract fun decodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
443+
public static synthetic fun decodeSerializableElement$default (Lkotlinx/serialization/encoding/CompositeDecoder;Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
451444
public abstract fun decodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)S
452445
public abstract fun decodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String;
453446
public abstract fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
@@ -481,7 +474,7 @@ public abstract interface class kotlinx/serialization/encoding/CompositeEncoder
481474
public abstract fun encodeStringElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILjava/lang/String;)V
482475
public abstract fun endStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)V
483476
public abstract fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
484-
public abstract fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
477+
public fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
485478
}
486479

487480
public final class kotlinx/serialization/encoding/CompositeEncoder$DefaultImpls {
@@ -501,8 +494,8 @@ public abstract interface class kotlinx/serialization/encoding/Decoder {
501494
public abstract fun decodeLong ()J
502495
public abstract fun decodeNotNullMark ()Z
503496
public abstract fun decodeNull ()Ljava/lang/Void;
504-
public abstract fun decodeNullableSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
505-
public abstract fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
497+
public fun decodeNullableSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
498+
public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
506499
public abstract fun decodeShort ()S
507500
public abstract fun decodeString ()Ljava/lang/String;
508501
public abstract fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
@@ -518,7 +511,7 @@ public final class kotlinx/serialization/encoding/DecodingKt {
518511
}
519512

520513
public abstract interface class kotlinx/serialization/encoding/Encoder {
521-
public abstract fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
514+
public fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
522515
public abstract fun beginStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeEncoder;
523516
public abstract fun encodeBoolean (Z)V
524517
public abstract fun encodeByte (B)V
@@ -529,10 +522,10 @@ public abstract interface class kotlinx/serialization/encoding/Encoder {
529522
public abstract fun encodeInline (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/Encoder;
530523
public abstract fun encodeInt (I)V
531524
public abstract fun encodeLong (J)V
532-
public abstract fun encodeNotNullMark ()V
525+
public fun encodeNotNullMark ()V
533526
public abstract fun encodeNull ()V
534-
public abstract fun encodeNullableSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
535-
public abstract fun encodeSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
527+
public fun encodeNullableSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
528+
public fun encodeSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
536529
public abstract fun encodeShort (S)V
537530
public abstract fun encodeString (Ljava/lang/String;)V
538531
public abstract fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule;
@@ -760,7 +753,7 @@ public final class kotlinx/serialization/internal/FloatSerializer : kotlinx/seri
760753

761754
public abstract interface class kotlinx/serialization/internal/GeneratedSerializer : kotlinx/serialization/KSerializer {
762755
public abstract fun childSerializers ()[Lkotlinx/serialization/KSerializer;
763-
public abstract fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
756+
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
764757
}
765758

766759
public final class kotlinx/serialization/internal/GeneratedSerializer$DefaultImpls {
@@ -992,8 +985,6 @@ public class kotlinx/serialization/internal/PluginGeneratedSerialDescriptor : ko
992985
public fun getSerialNames ()Ljava/util/Set;
993986
public fun hashCode ()I
994987
public fun isElementOptional (I)Z
995-
public fun isInline ()Z
996-
public fun isNullable ()Z
997988
public final fun pushAnnotation (Ljava/lang/annotation/Annotation;)V
998989
public final fun pushClassAnnotation (Ljava/lang/annotation/Annotation;)V
999990
public fun toString ()Ljava/lang/String;
@@ -1084,7 +1075,6 @@ public abstract class kotlinx/serialization/internal/TaggedDecoder : kotlinx/ser
10841075
public final fun decodeByteElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)B
10851076
public final fun decodeChar ()C
10861077
public final fun decodeCharElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)C
1087-
public fun decodeCollectionSize (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
10881078
public final fun decodeDouble ()D
10891079
public final fun decodeDoubleElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)D
10901080
public final fun decodeEnum (Lkotlinx/serialization/descriptors/SerialDescriptor;)I
@@ -1099,10 +1089,7 @@ public abstract class kotlinx/serialization/internal/TaggedDecoder : kotlinx/ser
10991089
public fun decodeNotNullMark ()Z
11001090
public final fun decodeNull ()Ljava/lang/Void;
11011091
public final fun decodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
1102-
public fun decodeNullableSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
1103-
public fun decodeSequentially ()Z
11041092
public final fun decodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
1105-
public fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
11061093
protected fun decodeSerializableValue (Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
11071094
public final fun decodeShort ()S
11081095
public final fun decodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;I)S
@@ -1133,7 +1120,6 @@ public abstract class kotlinx/serialization/internal/TaggedDecoder : kotlinx/ser
11331120

11341121
public abstract class kotlinx/serialization/internal/TaggedEncoder : kotlinx/serialization/encoding/CompositeEncoder, kotlinx/serialization/encoding/Encoder {
11351122
public fun <init> ()V
1136-
public fun beginCollection (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder;
11371123
public fun beginStructure (Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeEncoder;
11381124
public final fun encodeBoolean (Z)V
11391125
public final fun encodeBooleanElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IZ)V
@@ -1155,9 +1141,7 @@ public abstract class kotlinx/serialization/internal/TaggedEncoder : kotlinx/ser
11551141
public fun encodeNotNullMark ()V
11561142
public fun encodeNull ()V
11571143
public fun encodeNullableSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
1158-
public fun encodeNullableSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
11591144
public fun encodeSerializableElement (Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
1160-
public fun encodeSerializableValue (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V
11611145
public final fun encodeShort (S)V
11621146
public final fun encodeShortElement (Lkotlinx/serialization/descriptors/SerialDescriptor;IS)V
11631147
public final fun encodeString (Ljava/lang/String;)V
@@ -1184,7 +1168,6 @@ public abstract class kotlinx/serialization/internal/TaggedEncoder : kotlinx/ser
11841168
protected abstract fun getTag (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/Object;
11851169
protected final fun popTag ()Ljava/lang/Object;
11861170
protected final fun pushTag (Ljava/lang/Object;)V
1187-
public fun shouldEncodeElementDefault (Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z
11881171
}
11891172

11901173
public final class kotlinx/serialization/internal/TripleSerializer : kotlinx/serialization/KSerializer {
@@ -1331,7 +1314,6 @@ public final class kotlinx/serialization/modules/SerializersModuleBuilder : kotl
13311314
public fun contextual (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
13321315
public final fun include (Lkotlinx/serialization/modules/SerializersModule;)V
13331316
public fun polymorphic (Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
1334-
public fun polymorphicDefault (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13351317
public fun polymorphicDefaultDeserializer (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13361318
public fun polymorphicDefaultSerializer (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13371319
}
@@ -1346,9 +1328,9 @@ public final class kotlinx/serialization/modules/SerializersModuleBuildersKt {
13461328

13471329
public abstract interface class kotlinx/serialization/modules/SerializersModuleCollector {
13481330
public abstract fun contextual (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
1349-
public abstract fun contextual (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
1331+
public fun contextual (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
13501332
public abstract fun polymorphic (Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
1351-
public abstract fun polymorphicDefault (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
1333+
public fun polymorphicDefault (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13521334
public abstract fun polymorphicDefaultDeserializer (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13531335
public abstract fun polymorphicDefaultSerializer (Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V
13541336
}

formats/hocon/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ kotlin {
2121
languageVersion = KotlinVersion.fromVersion(overriddenLanguageVersion!!)
2222
freeCompilerArgs.add("-Xsuppress-version-warnings")
2323
}
24-
freeCompilerArgs.add("-Xjdk-release=1.8")
24+
freeCompilerArgs.addAll("-Xjdk-release=1.8", "-Xjvm-default=all-compatibility")
2525
}
2626

2727
sourceSets.all {

0 commit comments

Comments
 (0)