X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fjapi%2Fjava%2Fjvpp%2Fgen%2Fjvppgen%2Fjni_type_handlers_gen.py;h=59aaf95065a1c2ec29d91c5aac83dcc298d9979a;hb=413f4a5;hp=a76aadf468c65a02467460a31c36347ebaba0250;hpb=cc4a5e8089967f0c266e9c5ed319c38c111004cd;p=vpp.git diff --git a/extras/japi/java/jvpp/gen/jvppgen/jni_type_handlers_gen.py b/extras/japi/java/jvpp/gen/jvppgen/jni_type_handlers_gen.py index a76aadf468c..59aaf95065a 100755 --- a/extras/japi/java/jvpp/gen/jvppgen/jni_type_handlers_gen.py +++ b/extras/japi/java/jvpp/gen/jvppgen/jni_type_handlers_gen.py @@ -42,6 +42,11 @@ def generate_type_handlers(model, logger): def _generate_class(model, t, type_handlers): ref_name = t.java_name_lower + if t.name in model._aliases: + is_alias = True + else: + is_alias = False + type_handlers.append(_TYPE_HOST_TO_NET_TEMPLATE.substitute( c_name=t.name, json_filename=model.json_api_files, @@ -49,7 +54,7 @@ def _generate_class(model, t, type_handlers): type_reference_name=ref_name, class_FQN=t.jni_name, jni_identifiers=generate_j2c_identifiers(t, class_ref_name="%sClass" % ref_name, object_ref_name="_host"), - type_swap=generate_j2c_swap(t, struct_ref_name="_net") + type_swap=generate_j2c_swap(t, struct_ref_name="_net", is_alias=is_alias) )) type_handlers.append(_TYPE_NET_TO_HOST_TEMPLATE.substitute( c_name=t.name, @@ -57,7 +62,7 @@ def _generate_class(model, t, type_handlers): json_definition=t.doc, type_reference_name=ref_name, class_FQN=t.jni_name, - type_swap=generate_c2j_swap(t, object_ref_name="_host", struct_ref_name="_net") + type_swap=generate_c2j_swap(t, object_ref_name="_host", struct_ref_name="_net", is_alias=is_alias) )) _TYPE_HOST_TO_NET_TEMPLATE = Template(""" @@ -117,8 +122,8 @@ $json_definition static inline void _host_to_net_${c_name}(JNIEnv * env, jobject _host, vl_api_${c_name}_t * _net) { jclass enumClass = (*env)->FindClass(env, "${class_FQN}"); - jfieldID valueFieldId = (*env)->GetStaticFieldID(env, enumClass, "value", "${jni_signature}"); - ${jni_type} value = (*env)->GetStatic${jni_accessor}Field(env, enumClass, valueFieldId); + jmethodID getValueMethod = (*env)->GetMethodID(env, enumClass, "ordinal", "()I"); + ${jni_type} value = (*env)->CallIntMethod(env, _host, getValueMethod); ${swap}; }""") @@ -159,13 +164,17 @@ def _generate_union_host_to_net(model, t): swap = [] for i, field in enumerate(t.fields): field_type = field.type + if t.name in model._aliases: + is_alias = True + else: + is_alias = False swap.append(_UNION_FIELD_HOST_TO_NET_TEMPLATE.substitute( field_index=i, java_name=field.java_name, jni_signature=field_type.jni_signature, jni_type=field_type.jni_type, jni_accessor=field_type.jni_accessor, - swap=generate_j2c_field_swap(field, struct_ref_name="_net") + swap=generate_j2c_field_swap(field, struct_ref_name="_net", is_alias=is_alias) )) return _UNION_HOST_TO_NET_TEMPLATE.substitute( @@ -200,13 +209,17 @@ $swap def _generate_union_net_to_host(model, t): + if t.name in model._aliases: + is_alias = True + else: + is_alias = False return _UNION_NET_TO_HOST_TEMPLATE.substitute( c_name=t.name, json_filename=model.json_api_files, json_definition=t.doc, type_reference_name=t.java_name_lower, class_FQN=t.jni_name, - swap=generate_c2j_swap(t, object_ref_name="_host", struct_ref_name="_net") + swap=generate_c2j_swap(t, object_ref_name="_host", struct_ref_name="_net", is_alias=is_alias) ) _UNION_NET_TO_HOST_TEMPLATE = Template("""