From 2af51674ca3b7d9f0040606eedc22b14786f012b Mon Sep 17 00:00:00 2001 From: dsavvinov Date: Mon, 8 Aug 2016 12:36:07 +0300 Subject: [PATCH] Protobuf: rewrited ProtoKot runtime library, now CodedStreams use ByteArray as an argument of constructor. Removed exceptions --- .../google/protobuf/compiler/kotlin/protoc | Bin 114448 -> 114448 bytes proto/compiler/src/CodedInputStream.kt | 40 ++++++++++-------- proto/compiler/src/CodedOutputStream.kt | 11 ++++- proto/compiler/src/KotlinInputStream.kt | 16 +++++++ proto/compiler/src/KotlinOutputStream.kt | 18 ++++++++ proto/compiler/src/WireFormat.kt | 2 +- proto/compiler/src/WireType.kt | 9 ++-- 7 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 proto/compiler/src/KotlinInputStream.kt create mode 100644 proto/compiler/src/KotlinOutputStream.kt diff --git a/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc b/proto/compiler/google/src/google/protobuf/compiler/kotlin/protoc index 62ab8a4116418de7795aa8988b7332e66fad47b1..0204430d3ff744cedf534b26532afbacf7293076 100755 GIT binary patch delta 23484 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 IBh|J0e+XdFsQ>@~ delta 22101 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 false 1 -> true - else -> throw InvalidProtocolBufferException("Expected boolean-encoding (1 or 0), got $readValue") + else -> { + errorMessage = "Expected boolean-encoding (1 or 0), got $readValue" + false + } } return boolValue } @@ -181,14 +185,18 @@ class CodedInputStream(input: java.io.InputStream) { expectedWireType: WireType, actualWireType: WireType) { if (expectedFieldNumber != actualFieldNumber) { - throw InvalidProtocolBufferException( + errorMessage = "Error in protocol format: \n " + - "Expected field number ${expectedFieldNumber}, got ${actualFieldNumber}") + "Expected field number ${expectedFieldNumber}, got ${actualFieldNumber}" + println(errorMessage) + return } if (expectedWireType != actualWireType) { - throw InvalidProtocolBufferException("Error in protocol format: \n " + - "Expected ${expectedWireType.name} type, got ${actualWireType.name}") + errorMessage = "Error in protocol format: \n " + + "Expected ${expectedWireType.name} type, got ${actualWireType.name}" + println(errorMessage) + return } } @@ -219,7 +227,7 @@ class CodedInputStream(input: java.io.InputStream) { fun readRawBytes(count: Int): ByteArray { val ba = ByteArray(count) for (i in 0..(count - 1)) { - ba[i] = bufferedInput.read().toByte() + ba[i] = inputStream.read().toByte() } return ba } @@ -231,7 +239,8 @@ class CodedInputStream(input: java.io.InputStream) { } val tag = readInt32NoTag() if (tag == 0) { // if we somehow had read 0-tag, then message is corrupted - throw InvalidProtocolBufferException("Invalid tag 0") + errorMessage = "Invalid tag 0" + return 0 } val actualFieldNumber = WireFormat.getTagFieldNumber(tag) @@ -246,7 +255,7 @@ class CodedInputStream(input: java.io.InputStream) { var result: Int = 0 var step: Int = 0 while (!done) { - val byte: Int = bufferedInput.read() + val byte: Int = inputStream.read().toInt() result = result or ( (byte and VARINT_INFO_BITS_MASK) @@ -267,7 +276,7 @@ class CodedInputStream(input: java.io.InputStream) { var result: Long = 0 var step: Int = 0 while (!done) { - val byte: Int = bufferedInput.read() + val byte: Int = inputStream.read().toInt() result = result or ( (byte and VARINT_INFO_BITS_MASK).toLong() @@ -275,7 +284,7 @@ class CodedInputStream(input: java.io.InputStream) { (VARINT_INFO_BITS_COUNT * step) ) step++ - if ((byte and VARINT_UTIL_BIT_MASK) == 0 || byte == -1) { + if ((byte and VARINT_UTIL_BIT_MASK) == 0 /* || byte == -1 ???? */) { done = true } } @@ -296,10 +305,7 @@ class CodedInputStream(input: java.io.InputStream) { // checks if at least one more byte can be read from underlying input stream fun isAtEnd(): Boolean { - bufferedInput.mark(1) - val byte = bufferedInput.read() - bufferedInput.reset() - return byte == -1 + return inputStream.isAtEnd() } } diff --git a/proto/compiler/src/CodedOutputStream.kt b/proto/compiler/src/CodedOutputStream.kt index 646189cfd8f..19a490ff539 100644 --- a/proto/compiler/src/CodedOutputStream.kt +++ b/proto/compiler/src/CodedOutputStream.kt @@ -8,7 +8,13 @@ import WireFormat.VARINT_UTIL_BIT_MASK * Created by user on 7/6/16. */ -class CodedOutputStream(val output: java.io.OutputStream) { +class CodedOutputStream(val buffer: ByteArray) { + val output = KotlinOutputStream(buffer) + + fun toByteArray(): ByteArray { + return buffer + } + fun writeTag(fieldNumber: Int, type: WireType) { val tag = (fieldNumber shl 3) or type.ordinal writeInt32NoTag(tag) @@ -156,6 +162,9 @@ class CodedOutputStream(val output: java.io.OutputStream) { fun writeBytes(fieldNumber: Int, value: ByteArray?) { value ?: return + if (value.size == 0) { + return + } writeTag(fieldNumber, WireType.LENGTH_DELIMITED) writeBytesNoTag(value) } diff --git a/proto/compiler/src/KotlinInputStream.kt b/proto/compiler/src/KotlinInputStream.kt new file mode 100644 index 00000000000..89a00d8a1bb --- /dev/null +++ b/proto/compiler/src/KotlinInputStream.kt @@ -0,0 +1,16 @@ +/** + * Created by user on 8/8/16. + */ + +class KotlinInputStream(val buffer: ByteArray) { + var pos = 0 + + fun read(): Byte { + pos += 1 + return buffer[pos - 1] + } + + fun isAtEnd(): Boolean { + return pos >= buffer.size + } +} \ No newline at end of file diff --git a/proto/compiler/src/KotlinOutputStream.kt b/proto/compiler/src/KotlinOutputStream.kt new file mode 100644 index 00000000000..01e0ed2a410 --- /dev/null +++ b/proto/compiler/src/KotlinOutputStream.kt @@ -0,0 +1,18 @@ +/** + * Created by user on 8/8/16. + */ + +class KotlinOutputStream(val buffer: ByteArray) { + var pos = 0 + + fun write (data: ByteArray) { + write(data, 0, data.size) + } + + fun write (data: ByteArray, begin: Int, size: Int) { + for (i in begin..(begin + size - 1)) { + buffer[pos] = data[i] + pos += 1 + } + } +} diff --git a/proto/compiler/src/WireFormat.kt b/proto/compiler/src/WireFormat.kt index f81259f7496..0f2f3b685f5 100644 --- a/proto/compiler/src/WireFormat.kt +++ b/proto/compiler/src/WireFormat.kt @@ -14,7 +14,7 @@ object WireFormat { val FIXED_64_BYTE_SIZE: Int = 8 fun getTagWireType(tag: Int): WireType { - return WireType from (tag and TAG_TYPE_MASK).toByte() + return WireType.from ( (tag and TAG_TYPE_MASK).toByte()) } fun getTagFieldNumber(tag: Int): Int { diff --git a/proto/compiler/src/WireType.kt b/proto/compiler/src/WireType.kt index 6cc55da3f42..edc02c60414 100644 --- a/proto/compiler/src/WireType.kt +++ b/proto/compiler/src/WireType.kt @@ -1,7 +1,7 @@ /** * Created by Dmitry Savvinov on 7/6/16. * Enum for possible WireTypes. - * See details at [official Google reference]()https://developers.google.com/protocol-buffers/docs/encoding#structure) + * See details at [official Google reference](https://developers.google.com/protocol-buffers/docs/encoding#structure) */ enum class WireType(val id: Int) { @@ -10,10 +10,11 @@ enum class WireType(val id: Int) { LENGTH_DELIMITED(2), // string, bytes, embedded messages, packed repeated fields START_GROUP(3), // groups (deprecated) END_GROUP(4), // groups (deprecated) - FIX_32(5); // fixed32, sfixed32, float + FIX_32(5), // fixed32, sfixed32, float + UNDEFINED(6); // indicates error when parsing from Int companion object { - infix fun from (value: Byte): WireType { + fun from (value: Byte): WireType { return when (value) { 0.toByte() -> VARINT 1.toByte() -> FIX_64 @@ -21,7 +22,7 @@ enum class WireType(val id: Int) { 3.toByte() -> START_GROUP 4.toByte() -> END_GROUP 5.toByte() -> FIX_32 - else -> throw IllegalArgumentException() + else -> UNDEFINED } } }