(self, params)
| 45 | return True |
| 46 | |
| 47 | def analyze(self, params): |
| 48 | source_dir = params["source_dir"] |
| 49 | work_dir = params.work_dir |
| 50 | self.out_dir = params["work_dir"] |
| 51 | |
| 52 | rules = RuleParamer.java_param_formart(params["rule_list"]) |
| 53 | with open("rules.json", "w") as f1: |
| 54 | f1.write(json.dumps(rules)) |
| 55 | f1.close() |
| 56 | self.js = JavaScaner(source_dir, self.out_dir) |
| 57 | need_ast = False |
| 58 | need_field = False |
| 59 | for rule_info in rules: |
| 60 | if "up_exist_method" in rule_info or "up_no_exist_method" in rule_info or "need_method_chain" in rule_info: |
| 61 | LogPrinter.info("条件符合,执行ast解析.") |
| 62 | need_ast = True |
| 63 | if "field" in rule_info: |
| 64 | LogPrinter.info("条件符合,执行字节码遍历解析.") |
| 65 | need_field = True |
| 66 | |
| 67 | self.js.parser(need_bc=True, need_ast=need_ast, need_field=need_field) |
| 68 | |
| 69 | if params.get("incr_scan", False): |
| 70 | diffs = SCMMgr(params).get_scm_diff() |
| 71 | self.diff_files = {os.path.join(source_dir, diff.path).replace(os.sep, "/") for diff in diffs} |
| 72 | self.js.set_diff_files(self.diff_files) |
| 73 | LogPrinter.info("diff_files : %s" % self.diff_files) |
| 74 | |
| 75 | filelist = "" |
| 76 | if self.diff_files: |
| 77 | filelist = os.path.join(work_dir, "filelist.txt") |
| 78 | f = open(filelist, "w") |
| 79 | f.write("\n".join(self.diff_files)) |
| 80 | f.close() |
| 81 | |
| 82 | loong = Loong( |
| 83 | config=os.path.join(work_dir, "rules.json"), |
| 84 | dbdir=work_dir, |
| 85 | project_root=source_dir, |
| 86 | jar_mode=False, |
| 87 | filelist=filelist, |
| 88 | ) |
| 89 | result = loong.scan() |
| 90 | |
| 91 | return result |
| 92 | |
| 93 | |
| 94 | tool = JavaAPIFinderForCode |
nothing calls this directly
no test coverage detected