<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _detect(self):
 """ Detect shadowing local variables Recursively visit the calls Returns: list: {'vuln', 'filename,'contract','func', 'shadow'} """


        results = []
        for contract in self.contracts:
            shadows = self.detect_shadowing_definitions(contract)
            if shadows:
                for shadow in shadows:
                    local_parent_name = shadow[1]
                    local_variable = shadow[2]
                    overshadowed = shadow[3]
                    info = '{}.{}.{} (local variable @ {}) shadows:\n'.format(contract.name,
                                                                              local_parent_name,
                                                                              local_variable.name,
                                                                              local_variable.source_mapping_str)
                    for overshadowed_entry in overshadowed:
                        info += "\t- {}.{} ({} @ {})\n".format(overshadowed_entry[1],
                                                               overshadowed_entry[2],
                                                               overshadowed_entry[0],
                                                               overshadowed_entry[2].source_mapping_str)


                    # Generate relevant JSON data for this shadowing definition.
                    json = self.generate_json_result(info)
                    self.add_variable_to_json(local_variable, json)
                    for overshadowed_entry in overshadowed:
                        if overshadowed_entry[0] in [self.OVERSHADOWED_FUNCTION, self.OVERSHADOWED_MODIFIER,
                                                     self.OVERSHADOWED_EVENT]:
                            self.add_function_to_json(overshadowed_entry[2], json)
                        elif overshadowed_entry[0] == self.OVERSHADOWED_STATE_VARIABLE:
                            self.add_variable_to_json(overshadowed_entry[2], json)
                    results.append(json)

        return results