From 54ff28f551e6c2689879afd97aef6da4a6022233 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Thu, 13 Sep 2018 13:27:24 -0400 Subject: [PATCH 1/3] Update to Kotlin 1.2.70 This allows using the built-in platform-specific annotations instead of our own aliases. --- build.gradle | 4 ++-- okio/js/src/main/kotlin/okio/-Platform.kt | 17 -------------- okio/jvm/src/main/java/okio/-Platform.kt | 5 ----- okio/native/src/main/kotlin/okio/-Platform.kt | 17 -------------- okio/src/main/kotlin/okio/-Base64.kt | 1 + okio/src/main/kotlin/okio/-Platform.kt | 22 ------------------- okio/src/main/kotlin/okio/-Util.kt | 2 ++ okio/src/main/kotlin/okio/ByteString.kt | 4 ++++ okio/src/main/kotlin/okio/Segment.kt | 2 ++ okio/src/main/kotlin/okio/SegmentPool.kt | 3 +++ okio/src/main/kotlin/okio/Utf8.kt | 3 +++ 11 files changed, 17 insertions(+), 63 deletions(-) diff --git a/build.gradle b/build.gradle index cb4d827ab6..2261f4775a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ buildscript { ext.versions = [ - 'kotlin': '1.2.60', - 'kotlinNative': '0.8.2', + 'kotlin': '1.2.70', + 'kotlinNative': '0.9.1', 'jmhPlugin': '0.4.5', 'animalSnifferPlugin': '1.4.3', 'dokka': '0.9.16', diff --git a/okio/js/src/main/kotlin/okio/-Platform.kt b/okio/js/src/main/kotlin/okio/-Platform.kt index a088b30a34..4747e9c990 100644 --- a/okio/js/src/main/kotlin/okio/-Platform.kt +++ b/okio/js/src/main/kotlin/okio/-Platform.kt @@ -18,23 +18,6 @@ package okio import okio.internal.commonAsUtf8ToByteArray import okio.internal.commonToUtf8String -import kotlin.annotation.AnnotationTarget.FIELD -import kotlin.annotation.AnnotationTarget.FILE -import kotlin.annotation.AnnotationTarget.FUNCTION -import kotlin.annotation.AnnotationTarget.PROPERTY_GETTER -import kotlin.annotation.AnnotationTarget.PROPERTY_SETTER - -@Target(FUNCTION) -actual annotation class JvmOverloads - -@Target(FIELD) -actual annotation class JvmField - -@Target(FUNCTION) -actual annotation class JvmStatic - -@Target(FILE, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) -actual annotation class JvmName(actual val name: String) internal actual fun arraycopy( src: ByteArray, diff --git a/okio/jvm/src/main/java/okio/-Platform.kt b/okio/jvm/src/main/java/okio/-Platform.kt index 4cac2a42ff..37bf156272 100644 --- a/okio/jvm/src/main/java/okio/-Platform.kt +++ b/okio/jvm/src/main/java/okio/-Platform.kt @@ -17,11 +17,6 @@ @file:JvmName("-Platform") package okio -actual typealias JvmOverloads = kotlin.jvm.JvmOverloads -actual typealias JvmField = kotlin.jvm.JvmField -actual typealias JvmStatic = kotlin.jvm.JvmStatic -actual typealias JvmName = kotlin.jvm.JvmName - internal actual fun arraycopy( src: ByteArray, srcPos: Int, diff --git a/okio/native/src/main/kotlin/okio/-Platform.kt b/okio/native/src/main/kotlin/okio/-Platform.kt index dd8618762a..ccb9f345be 100644 --- a/okio/native/src/main/kotlin/okio/-Platform.kt +++ b/okio/native/src/main/kotlin/okio/-Platform.kt @@ -17,23 +17,6 @@ package okio import okio.internal.commonAsUtf8ToByteArray -import kotlin.annotation.AnnotationTarget.FIELD -import kotlin.annotation.AnnotationTarget.FILE -import kotlin.annotation.AnnotationTarget.FUNCTION -import kotlin.annotation.AnnotationTarget.PROPERTY_GETTER -import kotlin.annotation.AnnotationTarget.PROPERTY_SETTER - -@Target(FUNCTION) -actual annotation class JvmOverloads - -@Target(FIELD) -actual annotation class JvmField - -@Target(FUNCTION) -actual annotation class JvmStatic - -@Target(FILE, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) -actual annotation class JvmName(actual val name: String) internal actual fun arraycopy( src: ByteArray, diff --git a/okio/src/main/kotlin/okio/-Base64.kt b/okio/src/main/kotlin/okio/-Base64.kt index f2d6fa7824..828250cb12 100644 --- a/okio/src/main/kotlin/okio/-Base64.kt +++ b/okio/src/main/kotlin/okio/-Base64.kt @@ -19,6 +19,7 @@ package okio import okio.ByteString.Companion.encodeUtf8 +import kotlin.jvm.JvmName /** @author Alexander Y. Kleymenov */ diff --git a/okio/src/main/kotlin/okio/-Platform.kt b/okio/src/main/kotlin/okio/-Platform.kt index 8180616ea5..fb7ba2a92a 100644 --- a/okio/src/main/kotlin/okio/-Platform.kt +++ b/okio/src/main/kotlin/okio/-Platform.kt @@ -16,28 +16,6 @@ package okio -import kotlin.annotation.AnnotationTarget.FIELD -import kotlin.annotation.AnnotationTarget.FILE -import kotlin.annotation.AnnotationTarget.FUNCTION -import kotlin.annotation.AnnotationTarget.PROPERTY_GETTER -import kotlin.annotation.AnnotationTarget.PROPERTY_SETTER - -// TODO remove after https://youtrack.jetbrains.com/issue/KT-24478 -@Target(FUNCTION) -expect annotation class JvmOverloads() - -// TODO remove after https://youtrack.jetbrains.com/issue/KT-24478 -@Target(FIELD) -expect annotation class JvmField() - -// TODO remove after https://youtrack.jetbrains.com/issue/KT-24478 -@Target(FUNCTION) -expect annotation class JvmStatic() - -// TODO remove after https://youtrack.jetbrains.com/issue/KT-24478 -@Target(FILE, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) -expect annotation class JvmName(val name: String) - internal expect fun arraycopy( src: ByteArray, srcPos: Int, diff --git a/okio/src/main/kotlin/okio/-Util.kt b/okio/src/main/kotlin/okio/-Util.kt index 4847b76cbc..5410ac838a 100644 --- a/okio/src/main/kotlin/okio/-Util.kt +++ b/okio/src/main/kotlin/okio/-Util.kt @@ -18,6 +18,8 @@ package okio +import kotlin.jvm.JvmName + internal fun checkOffsetAndCount(size: Long, offset: Long, byteCount: Long) { if (offset or byteCount < 0 || offset > size || size - offset < byteCount) { throw ArrayIndexOutOfBoundsException("size=$size offset=$offset byteCount=$byteCount") diff --git a/okio/src/main/kotlin/okio/ByteString.kt b/okio/src/main/kotlin/okio/ByteString.kt index 951c0d8688..f7ed26af75 100644 --- a/okio/src/main/kotlin/okio/ByteString.kt +++ b/okio/src/main/kotlin/okio/ByteString.kt @@ -16,6 +16,10 @@ package okio +import kotlin.jvm.JvmField +import kotlin.jvm.JvmName +import kotlin.jvm.JvmStatic + /** * An immutable sequence of bytes. * diff --git a/okio/src/main/kotlin/okio/Segment.kt b/okio/src/main/kotlin/okio/Segment.kt index 33cc2186e3..c413275486 100644 --- a/okio/src/main/kotlin/okio/Segment.kt +++ b/okio/src/main/kotlin/okio/Segment.kt @@ -15,6 +15,8 @@ */ package okio +import kotlin.jvm.JvmField + /** * A segment of a buffer. * diff --git a/okio/src/main/kotlin/okio/SegmentPool.kt b/okio/src/main/kotlin/okio/SegmentPool.kt index b4439d61d0..83d5a98189 100644 --- a/okio/src/main/kotlin/okio/SegmentPool.kt +++ b/okio/src/main/kotlin/okio/SegmentPool.kt @@ -15,6 +15,9 @@ */ package okio +import kotlin.jvm.JvmField +import kotlin.jvm.JvmStatic + /** * A collection of unused segments, necessary to avoid GC churn and zero-fill. * This pool is a thread-safe static singleton. diff --git a/okio/src/main/kotlin/okio/Utf8.kt b/okio/src/main/kotlin/okio/Utf8.kt index c3fb1dc78d..fb8fbdf783 100644 --- a/okio/src/main/kotlin/okio/Utf8.kt +++ b/okio/src/main/kotlin/okio/Utf8.kt @@ -65,6 +65,9 @@ package okio +import kotlin.jvm.JvmName +import kotlin.jvm.JvmOverloads + /** * Returns the number of bytes used to encode the slice of `string` as UTF-8 when using * [BufferedSink.writeUtf8]. From 10d0ed25c19674d51a2180c42045901bb7990254 Mon Sep 17 00:00:00 2001 From: Egor Andreevici Date: Mon, 8 Oct 2018 11:33:58 -0400 Subject: [PATCH 2/3] Replace deprecated synchronized() with a custom implementation --- okio/js/src/main/kotlin/okio/-Platform.kt | 2 ++ okio/jvm/src/main/java/okio/-Platform.kt | 2 ++ okio/native/src/main/kotlin/okio/-Platform.kt | 2 ++ okio/src/main/kotlin/okio/-Platform.kt | 2 ++ okio/src/main/kotlin/okio/SegmentPool.kt | 4 ++-- 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/okio/js/src/main/kotlin/okio/-Platform.kt b/okio/js/src/main/kotlin/okio/-Platform.kt index 4747e9c990..86b0ff399c 100644 --- a/okio/js/src/main/kotlin/okio/-Platform.kt +++ b/okio/js/src/main/kotlin/okio/-Platform.kt @@ -38,3 +38,5 @@ internal actual fun String.asUtf8ToByteArray(): ByteArray = commonAsUtf8ToByteAr actual open class ArrayIndexOutOfBoundsException actual constructor( message: String? ) : IndexOutOfBoundsException(message) + +internal actual inline fun synchronizedOn(lock: Any, block: () -> Unit) = block() diff --git a/okio/jvm/src/main/java/okio/-Platform.kt b/okio/jvm/src/main/java/okio/-Platform.kt index 37bf156272..b3854c5639 100644 --- a/okio/jvm/src/main/java/okio/-Platform.kt +++ b/okio/jvm/src/main/java/okio/-Platform.kt @@ -33,3 +33,5 @@ internal actual fun String.asUtf8ToByteArray(): ByteArray = toByteArray(Charsets // TODO remove if https://youtrack.jetbrains.com/issue/KT-20641 provides a better solution actual typealias ArrayIndexOutOfBoundsException = java.lang.ArrayIndexOutOfBoundsException + +internal actual inline fun synchronizedOn(lock: Any, block: () -> Unit) = synchronized(lock, block) diff --git a/okio/native/src/main/kotlin/okio/-Platform.kt b/okio/native/src/main/kotlin/okio/-Platform.kt index ccb9f345be..e2ea31d712 100644 --- a/okio/native/src/main/kotlin/okio/-Platform.kt +++ b/okio/native/src/main/kotlin/okio/-Platform.kt @@ -40,3 +40,5 @@ internal actual fun ByteArray.toUtf8String(): String = stringFromUtf8() internal actual fun String.asUtf8ToByteArray(): ByteArray = commonAsUtf8ToByteArray() actual typealias ArrayIndexOutOfBoundsException = kotlin.ArrayIndexOutOfBoundsException + +internal actual inline fun synchronizedOn(lock: Any, block: () -> Unit) = block() diff --git a/okio/src/main/kotlin/okio/-Platform.kt b/okio/src/main/kotlin/okio/-Platform.kt index fb7ba2a92a..17fe58f5b2 100644 --- a/okio/src/main/kotlin/okio/-Platform.kt +++ b/okio/src/main/kotlin/okio/-Platform.kt @@ -30,3 +30,5 @@ internal expect fun String.asUtf8ToByteArray(): ByteArray // TODO make internal https://youtrack.jetbrains.com/issue/KT-19664 expect class ArrayIndexOutOfBoundsException(message: String?) : IndexOutOfBoundsException + +internal expect inline fun synchronizedOn(lock: Any, block: () -> Unit) diff --git a/okio/src/main/kotlin/okio/SegmentPool.kt b/okio/src/main/kotlin/okio/SegmentPool.kt index 83d5a98189..90696f7d9d 100644 --- a/okio/src/main/kotlin/okio/SegmentPool.kt +++ b/okio/src/main/kotlin/okio/SegmentPool.kt @@ -37,7 +37,7 @@ internal object SegmentPool { @JvmStatic fun take(): Segment { - synchronized(this) { + synchronizedOn(this) { next?.let { result -> next = result.next result.next = null @@ -53,7 +53,7 @@ internal object SegmentPool { require(segment.next == null && segment.prev == null) if (segment.shared) return // This segment cannot be recycled. - synchronized(this) { + synchronizedOn(this) { if (byteCount + Segment.SIZE > MAX_SIZE) return // Pool is full. byteCount += Segment.SIZE segment.next = next From 1c0c3e952a5953ac4343eda21f26f47d7a77c9a8 Mon Sep 17 00:00:00 2001 From: Egor Andreevici Date: Mon, 8 Oct 2018 12:03:20 -0400 Subject: [PATCH 3/3] Bump versions --- build.gradle | 8 +++++--- okio/js/build.gradle | 10 ++++++++++ okio/jvm/src/test/java/okio/OkioTest.java | 4 ++-- settings.gradle | 2 ++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 2261f4775a..685d0f464d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ buildscript { ext.versions = [ - 'kotlin': '1.2.70', - 'kotlinNative': '0.9.1', + 'kotlin': '1.3.0-rc-146', + 'kotlinNative': '0.9.3', 'jmhPlugin': '0.4.5', 'animalSnifferPlugin': '1.4.3', 'dokka': '0.9.16', @@ -32,7 +32,7 @@ buildscript { 'js': "org.jetbrains.kotlin:kotlin-test-js", ], 'native': [ - 'gradlePlugin': "org.jetbrains.kotlin:kotlin-native-gradle-plugin:${versions.kotlinNative}", + 'gradlePlugin': "org.jetbrains.kotlin:kotlin-native-gradle-plugin:${versions.kotlin}", ] ], 'jmh': [ @@ -72,6 +72,7 @@ buildscript { repositories { mavenCentral() gradlePluginPortal() + maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } } } @@ -84,6 +85,7 @@ subprojects { repositories { mavenCentral() jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' } } apply plugin: "org.jlleitschuh.gradle.ktlint" diff --git a/okio/js/build.gradle b/okio/js/build.gradle index 799e74a957..8f9f30b477 100644 --- a/okio/js/build.gradle +++ b/okio/js/build.gradle @@ -51,3 +51,13 @@ task runMocha(type: NodeTask, dependsOn: [compileTestKotlin2Js, populateNodeModu } test.dependsOn runMocha + +// Workaround the problem with Node downloading +// https://github.com/JetBrains/kotlin-native/issues/1612 +repositories.whenObjectAdded { + if (it instanceof IvyArtifactRepository) { + metadataSources { + artifact() + } + } +} diff --git a/okio/jvm/src/test/java/okio/OkioTest.java b/okio/jvm/src/test/java/okio/OkioTest.java index 0ce9e2945a..3fba911f67 100644 --- a/okio/jvm/src/test/java/okio/OkioTest.java +++ b/okio/jvm/src/test/java/okio/OkioTest.java @@ -135,7 +135,7 @@ public final class OkioTest { fail(); } catch (IllegalArgumentException expected) { assertEquals( - "Parameter specified as non-null is null: method okio.Okio.buffer, parameter $receiver", + "Parameter specified as non-null is null: method okio.Okio.buffer, parameter receiver$0", expected.getMessage()); } } @@ -146,7 +146,7 @@ public final class OkioTest { fail(); } catch (IllegalArgumentException expected) { assertEquals( - "Parameter specified as non-null is null: method okio.Okio.buffer, parameter $receiver", + "Parameter specified as non-null is null: method okio.Okio.buffer, parameter receiver$0", expected.getMessage()); } } diff --git a/settings.gradle b/settings.gradle index a661f4f011..0b48fba6af 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,3 +3,5 @@ include ':okio:js' include ':okio:jvm' include ':okio:native' include ':samples' + +enableFeaturePreview('GRADLE_METADATA')