Skip to content

Commit 621dbf8

Browse files
authored
Migrate to Kotlin 1.7.0 (#1977)
* Remove Java 1.6 target * Update binary-compatibility-validator * Suppress some animal sniffer detections that can be desugared
1 parent 5e8ccad commit 621dbf8

File tree

18 files changed

+663
-69
lines changed

18 files changed

+663
-69
lines changed

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
2+
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

55
buildscript {
@@ -173,6 +173,7 @@ subprojects {
173173
afterEvaluate { // Can be applied only when the project is evaluated
174174
animalsniffer {
175175
sourceSets = [sourceSets.main]
176+
annotation = "kotlinx.serialization.json.internal.SuppressAnimalSniffer"
176177
}
177178
dependencies {
178179
signature 'net.sf.androidscents.signature:android-api-level-14:4.0_r4@signature'

buildSrc/src/main/kotlin/Java9Modularity.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
/*
2+
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
15
import org.gradle.api.*
26
import org.gradle.api.tasks.bundling.*
37
import org.gradle.api.tasks.compile.*
@@ -6,6 +10,7 @@ import org.jetbrains.kotlin.gradle.dsl.*
610
import org.jetbrains.kotlin.gradle.plugin.mpp.*
711
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.*
812
import org.jetbrains.kotlin.gradle.targets.jvm.*
13+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
914
import java.io.*
1015

1116
object Java9Modularity {
@@ -28,7 +33,7 @@ object Java9Modularity {
2833
}
2934

3035
target.compilations.forEach { compilation ->
31-
val compileKotlinTask = compilation.compileKotlinTask as AbstractCompile
36+
val compileKotlinTask = compilation.compileKotlinTask as KotlinCompile
3237
val defaultSourceSet = compilation.defaultSourceSet
3338

3439
// derive the names of the source set and compile module task
@@ -64,7 +69,7 @@ object Java9Modularity {
6469
}
6570
}
6671

67-
private fun Project.registerCompileModuleTask(taskName: String, compileTask: AbstractCompile, sourceFile: File, targetFile: File) =
72+
private fun Project.registerCompileModuleTask(taskName: String, compileTask: KotlinCompile, sourceFile: File, targetFile: File) =
6873
tasks.register(taskName, JavaCompile::class) {
6974
// Also add the module-info.java source file to the Kotlin compile task;
7075
// the Kotlin compiler will parse and check module dependencies,
@@ -86,7 +91,7 @@ object Java9Modularity {
8691
// The module path should be the same as the classpath of the compiler.
8792
options.compilerArgs = listOf(
8893
"--release", "9",
89-
"--module-path", compileTask.classpath.asPath,
94+
"--module-path", compileTask.libraries.asPath,
9095
"-Xlint:-requires-transitive-automatic"
9196
)
9297
}

core/api/kotlinx-serialization-core.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,7 @@ public final class kotlinx/serialization/internal/UnitSerializer : kotlinx/seria
11881188

11891189
public final class kotlinx/serialization/modules/PolymorphicModuleBuilder {
11901190
public fun <init> (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V
1191+
public synthetic fun <init> (Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
11911192
public final fun buildTo (Lkotlinx/serialization/modules/SerializersModuleBuilder;)V
11921193
public final fun default (Lkotlin/jvm/functions/Function1;)V
11931194
public final fun defaultDeserializer (Lkotlin/jvm/functions/Function1;)V

formats/json-tests/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
33
*/
44
import Java9Modularity.configureJava9ModuleInfo
5+
import org.jetbrains.kotlin.gradle.tasks.*
56

67
plugins {
78
kotlin("multiplatform")
@@ -11,7 +12,7 @@ plugins {
1112
apply(from = rootProject.file("gradle/native-targets.gradle"))
1213
apply(from = rootProject.file("gradle/configure-source-sets.gradle"))
1314

14-
tasks.withType<SourceTask> {
15+
tasks.withType<Kotlin2JsCompile> {
1516
if (this.name == "compileTestKotlinJsLegacy") {
1617
this.exclude("**/PropertyInitializerTest.kt")
1718
}

formats/json-tests/commonTest/src/kotlinx/serialization/features/LocalClassesTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class LocalClassesTest {
6363
}
6464
}
6565

66+
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
6667
@Test
6768
fun testObjectCustomSerializer() {
6869
@Serializable(with = ObjectCustomSerializer::class)
@@ -76,6 +77,7 @@ class LocalClassesTest {
7677
}
7778
}
7879

80+
@Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
7981
@Test
8082
fun testClassCustomSerializer() {
8183
@Serializable(with = ClassCustomSerializer::class)

formats/json/api/kotlinx-serialization-json.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,10 @@ public final class kotlinx/serialization/json/JvmStreamsKt {
358358
public static final fun encodeToStream (Lkotlinx/serialization/json/Json;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;Ljava/io/OutputStream;)V
359359
}
360360

361+
public final class kotlinx/serialization/json/internal/JsonLexerKt {
362+
public static final field BATCH_SIZE I
363+
}
364+
361365
public final class kotlinx/serialization/json/internal/JsonStreamsKt {
362366
public static final fun decodeByReader (Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/internal/SerialReader;)Ljava/lang/Object;
363367
public static final fun decodeToSequenceByReader (Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/SerialReader;Lkotlinx/serialization/DeserializationStrategy;Lkotlinx/serialization/json/DecodeSequenceMode;)Lkotlin/sequences/Sequence;
@@ -381,6 +385,10 @@ public final class kotlinx/serialization/json/internal/StreamingJsonDecoderKt {
381385
public static final fun decodeStringToJsonTree (Lkotlinx/serialization/json/Json;Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/String;)Lkotlinx/serialization/json/JsonElement;
382386
}
383387

388+
public final class kotlinx/serialization/json/internal/StringOpsKt {
389+
public static final fun getESCAPE_STRINGS ()[Ljava/lang/String;
390+
}
391+
384392
public final class kotlinx/serialization/json/internal/TreeJsonDecoderKt {
385393
public static final fun readJson (Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/JsonElement;Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
386394
}

formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
2+
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
33
*/
44

55
@file:Suppress("unused")
@@ -97,6 +97,7 @@ internal class JsonLiteral internal constructor(
9797
return true
9898
}
9999

100+
@SuppressAnimalSniffer // Boolean.hashCode(boolean)
100101
public override fun hashCode(): Int {
101102
var result = isString.hashCode()
102103
result = 31 * result + content.hashCode()

formats/json/commonMain/src/kotlinx/serialization/json/internal/Composers.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ internal open class Composer(@JvmField internal val writer: JsonWriter) {
4141
fun printQuoted(value: String) = writer.writeQuoted(value)
4242
}
4343

44+
@SuppressAnimalSniffer // Long(Integer).toUnsignedString(long)
4445
internal class ComposerForUnsignedNumbers(writer: JsonWriter, private val forceQuoting: Boolean) : Composer(writer) {
4546
override fun print(v: Int) {
4647
if (forceQuoting) printQuoted(v.toUInt().toString()) else print(v.toUInt().toString())
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3+
*/
4+
5+
package kotlinx.serialization.json.internal
6+
7+
/**
8+
* Suppresses Animal Sniffer plugin errors for certain methods.
9+
* Such methods include references to Java 8 methods that are not
10+
* available in Android API, but can be desugared by R8.
11+
*/
12+
@Retention(AnnotationRetention.BINARY)
13+
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
14+
internal annotation class SuppressAnimalSniffer

formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
2+
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
33
*/
44
@file:OptIn(ExperimentalSerializationApi::class)
55

@@ -102,6 +102,7 @@ private sealed class AbstractJsonTreeEncoder(
102102
putElement(tag, JsonPrimitive(value.toString()))
103103
}
104104

105+
@SuppressAnimalSniffer // Long(Integer).toUnsignedString(long)
105106
override fun encodeTaggedInline(tag: String, inlineDescriptor: SerialDescriptor): Encoder =
106107
if (inlineDescriptor.isUnsignedNumber) object : AbstractEncoder() {
107108
override val serializersModule: SerializersModule = json.serializersModule

0 commit comments

Comments
 (0)