def create_parsing_plan(self, desired_type: Type[T], filesystem_object: PersistedObject, logger: Logger,<EOL>_main_call: bool = True):
in_root_call = False<EOL>if _main_call and (not hasattr(AnyParser.thrd_locals, '<STR_LIT>') or AnyParser.thrd_locals.flag_init == <NUM_LIT:0>):<EOL><INDENT>logger.debug('<STR_LIT>'<EOL>'<STR_LIT>'.format(location=filesystem_object.get_pretty_location(append_file_ext=False),<EOL>type=get_pretty_type_str(desired_type)))<EOL>AnyParser.thrd_locals.flag_init = <NUM_LIT:1><EOL>in_root_call = True<EOL><DEDENT>try:<EOL><INDENT>pp = self._create_parsing_plan(desired_type, filesystem_object, logger, log_only_last=(not _main_call))<EOL><DEDENT>finally:<EOL><INDENT>if in_root_call:<EOL><INDENT>AnyParser.thrd_locals.flag_init = <NUM_LIT:0><EOL><DEDENT><DEDENT>if in_root_call:<EOL><INDENT>logger.debug('<STR_LIT>')<EOL><DEDENT>return pp<EOL>
Implements the abstract parent method by using the recursive parsing plan impl. Subclasses wishing to produce
their own parsing plans should rather override _create_parsing_plan in order to benefit from this same log msg.

:param desired_type:
:param filesystem_object:
:param logger:
:param _main_call: internal parameter for recursive calls. Should not be changed by the user.
:return: