def __get_parsing_plan_for_multifile_children(self, obj_on_fs: PersistedObject, desired_type: Type[Any],<EOL>children_on_fs: Dict[str, PersistedObject], logger: Logger)-> Dict[str, Any]:
<EOL>constructor_args_types_and_opt = get_constructor_attributes_types(desired_type)<EOL>children_plan = dict()  <EOL>for attribute_name, att_desc in sorted(constructor_args_types_and_opt.items()):<EOL><INDENT>attribute_is_mandatory = att_desc[<NUM_LIT:1>]<EOL>attribute_type = att_desc[<NUM_LIT:0>]<EOL>if attribute_name in children_on_fs.keys():<EOL><INDENT>child_on_fs = children_on_fs[attribute_name]<EOL>t, parser_found = self.parser_finder.build_parser_for_fileobject_and_desiredtype(child_on_fs,<EOL>attribute_type,<EOL>logger=logger)<EOL>children_plan[attribute_name] = parser_found.create_parsing_plan(t, child_on_fs,<EOL>logger=logger, _main_call=False)<EOL><DEDENT>else:<EOL><INDENT>if attribute_is_mandatory:<EOL><INDENT>raise MissingMandatoryAttributeFiles.create(obj_on_fs, desired_type, attribute_name)<EOL><DEDENT>else:<EOL><INDENT>msg = '<STR_LIT>'+ get_pretty_type_str(desired_type) + '<STR_LIT>''<STR_LIT>'<EOL>if logger.isEnabledFor(DEBUG):<EOL><INDENT>logger.warning('<STR_LIT>' + obj_on_fs.get_pretty_child_location(attribute_name,<EOL>blank_parent_part=True) + '<STR_LIT>'<EOL>+ msg)<EOL><DEDENT>else:<EOL><INDENT>logger.warning('<STR_LIT>'<EOL>'<STR_LIT>'<EOL>'<STR_LIT>'.format(<EOL>loc=obj_on_fs.get_pretty_location(blank_parent_part=False, append_file_ext=False),<EOL>typ=get_pretty_type_str(desired_type),<EOL>att=attribute_name))<EOL><DEDENT><DEDENT><DEDENT><DEDENT>return children_plan<EOL>
Simply inspects the required type to find the names and types of its constructor arguments.
Then relies on the inner ParserFinder to parse each of them.

:param obj_on_fs:
:param desired_type:
:param children_on_fs:
:param logger:
:return: