def _get_method_info(self, scode_reference, skip_complex_search=False):
        method_name = fqn_container = nb_params = type_params = None

        if scode_reference.snippet != None:
            parts = scode_reference.content.split(HANDLE_SEPARATOR)
            (method_name, fqn_container, nb_params, type_params) = \
                    self._get_method_info_snippet(parts)
        else:
            content = scode_reference.content
            match1 = je.CALL_CHAIN_RE.search(content)
            match2 = je.METHOD_DECLARATION_RE.search(content)
            match3 = je.METHOD_SIGNATURE_RE.search(content)
            match4 = je.SIMPLE_CALL_RE.search(content)

            if match1 and not skip_complex_search:
                (method_name, fqn_container) = self._get_method_header(match1)
                eindex = content.index(')')
                sindex = content.index('(')
                params_text = content[sindex + 1:eindex]

                if len(params_text) == 0:
                    # This means that there was no parameter, so no ','
                    nb_params = 0
                else:
                    params = params_text.split(',')
                    nb_params = len(params)
                    type_params = [param.strip() for param in params]

            elif match2 and not skip_complex_search:
                method_name = match2.group('method_name')
                eindex = content.index(')')
                sindex = content.index('(')
                params_text = content[sindex + 1:eindex]

                if len(params_text) == 0:
                    # This means that there was no parameter, so no ','
                    nb_params = 0
                else:
                    params = params_text.split(',')
                    nb_params = len(params)
                    type_params = [param.strip() for param in params]
            elif match3 and not skip_complex_search:
                (method_name, fqn_container) = self._get_method_header(match3)
                (nb_params, type_params) = self._get_method_params(match3)
            elif match4 and not skip_complex_search:
                (method_name, fqn_container) = self._get_method_header(match4)
                (nb_params, type_params) = self._get_method_params(match4)
            else:
                if len(content.strip()) > 0:
                    method_name = je.get_clean_name(content)

            # Convert literals
            if type_params is not None:
                for i, type_param in enumerate(type_params):
                    if type_param is not None:
                        type_param = type_param.strip()
                        atype = je.find_type(type_param)
                        if atype is not None:
                            type_params[i] = atype

        if type_params is not None:
            type_params = \
                    [su.safe_strip(type_param) for type_param in type_params]

        return MethodInfo(su.safe_strip(method_name),
                su.safe_strip(fqn_container), nb_params, type_params)
dataset/ETHPy150Open bartdag/recodoc2/recodoc2/apps/codebase/linker/java_linkers.py/JavaMethodLinker._get_method_info/original