Ignore null callbacks by JNI
Bug: b/450495046
Change-Id: I6a8d09fb204865891470d7601a508c00fac3aaf1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/266174
Reviewed-by: Mridul Goyal <mridulgoyal@google.com>
Reviewed-by: Jim Blackler <jimblackler@google.com>
Commit-Queue: Nikita Gupta <nikigupta@google.com>
diff --git a/generator/templates/art/kotlin_record_conversion.cpp b/generator/templates/art/kotlin_record_conversion.cpp
index 806cd10..2803fe0 100644
--- a/generator/templates/art/kotlin_record_conversion.cpp
+++ b/generator/templates/art/kotlin_record_conversion.cpp
@@ -54,18 +54,22 @@
{
{# If the parent structure has a 'callback info' member, convert the member to a 'callback info' object #}
{% if has_callbackInfoStruct and "callback" in as_varName(member.name) | lower %}
- jclass callbackInfoClass = classes->{{member.type.name.camelCase() ~ "Info"}};
- jmethodID constructorId = env->GetMethodID(
- callbackInfoClass,
- "<init>",
- "(Ljava/util/concurrent/Executor;Landroidx/webgpu/{{member.type.name.CamelCase()}};)V");
- jobject _callbackInfo = env->NewObject(
- callbackInfoClass,
- constructorId,
- inStruct.{{as_varName(member.name)}}Executor,
- inStruct.{{as_varName(member.name)}});
- auto& in = _callbackInfo;
- auto& out = outStruct->{{member.name.camelCase() ~ "Info"}};
+ if (inStruct.{{ as_varName(member.name) }})
+ {
+ jclass callbackInfoClass = classes->{{ member.type.name.camelCase() ~ "Info" }};
+ jmethodID constructorId = env->GetMethodID(
+ callbackInfoClass,
+ "<init>",
+ "(Ljava/util/concurrent/Executor;Landroidx/webgpu/{{ member.type.name.CamelCase() }};)V");
+ jobject _callbackInfo = env->NewObject(
+ callbackInfoClass,
+ constructorId,
+ inStruct.{{ as_varName(member.name) }}Executor,
+ inStruct.{{ as_varName(member.name) }});
+ auto& in = _callbackInfo;
+ auto& out = outStruct->{{ member.name.camelCase() ~ "Info" }};
+ ToNative(c, env, in, &out);
+ }
{% else %}
auto& in = inStruct.{{member.name.camelCase()}};
auto& out = outStruct->{{member.name.camelCase()}};
@@ -126,7 +130,9 @@
} else {
out = nullptr;
}
- {% elif (has_callbackInfoStruct == true and member.type.category == 'callback function') or (member.type.category == 'structure') %}
+ {% elif has_callbackInfoStruct and "callback" in as_varName(member.name) | lower %}
+ {# Do nothing for this case #}
+ {% elif member.type.category == 'structure' %}
//* Mandatory structure.
ToNative(c, env, in, &out);
{% elif member.name.get() == "window" and member.type.name.get() == "void *" %}