Example #1
0
    def auto_analyze(self):
        self.pkg = PkgMap()
        for cls in filter(
                lambda cls: cls.is_identified() and cls.orig_pkg[0] != 'broot',
                self.obj.list_classes()):
            self.pkg.add_identified_class(cls)

        changed = True
        not_identified = set(
            filter(lambda cls: not cls.is_identified() and cls.raw['find'],
                   self.obj.list_classes()))
        req_max_unknown_pkg = None
        while True:
            if changed:
                max_unknown_pkg = 0
            elif req_max_unknown_pkg != 1000:
                max_unknown_pkg = req_max_unknown_pkg
            else:
                break

            changed = False
            req_max_unknown_pkg = 1000
            identified = set()
            for cls in not_identified:
                found, unknown_pkg = self.auto_identify_class(
                    cls, max_unknown_pkg)
                if found:
                    changed = True
                    identified.add(cls)
                    self.pkg.add_identified_class(cls)
                elif unknown_pkg != -1 and unknown_pkg < req_max_unknown_pkg:
                    req_max_unknown_pkg = unknown_pkg

            not_identified.difference_update(identified)

        self.analyze_enums()