Kotlin: async adapters included directly into objects.

The wrapper class is removed.

Test: ./gradlew connectedAndroidTest
Bug: b/453645007
Change-Id: I48b243ad918ab35e5839b408b138089949afa5f2
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/270454
Commit-Queue: Jim Blackler <jimblackler@google.com>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py
index ef94071..96782dd 100644
--- a/generator/dawn_json_generator.py
+++ b/generator/dawn_json_generator.py
@@ -1734,6 +1734,7 @@
             jni_name = params_kotlin['jni_name']
 
             imported_templates += [
+                "art/api_kotlin_async_helpers.kt",
                 "art/api_kotlin_types.kt",
             ]
 
@@ -1772,10 +1773,6 @@
                 FileRender('art/api_kotlin_functions.kt',
                            'java/' + kt_file_path + '/Functions.kt',
                            [RENDER_PARAMS_BASE, params_kotlin]))
-            renders.append(
-                FileRender('art/api_kotlin_async_helpers.kt',
-                           'java/' + kt_file_path + '/AsyncHelpers.kt',
-                           [RENDER_PARAMS_BASE, params_kotlin]))
 
             for enum in (params_kotlin['by_category']['bitmask'] +
                          params_kotlin['by_category']['enum']):
diff --git a/generator/templates/art/api_kotlin_async_helpers.kt b/generator/templates/art/api_kotlin_async_helpers.kt
index 4d8f857..e064339 100644
--- a/generator/templates/art/api_kotlin_async_helpers.kt
+++ b/generator/templates/art/api_kotlin_async_helpers.kt
@@ -26,14 +26,20 @@
 //* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 package {{ kotlin_package }}
 
-import java.util.concurrent.Executor
-import kotlin.coroutines.resume
-import kotlin.coroutines.suspendCoroutine
 {% from 'art/api_kotlin_types.kt' import kotlin_annotation, kotlin_declaration, kotlin_definition, check_if_doc_present, generate_kdoc with context %}
 
 {% set all_callback_info = kdocs.callbacks %}
 {% set all_objects = kdocs.objects %}
 {% macro async_wrapper(obj, method, callback_arg) %}
+    //* Generate KDocs
+    {% set callback_doc_info = all_callback_info.get(callback_arg.type.name.get()) %}
+    {% set callback_doc = callback_doc_info.doc if callback_doc_info else "" %}
+    {% set callback_args_doc = callback_doc_info.args if callback_doc_info else {} %}
+    {% set callback_args = kotlin_record_members(callback_arg.type.arguments) | list %}
+    {% if check_if_doc_present(callback_doc, "", callback_args_doc, callback_args) == 'True' %}
+        {{- generate_kdoc(callback_doc, "", callback_args_doc, callback_args, line_wrap_prefix = "\n * ") }}
+    {%- endif %}
+
     {% set return_name = callback_arg.type.name.chunks[:-1] | map('title') | join + 'Return' %}
     {% set result_args = kotlin_record_members(callback_arg.type.arguments) | list %}
     //* We make a return class to receive the callback's (possibly multiple) return values.
@@ -70,7 +76,7 @@
     {%- endif %}
     //* The wrapped method has executor and callback function stripped out (the wrapper supplies
     //* those so the client doesn't have to).
-    public suspend fun {{ kotlin_name(obj) }}.{{ method.name.camelCase() }}(
+    public suspend fun {{ method.name.camelCase() }}(
         {%- for arg in kotlin_record_members(method.arguments) if not (
             arg.type.category == 'callback function' or
             (arg.type.category == 'kotlin type' and arg.type.name.get() == 'java.util.concurrent.Executor')
@@ -96,26 +102,3 @@
             {%- endfor %})
     }
 {% endmacro %}
-
-//* Every method that is identified as using callbacks is given a helper method that wraps the
-//* call with a suspend function.
-{% for obj in by_category['object'] %}
-    {%- for method in obj.methods if include_method(obj, method) %}
-        {%- for arg in kotlin_record_members(method.arguments) %}
-            {% if arg.type.category == 'callback function' %}
-                //* Generating KDocs
-                {% set callback_doc_info = all_callback_info.get(arg.type.name.get()) %}
-                {% set callback_doc = callback_doc_info.doc if callback_doc_info else "" %}
-                {% set callback_args_doc = callback_doc_info.args if callback_doc_info else {} %}
-                {% set callback_args = kotlin_record_members(arg.type.arguments) | list %}
-                {% if check_if_doc_present(callback_doc, "", callback_args_doc, callback_args) == 'True' %}
-                    {{- generate_kdoc(callback_doc, "", callback_args_doc, callback_args, line_wrap_prefix = "\n * ") }}
-
-                {%- endif %}
-                {{- async_wrapper(obj, method, arg) -}}
-                {{ continue }}
-            {% endif %}
-        {% endfor %}
-    {% endfor %}
-{% endfor %}
-
diff --git a/generator/templates/art/api_kotlin_object.kt b/generator/templates/art/api_kotlin_object.kt
index 6115a09..d432fa9 100644
--- a/generator/templates/art/api_kotlin_object.kt
+++ b/generator/templates/art/api_kotlin_object.kt
@@ -28,7 +28,12 @@
 
 import dalvik.annotation.optimization.FastNative
 import java.nio.ByteBuffer
+import java.util.concurrent.Executor
+import kotlin.coroutines.resume
+import kotlin.coroutines.suspendCoroutine
+
 {% from 'art/api_kotlin_types.kt' import kotlin_annotation, kotlin_declaration, kotlin_definition, check_if_doc_present, generate_kdoc, generate_simple_kdoc with context %}
+{% from 'art/api_kotlin_async_helpers.kt' import async_wrapper with context %}
 
 //* Generating KDocs
 {% set all_objects_info = kdocs.objects%}
@@ -71,6 +76,16 @@
             public val {{ name }}: {{ kotlin_declaration(kotlin_return(method)) }} get() = {{ method.name.camelCase() }}()
 
         {% endif %}
+
+        //* Every method that is identified as using callbacks is given a helper method that wraps the
+        //* call with a suspend function.
+        {%- for arg in kotlin_record_members(method.arguments) %}
+            {% if arg.type.category == 'callback function' %}
+                {{- async_wrapper(obj, method, arg) -}}
+                {{ continue }}
+            {% endif %}
+        {%- endfor -%}
+
     {% endfor %}
     external override fun close()
 
diff --git a/tools/android/BUILD.gn b/tools/android/BUILD.gn
index 3de9c275..f0d4d87 100644
--- a/tools/android/BUILD.gn
+++ b/tools/android/BUILD.gn
@@ -47,7 +47,6 @@
     "java/androidx/webgpu/AdapterInfo.kt",
     "java/androidx/webgpu/AdapterType.kt",
     "java/androidx/webgpu/AddressMode.kt",
-    "java/androidx/webgpu/AsyncHelpers.kt",
     "java/androidx/webgpu/BackendType.kt",
     "java/androidx/webgpu/GPUBindGroup.kt",
     "java/androidx/webgpu/BindGroupDescriptor.kt",
diff --git a/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt b/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt
index 7a6b97e..20e3b5f 100644
--- a/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt
+++ b/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt
@@ -21,8 +21,6 @@
 import androidx.webgpu.UncapturedErrorCallback
 import androidx.webgpu.createInstance
 import androidx.webgpu.helper.Util.windowFromSurface
-import androidx.webgpu.requestAdapter
-import androidx.webgpu.requestDevice
 import java.util.concurrent.Executor
 
 public class DeviceLostException(