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()