Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Kotlin] Control the generation of reflection with --reflect-names #7775

Merged
merged 3 commits into from
Jan 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions samples/SampleBinary.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import MyGame.Sample.Weapon

import com.google.flatbuffers.FlatBufferBuilder

@kotlin.ExperimentalUnsignedTypes
class SampleBinary {

companion object {
Expand All @@ -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)
Expand Down Expand Up @@ -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.
Expand Down
7 changes: 6 additions & 1 deletion src/idl_gen_kotlin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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();
Expand Down Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions tests/DictionaryLookup/LongFloatEntry.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/DictionaryLookup/LongFloatMap.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Ability.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Any.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package MyGame.Example

@Suppress("unused")
@kotlin.ExperimentalUnsignedTypes
class Any_ private constructor() {
companion object {
const val NONE: UByte = 0u
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/AnyAmbiguousAliases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package MyGame.Example

@Suppress("unused")
@kotlin.ExperimentalUnsignedTypes
class AnyAmbiguousAliases private constructor() {
companion object {
const val NONE: UByte = 0u
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/AnyUniqueAliases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package MyGame.Example

@Suppress("unused")
@kotlin.ExperimentalUnsignedTypes
class AnyUniqueAliases private constructor() {
companion object {
const val NONE: UByte = 0u
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Color.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/LongEnum.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package MyGame.Example

@Suppress("unused")
@kotlin.ExperimentalUnsignedTypes
class LongEnum private constructor() {
companion object {
const val LongOne: ULong = 2UL
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Monster.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Race.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package MyGame.Example

@Suppress("unused")
@kotlin.ExperimentalUnsignedTypes
class Race private constructor() {
companion object {
const val None: Byte = -1
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Referrable.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Stat.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/StructOfStructs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/StructOfStructsOfStructs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Test.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/TestSimpleTableWithEnum.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/TypeAliases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example/Vec3.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/Example2/Monster.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/InParentNamespace.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/MyGame/MonsterExtra.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
32 changes: 32 additions & 0 deletions tests/flatc/flatc_kotlin_tests.py
Original file line number Diff line number Diff line change
@@ -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]')
3 changes: 2 additions & 1 deletion tests/flatc/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@

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))
Expand Down
3 changes: 1 addition & 2 deletions tests/optional_scalars/OptionalByte.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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]
}
}
1 change: 1 addition & 0 deletions tests/optional_scalars/ScalarStuff.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/Attacker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/BookReader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/Character.kt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/FallingTub.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/Gadget.kt
Original file line number Diff line number Diff line change
@@ -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
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/HandFan.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/Movie.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions tests/union_vector/Rapunzel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down