コード例 #1
0
def generate_jni_impl(func_list, plugin_name, inputfile):
    jni_impl = []
    for f in func_list:
        f_name = f['name']
        camel_case_function_name = util.underscore_to_camelcase(f_name)
        if is_manually_generated(f_name, plugin_name) or util.is_reply(camel_case_function_name) \
                or util.is_ignored(f_name) or util.is_just_notification(f_name):
            continue

        arguments = ''
        request_class = ''
        jni_identifiers = ''
        msg_initialization = ''
        f_name_uppercase = f_name.upper()
        msg_size = 'sizeof(*mp)'

        if f['args']:
            arguments = ', jobject request'
            camel_case_function_name_upper = util.underscore_to_camelcase_upper(f_name)

            request_class = request_class_template.substitute(
                    java_name_upper=camel_case_function_name_upper,
                    plugin_name=plugin_name)

            for t in zip(f['types'], f['args'], f['lengths'], f['arg_types']):
                field_name = util.underscore_to_camelcase(t[1])
                is_variable_len_array = t[2][1]
                if is_variable_len_array:
                    msg_size += jni_msg_size_template.substitute(array_length=util.underscore_to_camelcase(t[2][0]),
                                                                 element_type=t[3])
                jni_identifiers += jni_gen.jni_request_identifiers_for_type(field_type=t[0],
                                                                            field_reference_name=field_name,
                                                                            field_name=field_name)
                msg_initialization += jni_gen.jni_request_binding_for_type(field_type=t[0], c_name=t[1],
                                                                           field_reference_name=field_name,
                                                                           field_length=t[2][0],
                                                                           is_variable_len_array=is_variable_len_array)

        jni_impl.append(jni_impl_template.substitute(
                inputfile=inputfile,
                api_data=util.api_message_to_javadoc(f),
                field_reference_name=camel_case_function_name,
                field_name=camel_case_function_name,
                c_name_uppercase=f_name_uppercase,
                c_name=f_name,
                crc=f['crc'],
                plugin_name=plugin_name,
                java_plugin_name=plugin_name.title(),
                request_class=request_class,
                jni_identifiers=jni_identifiers,
                msg_size=msg_size,
                msg_initialization=msg_initialization,
                args=arguments))

    return "\n".join(jni_impl)
コード例 #2
0
def generate_struct_initialization(type_def, c_name_prefix, object_name, indent):
    struct_initialization = ""
    # field identifiers
    for t in zip(type_def['types'], type_def['args'], type_def['lengths']):
        field_reference_name = "${c_name}" + util.underscore_to_camelcase_upper(t[1])
        field_name = util.underscore_to_camelcase(t[1])
        struct_initialization += jni_gen.jni_request_binding_for_type(field_type=t[0], c_name=c_name_prefix + t[1],
                                                                     field_reference_name=field_reference_name,
                                                                     field_name=field_name,
                                                                     field_length=t[2][0],
                                                                     is_variable_len_array=t[2][1],
                                                                     object_name=object_name)
    return indent + struct_initialization.replace('\n', '\n' + indent)