Ejemplo n.º 1
0
    def get_code_element(self, scode_reference, code_elements, method_info,
                         log):
        log.reset_variables()
        return_code_element = None
        potentials = code_elements
        if code_elements is None:
            size = 0
            potentials = []
        else:
            size = len(code_elements)

        #print('DEBUG FOR {0}:{1}'.format(scode_reference.pk,
        #scode_reference.content))
        #for code_element in code_elements:
        #print(code_element.fqn)

        filter_results = []

        method_name = method_info.method_name
        params = method_info.type_params
        fqn_container = method_info.fqn_container

        for afilter in self.method_filters:
            finput = filters.FilterInput(scode_reference, potentials,
                                         method_name, log, fqn_container,
                                         params, filter_results)
            result = afilter.filter(finput)
            potentials = result.potentials
            filter_results.append(result)

        log.custom_filtered = filters.custom_filtered(filter_results)

        potentials_size = len(potentials)
        if potentials_size == 1:
            return_code_element = potentials[0]
        elif potentials_size > 1:
            return_code_element = potentials[0]
            log.arbitrary = True

        # Logging
        log.log_method(method_info, scode_reference, return_code_element,
                       potentials, size, filter_results)
        return (return_code_element, potentials)
Ejemplo n.º 2
0
    def get_code_element(self, scode_reference, code_elements, method_info,
            log):
        log.reset_variables()
        return_code_element = None
        potentials = code_elements
        if code_elements is None:
            size = 0
            potentials = []
        else:
            size = len(code_elements)

        #print('DEBUG FOR {0}:{1}'.format(scode_reference.pk,
            #scode_reference.content))
        #for code_element in code_elements:
            #print(code_element.fqn)

        filter_results = []

        method_name = method_info.method_name
        params = method_info.type_params
        fqn_container = method_info.fqn_container

        for afilter in self.method_filters:
            finput = filters.FilterInput(scode_reference, potentials,
                    method_name, log, fqn_container, params, filter_results)
            result = afilter.filter(finput)
            potentials = result.potentials
            filter_results.append(result)

        log.custom_filtered = filters.custom_filtered(filter_results)

        potentials_size = len(potentials)
        if potentials_size == 1:
            return_code_element = potentials[0]
        elif potentials_size > 1:
            return_code_element = potentials[0]
            log.arbitrary = True

        # Logging
        log.log_method(method_info, scode_reference, return_code_element,
                potentials, size, filter_results)
        return (return_code_element, potentials)
Ejemplo n.º 3
0
    def get_code_element(self,
                         scode_reference,
                         code_elements,
                         simple,
                         fqn,
                         log,
                         insensitive=False):
        log.reset_variables()
        return_code_element = None
        potentials = code_elements
        if code_elements is None:
            size = 0
        else:
            size = len(code_elements)

        # DEBUG
        print('DEBUG for {0}'.format(scode_reference.content))
        for code_element in code_elements:
            print(code_element.fqn)

        if size > 0:
            if size == 1:
                # There is only one code element.
                return_code_element = code_elements[0]
                potentials = [return_code_element]
                log.one = True
            elif fqn == simple \
                    or fqn.find(UNKNOWN_PACKAGE) != -1 \
                    or fqn.find(SNIPPET_PACKAGE) != -1:
                # Many elements and fqn is unknown
                return_code_element = code_elements[0]
                log.arbitrary = True
            elif insensitive:
                # Do an insensitive comparison on the fqn.
                fqn_lower = fqn.lower()
                sims = [
                    su.pairwise_simil(fqn_lower, code_element.fqn.lower())
                    for code_element in code_elements
                ]
                max_sim = max(sims)
                index = sims.index(max_sim)
                return_code_element = code_elements[index]
                del (potentials[index])
                potentials.insert(0, return_code_element)
                if max_sim >= FQN_SIMILARITY_THRESHOLD:
                    potentials = [return_code_element]
                log.insensitive = True
            else:
                # Do a case sensitive comparison on the fqn
                sims = [
                    su.pairwise_simil(fqn, code_element.fqn)
                    for code_element in code_elements
                ]
                max_sim = max(sims)
                index = sims.index(max_sim)
                return_code_element = code_elements[index]
                del (potentials[index])
                potentials.insert(0, return_code_element)
                if max_sim >= FQN_SIMILARITY_THRESHOLD:
                    potentials = [return_code_element]
                log.sensitive = True

        filter_results = []
        for afilter in self.class_filters:
            finput = filters.FilterInput(scode_reference, potentials, fqn, log,
                                         None, None, filter_results)
            result = afilter.filter(finput)
            potentials = result.potentials
            filter_results.append(result)

        potentials_size = len(potentials)
        if potentials_size > 0:
            return_code_element = potentials[0]

        log.custom_filtered = filters.custom_filtered(filter_results)

        # Logging
        log.log_type(simple, fqn, scode_reference, return_code_element,
                     potentials, size)

        return (return_code_element, potentials)
Ejemplo n.º 4
0
    def get_code_element(self, scode_reference, code_elements, simple, fqn,
            log, insensitive=False):
        log.reset_variables()
        return_code_element = None
        potentials = code_elements
        if code_elements is None:
            size = 0
        else:
            size = len(code_elements)

        # DEBUG
        print('DEBUG for {0}'.format(scode_reference.content))
        for code_element in code_elements:
            print(code_element.fqn)

        if size > 0:
            if size == 1:
                # There is only one code element.
                return_code_element = code_elements[0]
                potentials = [return_code_element]
                log.one = True
            elif fqn == simple \
                    or fqn.find(UNKNOWN_PACKAGE) != -1 \
                    or fqn.find(SNIPPET_PACKAGE) != -1:
                # Many elements and fqn is unknown
                return_code_element = code_elements[0]
                log.arbitrary = True
            elif insensitive:
                # Do an insensitive comparison on the fqn.
                fqn_lower = fqn.lower()
                sims = [su.pairwise_simil(fqn_lower, code_element.fqn.lower())
                        for code_element in code_elements]
                max_sim = max(sims)
                index = sims.index(max_sim)
                return_code_element = code_elements[index]
                del(potentials[index])
                potentials.insert(0, return_code_element)
                if max_sim >= FQN_SIMILARITY_THRESHOLD:
                    potentials = [return_code_element]
                log.insensitive = True
            else:
                # Do a case sensitive comparison on the fqn
                sims = [su.pairwise_simil(fqn, code_element.fqn)
                        for code_element in code_elements]
                max_sim = max(sims)
                index = sims.index(max_sim)
                return_code_element = code_elements[index]
                del(potentials[index])
                potentials.insert(0, return_code_element)
                if max_sim >= FQN_SIMILARITY_THRESHOLD:
                    potentials = [return_code_element]
                log.sensitive = True

        filter_results = []
        for afilter in self.class_filters:
            finput = filters.FilterInput(scode_reference, potentials,
                    fqn, log, None, None, filter_results)
            result = afilter.filter(finput)
            potentials = result.potentials
            filter_results.append(result)

        potentials_size = len(potentials)
        if potentials_size > 0:
            return_code_element = potentials[0]

        log.custom_filtered = filters.custom_filtered(filter_results)

        # Logging
        log.log_type(simple, fqn, scode_reference, return_code_element,
                potentials, size)

        return (return_code_element, potentials)