Kotlin: Executors now appear at the end of the non-default parameters
Bug: b/453988017
Test: ./gradew connectedAndroidTest
Change-Id: Ice6284636e9d7d687c0885f26a40b42ad77e7631
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/268614
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Jim Blackler <jimblackler@google.com>
Reviewed-by: Nikita Gupta <nikigupta@google.com>
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index d2aa2b6..df694ff 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -804,12 +804,28 @@
customize_enums = customize_api["enums"]
def kotlin_record_members(members):
- # Members are sorted so that those with default parameters appear after those without.
- for member in sorted(members,
+ # Members are sorted in the following order.
+ # 1. members with no default value (except callbacks).
+ # 2. members with default values.
+ # 3. callbacks.
+ for member in sorted(kotlin_record_members_unsorted(members),
key=lambda arg: kotlin_default(arg) is not None):
- if member.type.category == 'callback info':
- continue
+ yield member
+ # Callbacks always go at the end.
+ for member in members:
+ if member.type.category == 'callback info':
+ for callback_info_member in member.type.members:
+ if callback_info_member.type.category == 'callback function':
+ # We give the callback function a new name based on the callback info.
+ name = member.name.get().removesuffix(' info')
+ function_member = deepcopy(callback_info_member)
+ function_member.name = Name(name)
+ yield function_member
+ continue
+
+ def kotlin_record_members_unsorted(members):
+ for member in members:
# length parameters are omitted because Kotlin containers have 'length'.
if member in [m.length for m in members]:
continue
@@ -823,25 +839,17 @@
if member.annotation == '*' and member.length == 'constant':
continue
- yield member
-
- # Callbacks appear at the end of the list.
- for member in members:
- # Partially inline away 'callback info'.
+ # We replace the callback info with an executor here.
if member.type.category == 'callback info':
- # We replace the callback info with 1. an executor...
name = member.name.get().removesuffix(' info')
yield RecordMember(
Name(name + ' executor'),
Type('java.util.concurrent.Executor',
{'category': 'kotlin type'}), None, {})
- for callback_info_member in member.type.members:
- if callback_info_member.type.category == 'callback function':
- # ... and 2. the callback function, with a new name based on the callback
- # info.
- function_member = deepcopy(callback_info_member)
- function_member.name = Name(name)
- yield function_member
+ continue
+
+ yield member
+
# Calculate if we should, and can, provide a Kotlin default value for a given argument.
# This will affect its order in the method parameter and structure field lists.