summaryrefslogtreecommitdiff
path: root/tools/InterfaceGenerator
diff options
context:
space:
mode:
authorJacob Keeler <jacob.keeler@livioradio.com>2020-08-20 11:25:21 -0400
committerGitHub <noreply@github.com>2020-08-20 11:25:21 -0400
commit1dbd5d7a1c6554eb40108d74e3f4e2b81323f918 (patch)
tree6b06cca9cb6133ce1688922c2552e4f2463ddd54 /tools/InterfaceGenerator
parent65f45c34d680c11a78ceea28400b1994a0c2fc33 (diff)
downloadsdl_core-1dbd5d7a1c6554eb40108d74e3f4e2b81323f918.tar.gz
Add versioning information for functions in InterfaceGenerator script (#3474)
Diffstat (limited to 'tools/InterfaceGenerator')
-rwxr-xr-xtools/InterfaceGenerator/generator/generators/SmartFactoryBase.py123
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::'''