diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2020-08-20 11:25:21 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-20 11:25:21 -0400 |
commit | 1dbd5d7a1c6554eb40108d74e3f4e2b81323f918 (patch) | |
tree | 6b06cca9cb6133ce1688922c2552e4f2463ddd54 /tools | |
parent | 65f45c34d680c11a78ceea28400b1994a0c2fc33 (diff) | |
download | sdl_core-1dbd5d7a1c6554eb40108d74e3f4e2b81323f918.tar.gz |
Add versioning information for functions in InterfaceGenerator script (#3474)
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py | 123 |
1 files changed, 115 insertions, 8 deletions
diff --git a/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py b/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py index de0067bba8..73ab03f205 100755 --- a/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py +++ b/tools/InterfaceGenerator/generator/generators/SmartFactoryBase.py @@ -738,19 +738,18 @@ class CodeGenerator(object): item.name += "_history_v" + str(len(history_list)-count) result_array.append(self._gen_schema_item_decl(item)) count += 1 - result_array.append(self._gen_history_vector_decl(history_list, x.name)) + result_array.append(self._gen_history_vector_decl(x.name)) result = u"\n\n".join(result_array) return result - def _gen_history_vector_decl(self, history_list, name): + def _gen_history_vector_decl(self, name): """Generate History Vector Declaration. Generates the declaration and initialization of a vector of schema items Arguments: - history_list -> list of history items name -> name of parent parameter name Returns: @@ -759,9 +758,40 @@ class CodeGenerator(object): result_array = [] result_array.append(self._impl_code_shared_ptr_vector_template.substitute(var_name = name)) result = u"\n".join(result_array) + if result is not "": + result += u"\n\n" return result + def _gen_function_history_decl(self, member): + """Generate History Vector Declaration for function. + Generates the declaration and initialization + of a function + + Arguments: + member -> function member + + Returns: + String with history array code. + """ + result_array = [] + count = 0 + if member.history is not None: + history_list = member.history + result_array.append(self._gen_history_vector_decl(member.name)) + for item in history_list: + item.name += "_history_v" + str(len(history_list)-count) + result_array.append(self._impl_code_item_decl_template.substitute( + comment="", + var_name=self._gen_schema_item_var_name(item), + item_decl=self._impl_function_schema)) + result_array.append(self._gen_function_history_vector_item_fill(item, member.name)) + count += 1 + + result = u"\n\n".join(result_array) + if result is not "": + result += u"\n\n" + return result def _gen_schema_item_decl(self, member): """Generate schema item declaration. @@ -777,7 +807,7 @@ class CodeGenerator(object): """ - return self._impl_code_item_decl_temlate.substitute( + return self._impl_code_item_decl_template.substitute( comment=self._gen_comment(member, False), var_name=self._gen_schema_item_var_name(member), item_decl=self._gen_schema_item_decl_code( @@ -960,6 +990,40 @@ class CodeGenerator(object): raise GenerateError("Unexpected call to the unimplemented function.") + def _gen_function_member(self, member): + """Generate function member fill code. + + Generates source code that fills new schema with items. + + Keyword arguments: + members -- list of struct members/function parameters to process. + + Returns: + String with function member definition fill code. + + """ + self._check_member_history(member) + + if (member.since is not None): + if member.history is not None: + return self._impl_function_member_fill_template_with_version_and_history_vector.substitute( + schema=self._impl_function_schema, + since=member.since if member.since is not None else "", + until=member.until if member.until is not None else "", + deprecated=member.deprecated if member.deprecated is not None else u"false", + removed=member.removed if member.removed is not None else u"false", + vector_name=member.name) + else: + return self._impl_function_member_fill_template_with_version.substitute( + schema=self._impl_function_schema, + since=member.since if member.since is not None else "", + until=member.until if member.until is not None else "", + deprecated=member.deprecated if member.deprecated is not None else u"false", + removed=member.removed if member.removed is not None else u"false") + else: + return self._impl_function_member_fill_template.substitute( + schema=self._impl_function_schema) + def _check_member_history(self, member): """ Checks set of rules that history items are valid @@ -1056,6 +1120,34 @@ class CodeGenerator(object): else: print("Warning! History item does not have any version history. Omitting " + member.name) + def _gen_function_history_vector_item_fill(self, member, vector_name): + """Generate schema item fill code for function. + + Generates source code that fills history vector with item. + + Keyword arguments: + member -- struct member/function parameter to process. + + Returns: + String with schema item fill code. + + """ + + if (member.since is not None or + member.until is not None or + member.deprecated is not None or + member.removed is not None): + return self._impl_code_append_history_vector_template.substitute( + vector_name=vector_name, + name=member.name, + mandatory=u"true", + since=member.since if member.since is not None else "", + until=member.until if member.until is not None else "", + deprecated=member.deprecated if member.deprecated is not None else u"false", + removed=member.removed if member.removed is not None else u"false") + else: + print("Warning! History item does not have any version history. Omitting " + member.name) + @staticmethod def _gen_schema_item_var_name(member): """Generate schema item variable name. @@ -1158,7 +1250,11 @@ class CodeGenerator(object): schema_item_fill=self._gen_schema_items_fill( function.params.values(), function.since, function.until, function.deprecated, function.removed), schema_params_fill=self._gen_schema_params_fill( - function.message_type.name)), + function.message_type.name), + function_history_fill=self._gen_function_history_decl( + function), + function_member=self._gen_function_member( + function)), 1)) def _gen_enums(self, enums, structs): @@ -1831,7 +1927,7 @@ class CodeGenerator(object): _impl_gen_schema_enum_history_map_template = string.Template( u'''${name}_element_signatures''') - _impl_code_item_decl_temlate = string.Template( + _impl_code_item_decl_template = string.Template( u'''${comment}''' u'''std::shared_ptr<ISchemaItem> ${var_name} = ${item_decl};''') @@ -1874,6 +1970,17 @@ class CodeGenerator(object): _impl_code_item_fill_template_with_version_and_history_vector = string.Template( u'''schema_members["${name}"] = SMember(${var_name}, ${is_mandatory}, "${since}", "${until}", ${deprecated}, ${removed}, ${vector_name}_history_vector);''') + + _impl_function_schema = u'''CObjectSchemaItem::create(schema_members)''' + + _impl_function_member_fill_template = string.Template( + u'''SMember(${schema}, true)''') + + _impl_function_member_fill_template_with_version = string.Template( + u'''SMember(${schema}, true, "${since}", "${until}", ${deprecated}, ${removed})''') + + _impl_function_member_fill_template_with_version_and_history_vector = string.Template( + u'''SMember(${schema}, true, "${since}", "${until}", ${deprecated}, ${removed}, ${vector_name}_history_vector)''') _function_impl_template = string.Template( u'''CSmartSchema $namespace::$class_name::''' @@ -1894,12 +2001,12 @@ class CodeGenerator(object): u'''params_members;\n''' u'''${schema_params_fill}''' u'''\n''' + u'''${function_history_fill}''' u'''Members ''' u'''root_members_map;\n''' u'''root_members_map[ns_smart_device_link::ns_json_handler::''' u'''strings::S_MSG_PARAMS] = ''' - u'''SMember(CObjectSchemaItem::''' - u'''create(schema_members), true);\n''' + u'''${function_member};\n''' u'''root_members_map[ns_smart_device_link::ns_json_handler::''' u'''strings::S_PARAMS] = ''' u'''SMember(CObjectSchemaItem::''' |