diff options
author | Anton Bobukh <abobukh@google.com> | 2023-01-10 10:03:39 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-10 10:03:39 -0800 |
commit | b50b6be60a3647b5a320498b9534b6f74450c2b1 (patch) | |
tree | e20789a54583e5eb78e579115b49cd828af69e78 | |
parent | 7bf83f5ea06149866193163b29794ca80133e14c (diff) | |
download | flatbuffers-b50b6be60a3647b5a320498b9534b6f74450c2b1.tar.gz flatbuffers-b50b6be60a3647b5a320498b9534b6f74450c2b1.tar.bz2 flatbuffers-b50b6be60a3647b5a320498b9534b6f74450c2b1.zip |
[Kotlin] Control the generation of reflection with --reflect-names (#7775)
* [Kotlin] Control the generation of reflection with --reflect-names.
Tested:
```
$ cmake -G "Unix Makefiles" && make && ./tests/flatc/main.py
...
KotlinTests.EnumValAttributes
[PASSED]
KotlinTests.EnumValAttributes_ReflectNames
[PASSED]
KotlinTests: 2 of 2 passsed
...
35 of 35 tests passed
```
* [Kotlin] Fix SampleBinary by converting Byte to UByte for ubyte fields.
* [Kotlin] Annotate all generated classes with kotlin.ExperimentalUnsignedTypes.
35 files changed, 74 insertions, 6 deletions
diff --git a/samples/SampleBinary.kt b/samples/SampleBinary.kt index 2974f36a..04a749c7 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 b19f2a3d..2cbed652 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<uint64_t>(enum_def.size()) < kMaxSparseness) { + bool generate_names = + range / static_cast<uint64_t>(enum_def.size()) < kMaxSparseness && + parser_.opts.mini_reflect == IDLOptions::kTypesAndNames; + if (generate_names) { GeneratePropertyOneLine(writer, "names", "Array<String>", [&]() { 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 d49afa45..5ba11bfd 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 bc1541f4..bb0cd3e4 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 dc2b0b86..a3e17bef 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 5a7ecf76..8818c390 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 c38923b9..40430965 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 2db45a6c..8be0cc82 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 0af56e1e..61a313e6 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 ecb5aabf..328c9c4f 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 be60c702..9d547fe4 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 6f770a3c..9cf88572 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 819af370..9d4d2e6a 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 79686816..752d7a2a 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 e7a27a23..89fd831f 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 5fb1a1ef..24bd1cfa 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 c2ce96e9..c910b3e0 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 fec981f1..e2992993 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 6d77d959..cd7c78fe 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 9e1f89ed..59a431d7 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 8455c0a2..22ccf279 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 84a8cff4..acea6920 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 d1e75a28..e150e6d8 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 00000000..bca3cba3 --- /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<String> = 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<String> = 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 3bc23184..b296c475 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 afb36909..1379cd10 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<String> = 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 bc3ef4bb..ba498ed7 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 6823eed1..f71a6c05 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 87dff732..ddeb09dd 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 2e80a35f..302b7e50 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 43e477a3..0f167250 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 4fb3b100..c537a4f3 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 debcb4c5..d60ba284 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 ee07eef6..8d3e4106 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 e3296e19..d51402a2 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) { |