From e43823ee445412251eb6a2a195f6f36aff158bfa Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 18:34:49 +0900 Subject: [PATCH 01/15] Update gradle to 6.0 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0695d61..49b17fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-all.zip From b65f40f91c0dde859c8daa948be732063ddccb2f Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 18:35:28 +0900 Subject: [PATCH 02/15] Migrate runtime-lite to multiplatform module --- runtime-lite/build.gradle | 47 +++++++++---------- .../src/{main => jvmMain}/kotlin/ByteArr.kt | 0 .../{main => jvmMain}/kotlin/Marshaller.kt | 0 .../src/{main => jvmMain}/kotlin/Message.kt | 0 .../src/{main => jvmMain}/kotlin/Reader.kt | 0 .../src/{main => jvmMain}/kotlin/Sizer.kt | 0 .../{main => jvmMain}/kotlin/UnknownField.kt | 0 .../{main => jvmMain}/kotlin/Unmarshaller.kt | 0 .../src/{main => jvmMain}/kotlin/Utf8.kt | 0 .../src/{main => jvmMain}/kotlin/Writer.kt | 0 .../kotlin/MarshallerTest.kt | 0 .../src/{test => jvmTest}/kotlin/SizerTest.kt | 0 .../kotlin/UnmarshallerTest.kt | 0 .../{test => jvmTest}/kotlin/WriterTest.kt | 0 .../org.mockito.plugins.MockMaker | 0 15 files changed, 22 insertions(+), 25 deletions(-) rename runtime-lite/src/{main => jvmMain}/kotlin/ByteArr.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Marshaller.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Message.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Reader.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Sizer.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/UnknownField.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Unmarshaller.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Utf8.kt (100%) rename runtime-lite/src/{main => jvmMain}/kotlin/Writer.kt (100%) rename runtime-lite/src/{test => jvmTest}/kotlin/MarshallerTest.kt (100%) rename runtime-lite/src/{test => jvmTest}/kotlin/SizerTest.kt (100%) rename runtime-lite/src/{test => jvmTest}/kotlin/UnmarshallerTest.kt (100%) rename runtime-lite/src/{test => jvmTest}/kotlin/WriterTest.kt (100%) rename runtime-lite/src/{test => jvmTest}/resources/mockito-extensions/org.mockito.plugins.MockMaker (100%) diff --git a/runtime-lite/build.gradle b/runtime-lite/build.gradle index 32a7ca5..1b74e2a 100644 --- a/runtime-lite/build.gradle +++ b/runtime-lite/build.gradle @@ -1,6 +1,4 @@ -apply plugin: 'kotlin' -apply plugin: 'org.jetbrains.kotlin.jvm' -apply plugin: 'guru.stefma.artifactorypublish' +apply plugin: 'kotlin-multiplatform' sourceCompatibility = 1.8 @@ -13,27 +11,26 @@ repositories { } -dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" - compile "com.google.protobuf:protobuf-lite:3.0.1" - testCompile group: 'junit', name: 'junit', version: '4.12' - testCompile('com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0') - testCompile("org.assertj:assertj-core:3.11.1") -} - -compileKotlin { - kotlinOptions.jvmTarget = "1.8" -} -compileTestKotlin { - kotlinOptions.jvmTarget = "1.8" -} +kotlin { + targets { + jvm() + } -artifactoryPublish { - groupId = 'jp.co.panpanini' - artifactId = 'protok-runtime-lite' - publishVersion = versionName() - artifactoryUrl = artifactoryUrl - artifactoryRepo = artifactoryRepo - artifactoryUser = artifactoryUsername - artifactoryKey = artifactoryPassword + sourceSets { + commonMain {} + commonTest {} + jvmMain { + dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + implementation "com.google.protobuf:protobuf-lite:3.0.1" + } + } + jvmTest { + dependencies { + implementation group: 'junit', name: 'junit', version: '4.12' + implementation('com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0') + implementation("org.assertj:assertj-core:3.11.1") + } + } + } } \ No newline at end of file diff --git a/runtime-lite/src/main/kotlin/ByteArr.kt b/runtime-lite/src/jvmMain/kotlin/ByteArr.kt similarity index 100% rename from runtime-lite/src/main/kotlin/ByteArr.kt rename to runtime-lite/src/jvmMain/kotlin/ByteArr.kt diff --git a/runtime-lite/src/main/kotlin/Marshaller.kt b/runtime-lite/src/jvmMain/kotlin/Marshaller.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Marshaller.kt rename to runtime-lite/src/jvmMain/kotlin/Marshaller.kt diff --git a/runtime-lite/src/main/kotlin/Message.kt b/runtime-lite/src/jvmMain/kotlin/Message.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Message.kt rename to runtime-lite/src/jvmMain/kotlin/Message.kt diff --git a/runtime-lite/src/main/kotlin/Reader.kt b/runtime-lite/src/jvmMain/kotlin/Reader.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Reader.kt rename to runtime-lite/src/jvmMain/kotlin/Reader.kt diff --git a/runtime-lite/src/main/kotlin/Sizer.kt b/runtime-lite/src/jvmMain/kotlin/Sizer.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Sizer.kt rename to runtime-lite/src/jvmMain/kotlin/Sizer.kt diff --git a/runtime-lite/src/main/kotlin/UnknownField.kt b/runtime-lite/src/jvmMain/kotlin/UnknownField.kt similarity index 100% rename from runtime-lite/src/main/kotlin/UnknownField.kt rename to runtime-lite/src/jvmMain/kotlin/UnknownField.kt diff --git a/runtime-lite/src/main/kotlin/Unmarshaller.kt b/runtime-lite/src/jvmMain/kotlin/Unmarshaller.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Unmarshaller.kt rename to runtime-lite/src/jvmMain/kotlin/Unmarshaller.kt diff --git a/runtime-lite/src/main/kotlin/Utf8.kt b/runtime-lite/src/jvmMain/kotlin/Utf8.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Utf8.kt rename to runtime-lite/src/jvmMain/kotlin/Utf8.kt diff --git a/runtime-lite/src/main/kotlin/Writer.kt b/runtime-lite/src/jvmMain/kotlin/Writer.kt similarity index 100% rename from runtime-lite/src/main/kotlin/Writer.kt rename to runtime-lite/src/jvmMain/kotlin/Writer.kt diff --git a/runtime-lite/src/test/kotlin/MarshallerTest.kt b/runtime-lite/src/jvmTest/kotlin/MarshallerTest.kt similarity index 100% rename from runtime-lite/src/test/kotlin/MarshallerTest.kt rename to runtime-lite/src/jvmTest/kotlin/MarshallerTest.kt diff --git a/runtime-lite/src/test/kotlin/SizerTest.kt b/runtime-lite/src/jvmTest/kotlin/SizerTest.kt similarity index 100% rename from runtime-lite/src/test/kotlin/SizerTest.kt rename to runtime-lite/src/jvmTest/kotlin/SizerTest.kt diff --git a/runtime-lite/src/test/kotlin/UnmarshallerTest.kt b/runtime-lite/src/jvmTest/kotlin/UnmarshallerTest.kt similarity index 100% rename from runtime-lite/src/test/kotlin/UnmarshallerTest.kt rename to runtime-lite/src/jvmTest/kotlin/UnmarshallerTest.kt diff --git a/runtime-lite/src/test/kotlin/WriterTest.kt b/runtime-lite/src/jvmTest/kotlin/WriterTest.kt similarity index 100% rename from runtime-lite/src/test/kotlin/WriterTest.kt rename to runtime-lite/src/jvmTest/kotlin/WriterTest.kt diff --git a/runtime-lite/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/runtime-lite/src/jvmTest/resources/mockito-extensions/org.mockito.plugins.MockMaker similarity index 100% rename from runtime-lite/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker rename to runtime-lite/src/jvmTest/resources/mockito-extensions/org.mockito.plugins.MockMaker From 1d70d6bfa6cd6b64d25a7ee2cd6f339de554f126 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 18:51:12 +0900 Subject: [PATCH 03/15] Create Serializable interface --- .../src/commonMain/kotlin/jp/co/panpanini/Serializable.kt | 3 +++ .../src/jvmMain/kotlin/jp/co/panpanini/Serializable.kt | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Serializable.kt create mode 100644 runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Serializable.kt diff --git a/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Serializable.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Serializable.kt new file mode 100644 index 0000000..7376d5a --- /dev/null +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Serializable.kt @@ -0,0 +1,3 @@ +package jp.co.panpanini + +expect interface Serializable diff --git a/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Serializable.kt b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Serializable.kt new file mode 100644 index 0000000..4e6a806 --- /dev/null +++ b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Serializable.kt @@ -0,0 +1,3 @@ +package jp.co.panpanini + +actual typealias Serializable = java.io.Serializable From 7c009b584f1f4eb63c70c2eabba96429d358c15e Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 18:52:14 +0900 Subject: [PATCH 04/15] Move ByteArr to common sourceset --- .../kotlin => commonMain/kotlin/jp/co/panpanini}/ByteArr.kt | 2 -- 1 file changed, 2 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/ByteArr.kt (91%) diff --git a/runtime-lite/src/jvmMain/kotlin/ByteArr.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ByteArr.kt similarity index 91% rename from runtime-lite/src/jvmMain/kotlin/ByteArr.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ByteArr.kt index 5783620..cb6de62 100644 --- a/runtime-lite/src/jvmMain/kotlin/ByteArr.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ByteArr.kt @@ -1,7 +1,5 @@ package jp.co.panpanini -import java.io.Serializable - class ByteArr(val array: ByteArray = ByteArray(0)) : Serializable { override fun equals(other: Any?) = other is ByteArr && array.contentEquals(other.array) override fun hashCode() = array.contentHashCode() From 1b7ae22a638d4d0c3ca41400f4fb087ba3c78472 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 18:54:21 +0900 Subject: [PATCH 05/15] Move Utf8 to common sourceset --- .../{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Utf8.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Utf8.kt (100%) diff --git a/runtime-lite/src/jvmMain/kotlin/Utf8.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Utf8.kt similarity index 100% rename from runtime-lite/src/jvmMain/kotlin/Utf8.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Utf8.kt From 427de0da31b72a7df8b04253a0e18137877ba065 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:07:25 +0900 Subject: [PATCH 06/15] Move Writer to common sourceset --- .../kotlin => commonMain/kotlin/jp/co/panpanini}/Writer.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Writer.kt (100%) diff --git a/runtime-lite/src/jvmMain/kotlin/Writer.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Writer.kt similarity index 100% rename from runtime-lite/src/jvmMain/kotlin/Writer.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Writer.kt From 0b2b836fc33da4141dd67e86f7582d2d627861eb Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:09:59 +0900 Subject: [PATCH 07/15] Move Reader to common sourceset --- .../kotlin => commonMain/kotlin/jp/co/panpanini}/Reader.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Reader.kt (99%) diff --git a/runtime-lite/src/jvmMain/kotlin/Reader.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Reader.kt similarity index 99% rename from runtime-lite/src/jvmMain/kotlin/Reader.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Reader.kt index 8efdd76..45d4ce5 100644 --- a/runtime-lite/src/jvmMain/kotlin/Reader.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Reader.kt @@ -510,7 +510,7 @@ class Reader(private val byteArray: ByteArray) { * nothing is skipped. Otherwise, returns `true`. */ fun skipField(tag: Int): Boolean { - return when (com.google.protobuf.WireFormat.getTagWireType(tag)) { + return when (WireFormat.getTagWireType(tag)) { WireFormat.WIRETYPE_VARINT -> { skipRawVarint() true From 270ac5ed2e2c2454201e49d7cef4d11e883abd1b Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:28:20 +0900 Subject: [PATCH 08/15] Create ToByteArray expect/actual --- .../src/commonMain/kotlin/jp/co/panpanini/ToByteArray.kt | 3 +++ runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/toByteArray.kt | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ToByteArray.kt create mode 100644 runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/toByteArray.kt diff --git a/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ToByteArray.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ToByteArray.kt new file mode 100644 index 0000000..f51010f --- /dev/null +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/ToByteArray.kt @@ -0,0 +1,3 @@ +package jp.co.panpanini + +expect fun String.toByteArray(): ByteArray \ No newline at end of file diff --git a/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/toByteArray.kt b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/toByteArray.kt new file mode 100644 index 0000000..8a45b82 --- /dev/null +++ b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/toByteArray.kt @@ -0,0 +1,3 @@ +package jp.co.panpanini + +actual fun String.toByteArray(): ByteArray = this.toByteArray(Charsets.UTF_8) \ No newline at end of file From d1a5b288607ac7bd63f2a2312de20cea711b7256 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:28:31 +0900 Subject: [PATCH 09/15] Migrate Sizer to common sourceset --- .../kotlin/jp/co/panpanini}/Sizer.kt | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Sizer.kt (71%) diff --git a/runtime-lite/src/jvmMain/kotlin/Sizer.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Sizer.kt similarity index 71% rename from runtime-lite/src/jvmMain/kotlin/Sizer.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Sizer.kt index 5d8b281..b7d4198 100644 --- a/runtime-lite/src/jvmMain/kotlin/Sizer.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Sizer.kt @@ -1,6 +1,5 @@ package jp.co.panpanini -import com.google.protobuf.CodedOutputStream object Sizer { fun tagSize(fieldNum: Int): Int { @@ -48,7 +47,30 @@ object Sizer { fun int64Size(value: Long) = uInt64Size(value) - fun uInt64Size(value: Long) = CodedOutputStream.computeUInt64SizeNoTag(value) + fun uInt64Size(value: Long): Int { + var value = value + // handle two popular special cases up front ... + if (value and (0L.inv() shl 7) == 0L) { + return 1 + } + if (value < 0L) { + return 10 + } + // ... leaving us with 8 remaining, which we can divide and conquer + var n = 2 + if (value and (0L.inv() shl 35) != 0L) { + n += 4 + value = value ushr 28 + } + if (value and (0L.inv() shl 21) != 0L) { + n += 2 + value = value ushr 14 + } + if (value and (0L.inv() shl 14) != 0L) { + n += 1 + } + return n + } fun bytesSize(value: ByteArray) = uInt32Size(value.size) + value.size @@ -72,7 +94,7 @@ object Sizer { fun boolSize(value: Boolean) = 1 - fun stringSize(value: String) = CodedOutputStream.computeStringSizeNoTag(value) + fun stringSize(value: String) = try { Utf8.encodedLength(value) } catch(e: Exception) { value.toByteArray().size } private fun Int.zigZagEncode() = (this shl 1) xor (this shr 31) private fun Long.zigZagEncode() = (this shl 1) xor (this shr 63) From 77653bcdb572b942a8ba66d7025ec6edac26846d Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:29:14 +0900 Subject: [PATCH 10/15] move Marshaller to common sourceset --- .../kotlin => commonMain/kotlin/jp/co/panpanini}/Marshaller.kt | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Marshaller.kt (100%) diff --git a/runtime-lite/src/jvmMain/kotlin/Marshaller.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Marshaller.kt similarity index 100% rename from runtime-lite/src/jvmMain/kotlin/Marshaller.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Marshaller.kt From 0eddb4cfe0ab0b7c676d0ae48d3a64fb2d8ff5dd Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:29:33 +0900 Subject: [PATCH 11/15] move UnknownField to common sourceset --- .../kotlin/jp/co/panpanini}/UnknownField.kt | 3 --- 1 file changed, 3 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/UnknownField.kt (98%) diff --git a/runtime-lite/src/jvmMain/kotlin/UnknownField.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/UnknownField.kt similarity index 98% rename from runtime-lite/src/jvmMain/kotlin/UnknownField.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/UnknownField.kt index a484ef2..4cf8a5d 100644 --- a/runtime-lite/src/jvmMain/kotlin/UnknownField.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/UnknownField.kt @@ -1,8 +1,5 @@ package jp.co.panpanini -import java.io.Serializable - - data class UnknownField(val fieldNum: Int, val value: Value) : Serializable { constructor(fieldNum: Int, value: Long, fixed: Boolean = false) : this(fieldNum, if (fixed) Value.Fixed64(value) else Value.Varint(value)) From 3eacd8e9f6ef9ce233aaa981f75791f83c8bebf5 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:30:09 +0900 Subject: [PATCH 12/15] move Unmarshaller to common sourcset --- .../kotlin/jp/co/panpanini}/Unmarshaller.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Unmarshaller.kt (97%) diff --git a/runtime-lite/src/jvmMain/kotlin/Unmarshaller.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Unmarshaller.kt similarity index 97% rename from runtime-lite/src/jvmMain/kotlin/Unmarshaller.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Unmarshaller.kt index b262c2c..16a1eb6 100644 --- a/runtime-lite/src/jvmMain/kotlin/Unmarshaller.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Unmarshaller.kt @@ -54,7 +54,7 @@ class Unmarshaller(private val reader: Reader, private val discardUnknownFields: } val message = companion.protoUnmarshal(this) require(reader.isAtEnd) { - "Unable to completely read stream for message ${message::class.java}" + "Unable to completely read stream for message ${message::class}" } reader.popLimit(previousLimit) currentUnknownFields = unknownFields @@ -87,9 +87,9 @@ class Unmarshaller(private val reader: Reader, private val discardUnknownFields: } fun > readRepeatedMessage( - appendTo: List?, - companion: Message.Companion, - neverPacked: Boolean + appendTo: List?, + companion: Message.Companion, + neverPacked: Boolean ): List { return readRepeated(appendTo, neverPacked) { readMessage(companion) From 450ac2e58047e873ff4ecba2fafe8b0565d57d42 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 19:51:45 +0900 Subject: [PATCH 13/15] move Message to common sourceset --- .../kotlin/jp/co/panpanini}/Message.kt | 9 ++------- .../src/jvmMain/kotlin/jp/co/panpanini/Message.kt | 7 +++++++ 2 files changed, 9 insertions(+), 7 deletions(-) rename runtime-lite/src/{jvmMain/kotlin => commonMain/kotlin/jp/co/panpanini}/Message.kt (77%) create mode 100644 runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Message.kt diff --git a/runtime-lite/src/jvmMain/kotlin/Message.kt b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Message.kt similarity index 77% rename from runtime-lite/src/jvmMain/kotlin/Message.kt rename to runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Message.kt index d587747..6b04077 100644 --- a/runtime-lite/src/jvmMain/kotlin/Message.kt +++ b/runtime-lite/src/commonMain/kotlin/jp/co/panpanini/Message.kt @@ -1,17 +1,13 @@ package jp.co.panpanini -import java.io.InputStream -import java.io.Serializable - interface Message> : Serializable { fun protoUnmarshal(u: Unmarshaller): T fun protoUnmarshal(arr: ByteArray) = protoUnmarshal(Unmarshaller.fromByteArray(arr)) - fun protoUnmarshal(inputStream: InputStream) = protoUnmarshal(Unmarshaller(Reader(inputStream.readBytes()))) operator fun plus(other: T?): T val protoSize: Int fun protoMarshal(m: Marshaller) - fun protoMarshal(): ByteArray = Marshaller.allocate(protoSize).also(::protoMarshal).complete()!! + fun protoMarshal(): ByteArray = Marshaller.allocate(protoSize).also(::protoMarshal).complete() interface Companion> { fun protoUnmarshal(u: Unmarshaller): T @@ -25,5 +21,4 @@ interface Message> : Serializable { fun fromValue(value: Int): T } } -} - +} \ No newline at end of file diff --git a/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Message.kt b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Message.kt new file mode 100644 index 0000000..0473b96 --- /dev/null +++ b/runtime-lite/src/jvmMain/kotlin/jp/co/panpanini/Message.kt @@ -0,0 +1,7 @@ +package jp.co.panpanini + +import java.io.InputStream + +fun > Message.protoUnmarshal(inputStream: InputStream) = protoUnmarshal( + Unmarshaller(Reader(inputStream.readBytes())) +) \ No newline at end of file From 3c2846790c840728f8b7234128adaba42c60fa25 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 20:09:03 +0900 Subject: [PATCH 14/15] migrate library to runtime-lite --- library/build.gradle | 2 +- library/src/main/kotlin/jp/co/panpanini/MessageGenerator.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/library/build.gradle b/library/build.gradle index f1cfed1..a269b81 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -17,7 +17,7 @@ repositories { } dependencies { - compile project(':runtime') + compile project(':runtime-lite') compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" compile 'com.github.cretz.pbandk:protoc-gen-kotlin-jvm:0.3.0' compile 'com.squareup:kotlinpoet:1.0.1' diff --git a/library/src/main/kotlin/jp/co/panpanini/MessageGenerator.kt b/library/src/main/kotlin/jp/co/panpanini/MessageGenerator.kt index a26e019..a93e616 100644 --- a/library/src/main/kotlin/jp/co/panpanini/MessageGenerator.kt +++ b/library/src/main/kotlin/jp/co/panpanini/MessageGenerator.kt @@ -5,7 +5,6 @@ import com.improve_future.case_changer.toSnakeCase import com.squareup.kotlinpoet.* import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy import pbandk.gen.File -import java.io.Serializable class MessageGenerator(private val file: File, private val kotlinTypeMappings: Map) { From 6744c47f5fc4748e2d2ea1114db66f0013989b69 Mon Sep 17 00:00:00 2001 From: panini Date: Thu, 10 Dec 2020 20:12:08 +0900 Subject: [PATCH 15/15] Add sample module --- sample/README.md | 6 +++++ sample/build.gradle | 29 ++++++++++++++++++++++++ sample/src/main/kotlin/Sample.kt | 38 ++++++++++++++++++++++++++++++++ sample/src/main/proto/user.proto | 14 ++++++++++++ settings.gradle | 2 +- 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 sample/README.md create mode 100644 sample/build.gradle create mode 100644 sample/src/main/kotlin/Sample.kt create mode 100644 sample/src/main/proto/user.proto diff --git a/sample/README.md b/sample/README.md new file mode 100644 index 0000000..73034f3 --- /dev/null +++ b/sample/README.md @@ -0,0 +1,6 @@ +# Sample + +A sample project to show how to use the protok library to generate Kotlin classes and how to use the generated classes themselves. + +## usage +Use the gradle task `generateProto` to generate the required Kotlin protocol buffer implementations. This expects protoc to be installed and available on the PATH. \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle new file mode 100644 index 0000000..4a38bf9 --- /dev/null +++ b/sample/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'java' + id 'org.jetbrains.kotlin.jvm' +} + +version '1.0.0' + +repositories { + mavenCentral() +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" + testCompile group: 'junit', name: 'junit', version: '4.12' + + implementation project(":runtime-lite") +} + +task generateProto(type: Exec) { + dependsOn(":library:installDist") + commandLine( + 'protoc', + "--plugin=protoc-gen-custom=${rootDir}/library/build/install/protoc-gen-kotlin/bin/protoc-gen-kotlin", + "--custom_out=${projectDir}/src/main/kotlin/", + "--proto_path=${projectDir}/src/main/proto/", + "user.proto" + ) + +} \ No newline at end of file diff --git a/sample/src/main/kotlin/Sample.kt b/sample/src/main/kotlin/Sample.kt new file mode 100644 index 0000000..e902537 --- /dev/null +++ b/sample/src/main/kotlin/Sample.kt @@ -0,0 +1,38 @@ +package main.kotlin + +class Sample(private val name: String) { + companion object { + private var LATEST_ID = 1 + } + + fun generateUser(): User { + return User.with { + id = LATEST_ID++ + name = this@Sample.name + programingLanguages = listOf( + ProgramingLanguage.with { + name = "Kotlin" + yearsLearning(5) + }, + ProgramingLanguage.with { + name = "Java" + yearsLearning(10) + } + ) + } + } + +} + + +fun main() { + val sample = Sample("Panini") + + val user = sample.generateUser() + + println(user) + println(user.name) + user.programingLanguages.forEach { + println("learned ${it.name} for ${it.yearsLearning} years") + } +} \ No newline at end of file diff --git a/sample/src/main/proto/user.proto b/sample/src/main/proto/user.proto new file mode 100644 index 0000000..5cd47b0 --- /dev/null +++ b/sample/src/main/proto/user.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package proto; + +message User { + int32 id = 1; + string name = 2; + repeated ProgramingLanguage programingLanguages = 3; +} + +message ProgramingLanguage { + string name = 1; + int32 yearsLearning = 2; +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 280728b..e03c584 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,3 @@ -include ':library', ':retrofit-converter', ':runtime', ':runtime-lite', ':retrofit-converter-lite' +include ':library', ':retrofit-converter', ':runtime', ':runtime-lite', ':retrofit-converter-lite',':sample' rootProject.name = 'protok'