diff --git a/samples/SampleBinary.kt b/samples/SampleBinary.kt index 2974f36a9..04a749c75 100644 --- a/samples/SampleBinary.kt +++ b/samples/SampleBinary.kt @@ -24,6 +24,7 @@ import MyGame.Sample.Weapon import com.google.flatbuffers.FlatBufferBuilder +@kotlin.ExperimentalUnsignedTypes class SampleBinary { companion object { @@ -45,7 +46,7 @@ class SampleBinary { // Serialize the FlatBuffer data. val name = builder.createString("Orc") - val treasure = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) + val treasure = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9).asUByteArray() val inv = Monster.createInventoryVector(builder, treasure) val weapons = Monster.createWeaponsVector(builder, weaps) val pos = Vec3.createVec3(builder, 1.0f, 2.0f, 3.0f) @@ -85,7 +86,7 @@ class SampleBinary { // Get and test the `inventory` FlatBuffer `vector`. for (i in 0 until monster.inventoryLength) { - assert(monster.inventory(i) == i.toByte().toInt()) + assert(monster.inventory(i) == i.toUByte()) } // Get and test the `weapons` FlatBuffer `vector` of `table`s. diff --git a/src/idl_gen_kotlin.cpp b/src/idl_gen_kotlin.cpp index b19f2a3d5..2cbed6523 100644 --- a/src/idl_gen_kotlin.cpp +++ b/src/idl_gen_kotlin.cpp @@ -287,6 +287,7 @@ class KotlinGenerator : public BaseGenerator { GenerateComment(enum_def.doc_comment, writer, &comment_config); writer += "@Suppress(\"unused\")"; + writer += "@kotlin.ExperimentalUnsignedTypes"; writer += "class " + namer_.Type(enum_def) + " private constructor() {"; writer.IncrementIdentLevel(); @@ -313,7 +314,10 @@ class KotlinGenerator : public BaseGenerator { // Average distance between values above which we consider a table // "too sparse". Change at will. static const uint64_t kMaxSparseness = 5; - if (range / static_cast(enum_def.size()) < kMaxSparseness) { + bool generate_names = + range / static_cast(enum_def.size()) < kMaxSparseness && + parser_.opts.mini_reflect == IDLOptions::kTypesAndNames; + if (generate_names) { GeneratePropertyOneLine(writer, "names", "Array", [&]() { writer += "arrayOf(\\"; auto val = enum_def.Vals().front(); @@ -489,6 +493,7 @@ class KotlinGenerator : public BaseGenerator { writer.SetValue("superclass", fixed ? "Struct" : "Table"); writer += "@Suppress(\"unused\")"; + writer += "@kotlin.ExperimentalUnsignedTypes"; writer += "class {{struct_name}} : {{superclass}}() {\n"; writer.IncrementIdentLevel(); diff --git a/tests/DictionaryLookup/LongFloatEntry.kt b/tests/DictionaryLookup/LongFloatEntry.kt index d49afa450..5ba11bfd5 100644 --- a/tests/DictionaryLookup/LongFloatEntry.kt +++ b/tests/DictionaryLookup/LongFloatEntry.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class LongFloatEntry : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/DictionaryLookup/LongFloatMap.kt b/tests/DictionaryLookup/LongFloatMap.kt index bc1541f47..bb0cd3e47 100644 --- a/tests/DictionaryLookup/LongFloatMap.kt +++ b/tests/DictionaryLookup/LongFloatMap.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class LongFloatMap : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Ability.kt b/tests/MyGame/Example/Ability.kt index dc2b0b864..a3e17bef1 100644 --- a/tests/MyGame/Example/Ability.kt +++ b/tests/MyGame/Example/Ability.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Ability : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Any.kt b/tests/MyGame/Example/Any.kt index 5a7ecf765..8818c3903 100644 --- a/tests/MyGame/Example/Any.kt +++ b/tests/MyGame/Example/Any.kt @@ -3,6 +3,7 @@ package MyGame.Example @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Any_ private constructor() { companion object { const val NONE: UByte = 0u diff --git a/tests/MyGame/Example/AnyAmbiguousAliases.kt b/tests/MyGame/Example/AnyAmbiguousAliases.kt index c38923b9e..404309654 100644 --- a/tests/MyGame/Example/AnyAmbiguousAliases.kt +++ b/tests/MyGame/Example/AnyAmbiguousAliases.kt @@ -3,6 +3,7 @@ package MyGame.Example @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class AnyAmbiguousAliases private constructor() { companion object { const val NONE: UByte = 0u diff --git a/tests/MyGame/Example/AnyUniqueAliases.kt b/tests/MyGame/Example/AnyUniqueAliases.kt index 2db45a6c2..8be0cc826 100644 --- a/tests/MyGame/Example/AnyUniqueAliases.kt +++ b/tests/MyGame/Example/AnyUniqueAliases.kt @@ -3,6 +3,7 @@ package MyGame.Example @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class AnyUniqueAliases private constructor() { companion object { const val NONE: UByte = 0u diff --git a/tests/MyGame/Example/Color.kt b/tests/MyGame/Example/Color.kt index 0af56e1ee..61a313e63 100644 --- a/tests/MyGame/Example/Color.kt +++ b/tests/MyGame/Example/Color.kt @@ -6,6 +6,7 @@ package MyGame.Example * Composite components of Monster color. */ @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Color private constructor() { companion object { const val Red: UByte = 1u diff --git a/tests/MyGame/Example/LongEnum.kt b/tests/MyGame/Example/LongEnum.kt index ecb5aabf9..328c9c4f2 100644 --- a/tests/MyGame/Example/LongEnum.kt +++ b/tests/MyGame/Example/LongEnum.kt @@ -3,6 +3,7 @@ package MyGame.Example @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class LongEnum private constructor() { companion object { const val LongOne: ULong = 2UL diff --git a/tests/MyGame/Example/Monster.kt b/tests/MyGame/Example/Monster.kt index be60c702f..9d547fe49 100644 --- a/tests/MyGame/Example/Monster.kt +++ b/tests/MyGame/Example/Monster.kt @@ -22,6 +22,7 @@ import kotlin.math.sign * an example documentation comment: "monster object" */ @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Monster : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Race.kt b/tests/MyGame/Example/Race.kt index 6f770a3c9..9cf885723 100644 --- a/tests/MyGame/Example/Race.kt +++ b/tests/MyGame/Example/Race.kt @@ -3,6 +3,7 @@ package MyGame.Example @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Race private constructor() { companion object { const val None: Byte = -1 diff --git a/tests/MyGame/Example/Referrable.kt b/tests/MyGame/Example/Referrable.kt index 819af3707..9d4d2e6a9 100644 --- a/tests/MyGame/Example/Referrable.kt +++ b/tests/MyGame/Example/Referrable.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Referrable : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Stat.kt b/tests/MyGame/Example/Stat.kt index 796868168..752d7a2a0 100644 --- a/tests/MyGame/Example/Stat.kt +++ b/tests/MyGame/Example/Stat.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Stat : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/StructOfStructs.kt b/tests/MyGame/Example/StructOfStructs.kt index e7a27a231..89fd831f6 100644 --- a/tests/MyGame/Example/StructOfStructs.kt +++ b/tests/MyGame/Example/StructOfStructs.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class StructOfStructs : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/StructOfStructsOfStructs.kt b/tests/MyGame/Example/StructOfStructsOfStructs.kt index 5fb1a1ef5..24bd1cfad 100644 --- a/tests/MyGame/Example/StructOfStructsOfStructs.kt +++ b/tests/MyGame/Example/StructOfStructsOfStructs.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class StructOfStructsOfStructs : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Test.kt b/tests/MyGame/Example/Test.kt index c2ce96e9b..c910b3e04 100644 --- a/tests/MyGame/Example/Test.kt +++ b/tests/MyGame/Example/Test.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Test : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/TestSimpleTableWithEnum.kt b/tests/MyGame/Example/TestSimpleTableWithEnum.kt index fec981f1e..e2992993f 100644 --- a/tests/MyGame/Example/TestSimpleTableWithEnum.kt +++ b/tests/MyGame/Example/TestSimpleTableWithEnum.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class TestSimpleTableWithEnum : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/TypeAliases.kt b/tests/MyGame/Example/TypeAliases.kt index 6d77d9595..cd7c78fe5 100644 --- a/tests/MyGame/Example/TypeAliases.kt +++ b/tests/MyGame/Example/TypeAliases.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class TypeAliases : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example/Vec3.kt b/tests/MyGame/Example/Vec3.kt index 9e1f89ed8..59a431d7a 100644 --- a/tests/MyGame/Example/Vec3.kt +++ b/tests/MyGame/Example/Vec3.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Vec3 : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/Example2/Monster.kt b/tests/MyGame/Example2/Monster.kt index 8455c0a22..22ccf279f 100644 --- a/tests/MyGame/Example2/Monster.kt +++ b/tests/MyGame/Example2/Monster.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Monster : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/InParentNamespace.kt b/tests/MyGame/InParentNamespace.kt index 84a8cff4c..acea6920c 100644 --- a/tests/MyGame/InParentNamespace.kt +++ b/tests/MyGame/InParentNamespace.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class InParentNamespace : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/MyGame/MonsterExtra.kt b/tests/MyGame/MonsterExtra.kt index d1e75a289..e150e6d80 100644 --- a/tests/MyGame/MonsterExtra.kt +++ b/tests/MyGame/MonsterExtra.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class MonsterExtra : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/flatc/flatc_kotlin_tests.py b/tests/flatc/flatc_kotlin_tests.py new file mode 100644 index 000000000..bca3cba33 --- /dev/null +++ b/tests/flatc/flatc_kotlin_tests.py @@ -0,0 +1,32 @@ +# Copyright 2022 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from flatc_test import * + + +class KotlinTests: + + def EnumValAttributes(self): + flatc(["--kotlin", "enum_val_attributes.fbs"]) + + subject = assert_file_exists("ValAttributes.kt") + assert_file_doesnt_contains(subject, 'val names : Array = arrayOf("Val1", "Val2", "Val3")') + assert_file_doesnt_contains(subject, 'fun name(e: Int) : String = names[e]') + + def EnumValAttributes_ReflectNames(self): + flatc(["--kotlin", "--reflect-names", "enum_val_attributes.fbs"]) + + subject = assert_file_exists("ValAttributes.kt") + assert_file_contains(subject, 'val names : Array = arrayOf("Val1", "Val2", "Val3")') + assert_file_contains(subject, 'fun name(e: Int) : String = names[e]') diff --git a/tests/flatc/main.py b/tests/flatc/main.py index 3bc231848..b296c475f 100755 --- a/tests/flatc/main.py +++ b/tests/flatc/main.py @@ -18,10 +18,11 @@ import sys from flatc_test import run_all from flatc_cpp_tests import CppTests +from flatc_kotlin_tests import KotlinTests from flatc_ts_tests import TsTests from flatc_schema_tests import SchemaTests -passing, failing = run_all(CppTests, TsTests, SchemaTests) +passing, failing = run_all(CppTests, KotlinTests, TsTests, SchemaTests) print("") print("{0} of {1} tests passed".format(passing, passing + failing)) diff --git a/tests/optional_scalars/OptionalByte.kt b/tests/optional_scalars/OptionalByte.kt index afb36909c..1379cd105 100644 --- a/tests/optional_scalars/OptionalByte.kt +++ b/tests/optional_scalars/OptionalByte.kt @@ -3,12 +3,11 @@ package optional_scalars @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class OptionalByte private constructor() { companion object { const val None: Byte = 0 const val One: Byte = 1 const val Two: Byte = 2 - val names : Array = arrayOf("None", "One", "Two") - fun name(e: Int) : String = names[e] } } diff --git a/tests/optional_scalars/ScalarStuff.kt b/tests/optional_scalars/ScalarStuff.kt index bc3ef4bb5..ba498ed74 100644 --- a/tests/optional_scalars/ScalarStuff.kt +++ b/tests/optional_scalars/ScalarStuff.kt @@ -19,6 +19,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class ScalarStuff : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/Attacker.kt b/tests/union_vector/Attacker.kt index 6823eed15..f71a6c052 100644 --- a/tests/union_vector/Attacker.kt +++ b/tests/union_vector/Attacker.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Attacker : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/BookReader.kt b/tests/union_vector/BookReader.kt index 87dff7328..ddeb09dda 100644 --- a/tests/union_vector/BookReader.kt +++ b/tests/union_vector/BookReader.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class BookReader : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/Character.kt b/tests/union_vector/Character.kt index 2e80a35f1..302b7e50f 100644 --- a/tests/union_vector/Character.kt +++ b/tests/union_vector/Character.kt @@ -1,6 +1,7 @@ // automatically generated by the FlatBuffers compiler, do not modify @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Character_ private constructor() { companion object { const val NONE: UByte = 0u diff --git a/tests/union_vector/FallingTub.kt b/tests/union_vector/FallingTub.kt index 43e477a39..0f167250a 100644 --- a/tests/union_vector/FallingTub.kt +++ b/tests/union_vector/FallingTub.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class FallingTub : Struct() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/Gadget.kt b/tests/union_vector/Gadget.kt index 4fb3b1007..c537a4f30 100644 --- a/tests/union_vector/Gadget.kt +++ b/tests/union_vector/Gadget.kt @@ -1,6 +1,7 @@ // automatically generated by the FlatBuffers compiler, do not modify @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Gadget private constructor() { companion object { const val NONE: UByte = 0u diff --git a/tests/union_vector/HandFan.kt b/tests/union_vector/HandFan.kt index debcb4c5c..d60ba2840 100644 --- a/tests/union_vector/HandFan.kt +++ b/tests/union_vector/HandFan.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class HandFan : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/Movie.kt b/tests/union_vector/Movie.kt index ee07eef6a..8d3e4106e 100644 --- a/tests/union_vector/Movie.kt +++ b/tests/union_vector/Movie.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Movie : Table() { fun __init(_i: Int, _bb: ByteBuffer) { diff --git a/tests/union_vector/Rapunzel.kt b/tests/union_vector/Rapunzel.kt index e3296e193..d51402a25 100644 --- a/tests/union_vector/Rapunzel.kt +++ b/tests/union_vector/Rapunzel.kt @@ -17,6 +17,7 @@ import java.nio.ByteOrder import kotlin.math.sign @Suppress("unused") +@kotlin.ExperimentalUnsignedTypes class Rapunzel : Struct() { fun __init(_i: Int, _bb: ByteBuffer) {