arkanalyzer 1.0.86 → 1.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/README.en.md +69 -65
  2. package/README.md +56 -70
  3. package/config/arkanalyzer.json +7 -2
  4. package/docs/cppFrontend/ArkAnalyzer-cpp_usage_guide.md +245 -0
  5. package/docs/cppFrontend/cpp_frontend_build_guide.md +126 -0
  6. package/docs/cppFrontend/cpp_frontend_user_guide.md +175 -0
  7. package/docs/cppFrontend/img.png +0 -0
  8. package/docs/cppFrontend/img_1.png +0 -0
  9. package/docs/cppFrontend/img_10.png +0 -0
  10. package/docs/cppFrontend/img_11.png +0 -0
  11. package/docs/cppFrontend/img_12.png +0 -0
  12. package/docs/cppFrontend/img_13.png +0 -0
  13. package/docs/cppFrontend/img_14.png +0 -0
  14. package/docs/cppFrontend/img_15.png +0 -0
  15. package/docs/cppFrontend/img_16.png +0 -0
  16. package/docs/cppFrontend/img_17.png +0 -0
  17. package/docs/cppFrontend/img_18.png +0 -0
  18. package/docs/cppFrontend/img_19.png +0 -0
  19. package/docs/cppFrontend/img_2.png +0 -0
  20. package/docs/cppFrontend/img_20.png +0 -0
  21. package/docs/cppFrontend/img_21.png +0 -0
  22. package/docs/cppFrontend/img_22.png +0 -0
  23. package/docs/cppFrontend/img_23.png +0 -0
  24. package/docs/cppFrontend/img_3.png +0 -0
  25. package/docs/cppFrontend/img_4.png +0 -0
  26. package/docs/cppFrontend/img_5.png +0 -0
  27. package/docs/cppFrontend/img_6.png +0 -0
  28. package/docs/cppFrontend/img_7.png +0 -0
  29. package/docs/cppFrontend/img_8.png +0 -0
  30. package/docs/cppFrontend/img_9.png +0 -0
  31. package/docs/sig_programanalysis.en.md +66 -0
  32. package/docs/sig_programanalysis.md +73 -0
  33. package/lib/Config.d.ts +32 -1
  34. package/lib/Config.d.ts.map +1 -1
  35. package/lib/Config.js +76 -2
  36. package/lib/Scene.d.ts +25 -2
  37. package/lib/Scene.d.ts.map +1 -1
  38. package/lib/Scene.js +148 -40
  39. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +4 -3
  40. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
  41. package/lib/callgraph/algorithm/AbstractAnalysis.js +17 -17
  42. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +6 -1
  43. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts.map +1 -1
  44. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +117 -14
  45. package/lib/callgraph/common/Statistics.d.ts +4 -2
  46. package/lib/callgraph/common/Statistics.d.ts.map +1 -1
  47. package/lib/callgraph/common/Statistics.js +14 -2
  48. package/lib/callgraph/model/CallGraph.d.ts +12 -8
  49. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  50. package/lib/callgraph/model/CallGraph.js +53 -29
  51. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +1 -0
  52. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts.map +1 -1
  53. package/lib/callgraph/model/builder/CallGraphBuilder.js +5 -1
  54. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  55. package/lib/callgraph/pointerAnalysis/Pag.js +3 -0
  56. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +4 -2
  57. package/lib/cli/cli.d.ts +3 -0
  58. package/lib/cli/cli.d.ts.map +1 -0
  59. package/lib/cli/cli.js +82 -0
  60. package/lib/cli/commands/cg.d.ts +32 -0
  61. package/lib/cli/commands/cg.d.ts.map +1 -0
  62. package/lib/cli/commands/cg.js +401 -0
  63. package/lib/cli/commands/index.d.ts +6 -0
  64. package/lib/cli/commands/index.d.ts.map +1 -0
  65. package/lib/cli/commands/index.js +64 -0
  66. package/lib/cli/commands/ir.d.ts +26 -0
  67. package/lib/cli/commands/ir.d.ts.map +1 -0
  68. package/lib/cli/commands/ir.js +94 -0
  69. package/lib/core/base/Constant.d.ts +1 -1
  70. package/lib/core/base/Constant.d.ts.map +1 -1
  71. package/lib/core/base/Constant.js +1 -1
  72. package/lib/core/base/Expr.d.ts +29 -5
  73. package/lib/core/base/Expr.d.ts.map +1 -1
  74. package/lib/core/base/Expr.js +144 -22
  75. package/lib/core/base/Position.d.ts +14 -0
  76. package/lib/core/base/Position.d.ts.map +1 -1
  77. package/lib/core/base/Position.js +27 -0
  78. package/lib/core/base/Ref.d.ts +1 -0
  79. package/lib/core/base/Ref.d.ts.map +1 -1
  80. package/lib/core/base/Ref.js +4 -1
  81. package/lib/core/base/Type.d.ts +64 -24
  82. package/lib/core/base/Type.d.ts.map +1 -1
  83. package/lib/core/base/Type.js +144 -49
  84. package/lib/core/common/ArkError.d.ts +26 -2
  85. package/lib/core/common/ArkError.d.ts.map +1 -1
  86. package/lib/core/common/ArkError.js +56 -2
  87. package/lib/core/common/ArkIRTransformer.d.ts +11 -10
  88. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  89. package/lib/core/common/ArkIRTransformer.js +1 -1
  90. package/lib/core/common/ArkValueTransformer.d.ts +14 -12
  91. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  92. package/lib/core/common/ArkValueTransformer.js +1 -5
  93. package/lib/core/common/Const.d.ts +3 -0
  94. package/lib/core/common/Const.d.ts.map +1 -1
  95. package/lib/core/common/Const.js +4 -1
  96. package/lib/core/common/DummyMainCreater.d.ts +23 -13
  97. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  98. package/lib/core/common/DummyMainCreater.js +66 -43
  99. package/lib/core/common/EtsConst.d.ts +11 -0
  100. package/lib/core/common/EtsConst.d.ts.map +1 -1
  101. package/lib/core/common/EtsConst.js +12 -1
  102. package/lib/core/common/IRInference.d.ts.map +1 -1
  103. package/lib/core/common/IRInference.js +5 -1
  104. package/lib/core/common/ModelUtils.d.ts +4 -7
  105. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  106. package/lib/core/common/ModelUtils.js +77 -110
  107. package/lib/core/common/SdkUtils.d.ts +1 -1
  108. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  109. package/lib/core/common/SdkUtils.js +14 -5
  110. package/lib/core/common/TypeInference.d.ts.map +1 -1
  111. package/lib/core/common/TypeInference.js +9 -3
  112. package/lib/core/graph/BaseExplicitGraph.d.ts +4 -4
  113. package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
  114. package/lib/core/graph/BaseExplicitGraph.js +15 -8
  115. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  116. package/lib/core/graph/Scc.d.ts.map +1 -1
  117. package/lib/core/graph/Scc.js +7 -2
  118. package/lib/core/graph/builder/CfgBuilder.d.ts +10 -7
  119. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
  120. package/lib/core/graph/builder/CfgBuilder.js +12 -5
  121. package/lib/core/inference/Inference.d.ts.map +1 -1
  122. package/lib/core/inference/Inference.js +7 -0
  123. package/lib/core/inference/ModelInference.d.ts +1 -1
  124. package/lib/core/inference/ModelInference.d.ts.map +1 -1
  125. package/lib/core/inference/ValueInference.d.ts +3 -2
  126. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  127. package/lib/core/inference/ValueInference.js +64 -12
  128. package/lib/core/inference/abc/AbcInference.d.ts +28 -2
  129. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  130. package/lib/core/inference/abc/AbcInference.js +105 -4
  131. package/lib/core/model/ArkBaseModel.d.ts +14 -1
  132. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  133. package/lib/core/model/ArkBaseModel.js +61 -2
  134. package/lib/core/model/ArkBody.d.ts.map +1 -1
  135. package/lib/core/model/ArkBody.js +1 -3
  136. package/lib/core/model/ArkClass.d.ts +22 -2
  137. package/lib/core/model/ArkClass.d.ts.map +1 -1
  138. package/lib/core/model/ArkClass.js +59 -28
  139. package/lib/core/model/ArkField.d.ts.map +1 -1
  140. package/lib/core/model/ArkField.js +3 -1
  141. package/lib/core/model/ArkFile.d.ts +4 -1
  142. package/lib/core/model/ArkFile.d.ts.map +1 -1
  143. package/lib/core/model/ArkFile.js +44 -3
  144. package/lib/core/model/ArkImport.d.ts.map +1 -1
  145. package/lib/core/model/ArkImport.js +9 -1
  146. package/lib/core/model/ArkMethod.d.ts +5 -0
  147. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  148. package/lib/core/model/ArkMethod.js +33 -1
  149. package/lib/core/model/ArkNamespace.d.ts +2 -0
  150. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  151. package/lib/core/model/ArkNamespace.js +11 -0
  152. package/lib/core/model/ArkSignature.d.ts +3 -3
  153. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  154. package/lib/core/model/ArkSignature.js +14 -9
  155. package/lib/core/model/builder/ArkClassBuilder.d.ts +2 -0
  156. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  157. package/lib/core/model/builder/ArkClassBuilder.js +3 -3
  158. package/lib/core/model/builder/ArkMethodBuilder.d.ts +4 -1
  159. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  160. package/lib/core/model/builder/ArkMethodBuilder.js +19 -6
  161. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +1 -0
  162. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  163. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -1
  164. package/lib/core/model/builder/BodyBuilder.d.ts +4 -0
  165. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  166. package/lib/core/model/builder/builderUtils.d.ts +1 -0
  167. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  168. package/lib/core/model/builder/builderUtils.js +7 -3
  169. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts +296 -0
  170. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +1 -0
  171. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.js +145 -0
  172. package/lib/frontend/cppFrontend/ast/astUtils.d.ts +51 -0
  173. package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +1 -0
  174. package/lib/frontend/cppFrontend/ast/astUtils.js +470 -0
  175. package/lib/frontend/cppFrontend/ast/const.d.ts +30 -0
  176. package/lib/frontend/cppFrontend/ast/const.d.ts.map +1 -0
  177. package/lib/frontend/cppFrontend/ast/const.js +134 -0
  178. package/lib/frontend/cppFrontend/base/Constant.d.ts +9 -0
  179. package/lib/frontend/cppFrontend/base/Constant.d.ts.map +1 -0
  180. package/lib/frontend/cppFrontend/base/Constant.js +33 -0
  181. package/lib/frontend/cppFrontend/base/Expr.d.ts +174 -0
  182. package/lib/frontend/cppFrontend/base/Expr.d.ts.map +1 -0
  183. package/lib/frontend/cppFrontend/base/Expr.js +530 -0
  184. package/lib/frontend/cppFrontend/base/Ref.d.ts +25 -0
  185. package/lib/frontend/cppFrontend/base/Ref.d.ts.map +1 -0
  186. package/lib/frontend/cppFrontend/base/Ref.js +53 -0
  187. package/lib/frontend/cppFrontend/base/Trap.d.ts +8 -0
  188. package/lib/frontend/cppFrontend/base/Trap.d.ts.map +1 -0
  189. package/lib/frontend/cppFrontend/base/Trap.js +28 -0
  190. package/lib/frontend/cppFrontend/base/Type.d.ts +264 -0
  191. package/lib/frontend/cppFrontend/base/Type.d.ts.map +1 -0
  192. package/lib/frontend/cppFrontend/base/Type.js +600 -0
  193. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +109 -0
  194. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -0
  195. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +925 -0
  196. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +477 -0
  197. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -0
  198. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +2746 -0
  199. package/lib/frontend/cppFrontend/common/Builtin.d.ts +57 -0
  200. package/lib/frontend/cppFrontend/common/Builtin.d.ts.map +1 -0
  201. package/lib/frontend/cppFrontend/common/Builtin.js +106 -0
  202. package/lib/frontend/cppFrontend/common/IRInference.d.ts +94 -0
  203. package/lib/frontend/cppFrontend/common/IRInference.d.ts.map +1 -0
  204. package/lib/frontend/cppFrontend/common/IRInference.js +1087 -0
  205. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +23 -0
  206. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -0
  207. package/lib/frontend/cppFrontend/common/IRUtils.js +168 -0
  208. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts +44 -0
  209. package/lib/frontend/cppFrontend/common/ModelUtils.d.ts.map +1 -0
  210. package/lib/frontend/cppFrontend/common/ModelUtils.js +567 -0
  211. package/lib/frontend/cppFrontend/common/TypeInference.d.ts +278 -0
  212. package/lib/frontend/cppFrontend/common/TypeInference.d.ts.map +1 -0
  213. package/lib/frontend/cppFrontend/common/TypeInference.js +1354 -0
  214. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts +16 -0
  215. package/lib/frontend/cppFrontend/common/ValueUtil.d.ts.map +1 -0
  216. package/lib/frontend/cppFrontend/common/ValueUtil.js +61 -0
  217. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +182 -0
  218. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -0
  219. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +1435 -0
  220. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts +21 -0
  221. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.d.ts.map +1 -0
  222. package/lib/frontend/cppFrontend/graph/builder/ConditionBuilder.js +303 -0
  223. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts +15 -0
  224. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.d.ts.map +1 -0
  225. package/lib/frontend/cppFrontend/graph/builder/IfBuilder.js +161 -0
  226. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts +21 -0
  227. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.d.ts.map +1 -0
  228. package/lib/frontend/cppFrontend/graph/builder/LoopBuilder.js +261 -0
  229. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts +12 -0
  230. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.d.ts.map +1 -0
  231. package/lib/frontend/cppFrontend/graph/builder/SwitchBuilder.js +155 -0
  232. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts +29 -0
  233. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.d.ts.map +1 -0
  234. package/lib/frontend/cppFrontend/graph/builder/TrapBuilder.js +302 -0
  235. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts +10 -0
  236. package/lib/frontend/cppFrontend/inference/CxxInference.d.ts.map +1 -0
  237. package/lib/frontend/cppFrontend/inference/CxxInference.js +41 -0
  238. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts +28 -0
  239. package/lib/frontend/cppFrontend/inference/CxxModelInference.d.ts.map +1 -0
  240. package/lib/frontend/cppFrontend/inference/CxxModelInference.js +98 -0
  241. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts +20 -0
  242. package/lib/frontend/cppFrontend/inference/CxxValueInference.d.ts.map +1 -0
  243. package/lib/frontend/cppFrontend/inference/CxxValueInference.js +128 -0
  244. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +11 -0
  245. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -0
  246. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +413 -0
  247. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +5 -0
  248. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -0
  249. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.js +61 -0
  250. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +17 -0
  251. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -0
  252. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +285 -0
  253. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +6 -0
  254. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -0
  255. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.js +57 -0
  256. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +14 -0
  257. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -0
  258. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +422 -0
  259. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +8 -0
  260. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -0
  261. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +194 -0
  262. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +59 -0
  263. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -0
  264. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.js +605 -0
  265. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +46 -0
  266. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -0
  267. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +499 -0
  268. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts +44 -0
  269. package/lib/frontend/cppFrontend/utils/cmakeUtils.d.ts.map +1 -0
  270. package/lib/frontend/cppFrontend/utils/cmakeUtils.js +240 -0
  271. package/lib/index.d.ts +1 -0
  272. package/lib/index.d.ts.map +1 -1
  273. package/lib/index.js +7 -1
  274. package/lib/node_modules/ohos-typescript/.ohos-typescript-version +1 -0
  275. package/{node_modules → lib/node_modules}/ohos-typescript/package.json +2 -1
  276. package/lib/save/CGJsonPrinter.d.ts +8 -0
  277. package/lib/save/CGJsonPrinter.d.ts.map +1 -0
  278. package/lib/save/CGJsonPrinter.js +41 -0
  279. package/lib/save/GraphPrinter.js +2 -2
  280. package/lib/save/json/JsonDto.d.ts +86 -2
  281. package/lib/save/json/JsonDto.d.ts.map +1 -1
  282. package/lib/save/json/JsonSerialization.d.ts +1 -1
  283. package/lib/save/json/JsonSerialization.d.ts.map +1 -1
  284. package/lib/save/json/JsonSerialization.js +235 -145
  285. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  286. package/lib/save/source/SourceTransformer.js +0 -3
  287. package/lib/utils/CxxSceneUtils.d.ts +11 -0
  288. package/lib/utils/CxxSceneUtils.d.ts.map +1 -0
  289. package/lib/utils/CxxSceneUtils.js +178 -0
  290. package/lib/utils/FileUtils.d.ts +7 -8
  291. package/lib/utils/FileUtils.d.ts.map +1 -1
  292. package/lib/utils/FileUtils.js +27 -45
  293. package/lib/utils/LRUCacheDecorator.d.ts +20 -0
  294. package/lib/utils/LRUCacheDecorator.d.ts.map +1 -0
  295. package/lib/utils/LRUCacheDecorator.js +89 -0
  296. package/lib/utils/ModuleUtils.d.ts +39 -0
  297. package/lib/utils/ModuleUtils.d.ts.map +1 -0
  298. package/lib/utils/ModuleUtils.js +261 -0
  299. package/package.json +10 -7
  300. /package/{node_modules → lib/node_modules}/ohos-typescript/LICENSE +0 -0
  301. /package/{node_modules → lib/node_modules}/ohos-typescript/README.OpenSource +0 -0
  302. /package/{node_modules → lib/node_modules}/ohos-typescript/README.md +0 -0
  303. /package/{node_modules → lib/node_modules}/ohos-typescript/SECURITY.md +0 -0
  304. /package/{node_modules → lib/node_modules}/ohos-typescript/ThirdPartyNoticeText.txt +0 -0
  305. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsc +0 -0
  306. /package/{node_modules → lib/node_modules}/ohos-typescript/bin/tsserver +0 -0
  307. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/README.md +0 -0
  308. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cancellationToken.js +0 -0
  309. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/cs/diagnosticMessages.generated.json +0 -0
  310. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/de/diagnosticMessages.generated.json +0 -0
  311. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/es/diagnosticMessages.generated.json +0 -0
  312. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/fr/diagnosticMessages.generated.json +0 -0
  313. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/it/diagnosticMessages.generated.json +0 -0
  314. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ja/diagnosticMessages.generated.json +0 -0
  315. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ko/diagnosticMessages.generated.json +0 -0
  316. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.d.ts +0 -0
  317. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.d.ts +0 -0
  318. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.dom.iterable.d.ts +0 -0
  319. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.collection.d.ts +0 -0
  320. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.core.d.ts +0 -0
  321. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.d.ts +0 -0
  322. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.generator.d.ts +0 -0
  323. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.iterable.d.ts +0 -0
  324. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.promise.d.ts +0 -0
  325. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.proxy.d.ts +0 -0
  326. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.reflect.d.ts +0 -0
  327. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.d.ts +0 -0
  328. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2015.symbol.wellknown.d.ts +0 -0
  329. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.array.include.d.ts +0 -0
  330. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.d.ts +0 -0
  331. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2016.full.d.ts +0 -0
  332. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.d.ts +0 -0
  333. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.full.d.ts +0 -0
  334. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.intl.d.ts +0 -0
  335. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.object.d.ts +0 -0
  336. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.sharedmemory.d.ts +0 -0
  337. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.string.d.ts +0 -0
  338. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2017.typedarrays.d.ts +0 -0
  339. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asyncgenerator.d.ts +0 -0
  340. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.asynciterable.d.ts +0 -0
  341. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.d.ts +0 -0
  342. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.full.d.ts +0 -0
  343. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.intl.d.ts +0 -0
  344. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.promise.d.ts +0 -0
  345. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2018.regexp.d.ts +0 -0
  346. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.array.d.ts +0 -0
  347. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.d.ts +0 -0
  348. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.full.d.ts +0 -0
  349. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.intl.d.ts +0 -0
  350. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.object.d.ts +0 -0
  351. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.string.d.ts +0 -0
  352. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2019.symbol.d.ts +0 -0
  353. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.bigint.d.ts +0 -0
  354. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.d.ts +0 -0
  355. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.date.d.ts +0 -0
  356. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.full.d.ts +0 -0
  357. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.intl.d.ts +0 -0
  358. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.number.d.ts +0 -0
  359. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.promise.d.ts +0 -0
  360. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.sharedmemory.d.ts +0 -0
  361. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.string.d.ts +0 -0
  362. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2020.symbol.wellknown.d.ts +0 -0
  363. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.d.ts +0 -0
  364. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.full.d.ts +0 -0
  365. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.intl.d.ts +0 -0
  366. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.promise.d.ts +0 -0
  367. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.string.d.ts +0 -0
  368. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2021.weakref.d.ts +0 -0
  369. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.array.d.ts +0 -0
  370. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.d.ts +0 -0
  371. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.error.d.ts +0 -0
  372. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.full.d.ts +0 -0
  373. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.intl.d.ts +0 -0
  374. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.object.d.ts +0 -0
  375. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.sharedmemory.d.ts +0 -0
  376. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es2022.string.d.ts +0 -0
  377. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es5.d.ts +0 -0
  378. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.es6.d.ts +0 -0
  379. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.d.ts +0 -0
  380. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.full.d.ts +0 -0
  381. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.esnext.intl.d.ts +0 -0
  382. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.scripthost.d.ts +0 -0
  383. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.d.ts +0 -0
  384. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.importscripts.d.ts +0 -0
  385. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/lib.webworker.iterable.d.ts +0 -0
  386. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pl/diagnosticMessages.generated.json +0 -0
  387. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/pt-br/diagnosticMessages.generated.json +0 -0
  388. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/ru/diagnosticMessages.generated.json +0 -0
  389. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tr/diagnosticMessages.generated.json +0 -0
  390. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsc.js +0 -0
  391. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserver.js +0 -0
  392. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.d.ts +0 -0
  393. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/tsserverlibrary.js +0 -0
  394. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typesMap.json +0 -0
  395. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.d.ts +0 -0
  396. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typescript.js +0 -0
  397. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/typingsInstaller.js +0 -0
  398. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/watchGuard.js +0 -0
  399. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-cn/diagnosticMessages.generated.json +0 -0
  400. /package/{node_modules → lib/node_modules}/ohos-typescript/lib/zh-tw/diagnosticMessages.generated.json +0 -0
@@ -38,13 +38,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
38
38
  };
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.AbstractAnalysis = void 0;
41
+ const Expr_1 = require("../../core/base/Expr");
42
+ const Stmt_1 = require("../../core/base/Stmt");
41
43
  const Type_1 = require("../../core/base/Type");
42
44
  const logger_1 = __importStar(require("../../utils/logger"));
45
+ const IntWorkList_1 = require("../../utils/IntWorkList");
43
46
  const PtsDS_1 = require("../pointerAnalysis/PtsDS");
44
47
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'CG');
45
48
  class AbstractAnalysis {
46
49
  constructor(s, cg) {
47
- this.workList = [];
50
+ this.workList = new IntWorkList_1.IntWorkList();
48
51
  this.classHierarchyCache = new Map();
49
52
  this.scene = s;
50
53
  this.cg = cg;
@@ -84,8 +87,8 @@ class AbstractAnalysis {
84
87
  }
85
88
  start(displayGeneratedMethod) {
86
89
  this.init();
87
- while (this.workList.length !== 0) {
88
- const method = this.workList.shift();
90
+ while (!this.workList.isEmpty()) {
91
+ const method = this.workList.pop();
89
92
  const cgNode = this.cg.getNode(method);
90
93
  if (this.processedMethod.contains(method) || cgNode.isSdkMethod()) {
91
94
  continue;
@@ -94,9 +97,7 @@ class AbstractAnalysis {
94
97
  this.preProcessMethod(method).forEach((cs) => {
95
98
  this.workList.push(cs.calleeFuncID);
96
99
  });
97
- this.processMethod(method).forEach((cs) => {
98
- this.processCallSite(method, cs, displayGeneratedMethod);
99
- });
100
+ this.processMethod(method, displayGeneratedMethod, false);
100
101
  }
101
102
  }
102
103
  projectStart(displayGeneratedMethod) {
@@ -107,9 +108,7 @@ class AbstractAnalysis {
107
108
  continue;
108
109
  }
109
110
  this.preProcessMethod(cgNode.getID());
110
- this.processMethod(cgNode.getID()).forEach((cs) => {
111
- this.processCallSite(cgNode.getID(), cs, displayGeneratedMethod, true);
112
- });
111
+ this.processMethod(cgNode.getID(), displayGeneratedMethod, true);
113
112
  }
114
113
  this.cgBuilder.setEntries();
115
114
  }
@@ -136,27 +135,28 @@ class AbstractAnalysis {
136
135
  this.workList.push(entryFunc);
137
136
  });
138
137
  }
139
- processMethod(methodID) {
138
+ processMethod(methodID, displayGeneratedMethod, isProject = false) {
140
139
  let cgNode = this.cg.getNode(methodID);
141
140
  let arkMethod = this.scene.getMethod(cgNode.getMethod(), true);
142
- let calleeMethods = [];
143
141
  if (!arkMethod) {
144
142
  throw new Error('can not find method');
145
143
  }
146
144
  const cfg = arkMethod.getCfg();
147
145
  if (!cfg) {
148
- return [];
146
+ return;
149
147
  }
150
- cfg.getStmts().forEach(stmt => {
151
- if (stmt.containsInvokeExpr()) {
148
+ cfg.getBlocks().forEach(block => {
149
+ block.getStmts().forEach(stmt => {
150
+ if (!(stmt instanceof Stmt_1.ArkInvokeStmt || (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Expr_1.AbstractInvokeExpr))) {
151
+ return;
152
+ }
152
153
  this.resolveCall(cgNode.getID(), stmt).forEach(callSite => {
153
- calleeMethods.push(callSite);
154
154
  this.cg.addStmtToCallSiteMap(stmt, callSite);
155
155
  this.cg.addMethodToCallSiteMap(callSite.calleeFuncID, callSite);
156
+ this.processCallSite(methodID, callSite, displayGeneratedMethod, isProject);
156
157
  });
157
- }
158
+ });
158
159
  });
159
- return calleeMethods;
160
160
  }
161
161
  getParamAnonymousMethod(invokeExpr) {
162
162
  let paramMethod = [];
@@ -4,11 +4,16 @@ import { ClassSignature } from '../../core/model/ArkSignature';
4
4
  import { NodeID } from '../../core/graph/BaseExplicitGraph';
5
5
  import { CallGraph, CallSite, FuncID } from '../model/CallGraph';
6
6
  import { AbstractAnalysis } from './AbstractAnalysis';
7
+ import { CallGraphBuilder } from '../model/builder/CallGraphBuilder';
7
8
  export declare class RapidTypeAnalysis extends AbstractAnalysis {
8
9
  private instancedClasses;
9
10
  private ignoredCalls;
10
- constructor(scene: Scene, cg: CallGraph);
11
+ private enableThisPrune;
12
+ constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder, enableThisPrune?: boolean);
13
+ protected init(): void;
11
14
  resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[];
15
+ private tryResolveAggressiveThisPruneCall;
16
+ private resolveConstructorClassFromNew;
12
17
  protected preProcessMethod(funcID: FuncID): CallSite[];
13
18
  private collectInstancedClassesInMethod;
14
19
  addIgnoredCalls(arkClass: ClassSignature, callerID: FuncID, calleeID: FuncID, invokeStmt: Stmt): void;
@@ -1 +1 @@
1
- {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA4DtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
1
+ {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAiB,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAOrE,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;IAC/G,OAAO,CAAC,eAAe,CAAU;gBAErB,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB,EAAE,eAAe,GAAE,OAAe;IAM/F,SAAS,CAAC,IAAI,IAAI,IAAI;IAYf,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA4FtE,OAAO,CAAC,iCAAiC;IAkCzC,OAAO,CAAC,8BAA8B;IAqCtC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IA2BtD,OAAO,CAAC,+BAA+B;IA+BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
@@ -39,16 +39,33 @@ var __importStar = (this && this.__importStar) || function (mod) {
39
39
  Object.defineProperty(exports, "__esModule", { value: true });
40
40
  exports.RapidTypeAnalysis = void 0;
41
41
  const Expr_1 = require("../../core/base/Expr");
42
+ const Stmt_1 = require("../../core/base/Stmt");
42
43
  const AbstractAnalysis_1 = require("./AbstractAnalysis");
43
44
  const logger_1 = __importStar(require("../../utils/logger"));
45
+ const TSConst_1 = require("../../core/common/TSConst");
46
+ const Local_1 = require("../../core/base/Local");
47
+ const Const_1 = require("../../core/common/Const");
44
48
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'RTA');
45
49
  class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
46
- constructor(scene, cg) {
50
+ constructor(scene, cg, cb, enableThisPrune = false) {
47
51
  super(scene, cg);
48
52
  // TODO: signature duplicated check
49
53
  this.instancedClasses = new Set();
50
54
  // TODO: Set duplicated check
51
55
  this.ignoredCalls = new Map();
56
+ this.cgBuilder = cb;
57
+ this.enableThisPrune = enableThisPrune;
58
+ }
59
+ init() {
60
+ this.scene.getClasses().filter(c => c.getName() === Const_1.DEFAULT_ARK_CLASS_NAME).forEach(c => {
61
+ var _a;
62
+ const dfltMethod = (_a = c.getMethodWithName(Const_1.DEFAULT_ARK_METHOD_NAME)) === null || _a === void 0 ? void 0 : _a.getSignature();
63
+ if (dfltMethod) {
64
+ const funcID = this.cg.getCallGraphNodeByMethod(dfltMethod).getID();
65
+ this.workList.push(funcID);
66
+ }
67
+ });
68
+ super.init();
52
69
  }
53
70
  resolveCall(callerMethod, invokeStmt) {
54
71
  let invokeExpr = invokeStmt.getInvokeExpr();
@@ -70,6 +87,31 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
70
87
  }
71
88
  else {
72
89
  let declareClass = calleeMethod.getDeclaringArkClass();
90
+ const methodName = calleeMethod.getName();
91
+ // Aggressive heuristic: when enabled and the call is `this.foo()`,
92
+ // only keep the implementation of `foo` in the current declaring class,
93
+ // or the first superclass that defines it (e.g. B.m() calling this.foo() → A.foo() when B extends A).
94
+ const prunedCallSite = this.tryResolveAggressiveThisPruneCall(invokeStmt, methodName, callerMethod);
95
+ if (prunedCallSite) {
96
+ resolveResult.push(prunedCallSite);
97
+ return resolveResult;
98
+ }
99
+ const directCallSite = this.resolveConstructorClassFromNew(methodName, invokeStmt, callerMethod);
100
+ if (directCallSite) {
101
+ resolveResult.push(directCallSite);
102
+ return resolveResult;
103
+ }
104
+ // Private methods cannot be overridden; only the declaring class has an implementation.
105
+ if (calleeMethod.isPrivate()) {
106
+ const calleeNode = this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature());
107
+ if (this.instancedClasses.has(declareClass.getSignature())) {
108
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeNode.getID(), callerMethod));
109
+ }
110
+ else {
111
+ this.addIgnoredCalls(declareClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
112
+ }
113
+ return resolveResult;
114
+ }
73
115
  // TODO: super class method should be placed at the end
74
116
  this.getClassHierarchy(declareClass).forEach((arkClass) => {
75
117
  let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
@@ -82,26 +124,84 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
82
124
  return;
83
125
  }
84
126
  let calleeNode = this.cg.getCallGraphNodeByMethod(possibleCalleeMethod.getSignature());
85
- if (!this.instancedClasses.has(arkClass.getSignature())) {
86
- this.addIgnoredCalls(arkClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
127
+ const isSdkClass = this.scene.hasSdkFile(arkClass.getSignature().getDeclaringFileSignature());
128
+ const isInstanced = this.instancedClasses.has(arkClass.getSignature());
129
+ if (isSdkClass || isInstanced) {
130
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeNode.getID(), callerMethod));
87
131
  }
88
132
  else {
89
- resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, calleeNode.getID(), callerMethod));
133
+ this.addIgnoredCalls(arkClass.getSignature(), callerMethod, calleeNode.getID(), invokeStmt);
90
134
  }
91
135
  });
92
136
  }
93
137
  return resolveResult;
94
138
  }
139
+ tryResolveAggressiveThisPruneCall(invokeStmt, methodName, callerMethod) {
140
+ const invokeExpr = invokeStmt.getInvokeExpr();
141
+ if (!this.enableThisPrune || !(invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr)) {
142
+ return null;
143
+ }
144
+ const base = invokeExpr.getBase();
145
+ if (!base.getName || base.getName() !== TSConst_1.THIS_NAME) {
146
+ return null;
147
+ }
148
+ // Start from the declaring class of this call site, then walk up the super chain.
149
+ // Pick the first non-abstract implementation of `methodName`.
150
+ let curClass = invokeStmt.getCfg().getDeclaringMethod().getDeclaringArkClass();
151
+ while (curClass) {
152
+ const methodInClass = curClass.getMethodWithName(methodName);
153
+ if (methodInClass && !methodInClass.isAbstract()) {
154
+ return this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(methodInClass.getSignature()).getID(), callerMethod);
155
+ }
156
+ curClass = curClass.getSuperClass();
157
+ }
158
+ return null;
159
+ }
160
+ resolveConstructorClassFromNew(methodName, invokeStmt, callerMethod) {
161
+ var _a;
162
+ if (methodName !== TSConst_1.CONSTRUCTOR_NAME) {
163
+ return null;
164
+ }
165
+ if (!(invokeStmt instanceof Stmt_1.ArkAssignStmt)) {
166
+ return null;
167
+ }
168
+ const leftOp = invokeStmt.getLeftOp();
169
+ if (!(leftOp instanceof Local_1.Local)) {
170
+ return null;
171
+ }
172
+ const declaringStmt = leftOp.getDeclaringStmt();
173
+ if (!(declaringStmt && declaringStmt instanceof Stmt_1.ArkAssignStmt)) {
174
+ return null;
175
+ }
176
+ const rightOp = declaringStmt.getRightOp();
177
+ if (!(rightOp instanceof Expr_1.ArkNewExpr)) {
178
+ return null;
179
+ }
180
+ const classSig = rightOp.getClassType().getClassSignature();
181
+ const constructorMethod = (_a = this.scene.getClass(classSig)) === null || _a === void 0 ? void 0 : _a.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
182
+ if (!constructorMethod) {
183
+ return null;
184
+ }
185
+ return this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(constructorMethod.getSignature()).getID(), callerMethod);
186
+ }
95
187
  preProcessMethod(funcID) {
96
188
  let newCallSites = [];
97
189
  let instancedClasses = this.collectInstancedClassesInMethod(funcID);
98
- let newlyInstancedClasses = new Set(Array.from(instancedClasses).filter(item => !this.instancedClasses.has(item)));
190
+ let newlyInstancedClasses = new Set();
191
+ for (const sig of instancedClasses) {
192
+ if (!this.instancedClasses.has(sig)) {
193
+ newlyInstancedClasses.add(sig);
194
+ }
195
+ }
99
196
  newlyInstancedClasses.forEach(sig => {
100
197
  let ignoredCalls = this.ignoredCalls.get(sig);
101
198
  if (ignoredCalls) {
102
199
  ignoredCalls.forEach(call => {
103
200
  this.cg.addDynamicCallEdge(call.caller, call.callee, call.callStmt);
104
- newCallSites.push(this.cg.getCallSiteManager().newCallSite(call.callStmt, undefined, call.callee, call.caller));
201
+ const newCallSite = this.cg.getCallSiteManager().newCallSite(call.callStmt, undefined, call.callee, call.caller);
202
+ this.cg.addStmtToCallSiteMap(call.callStmt, newCallSite);
203
+ this.cg.addMethodToCallSiteMap(call.callee, newCallSite);
204
+ newCallSites.push(newCallSite);
105
205
  });
106
206
  }
107
207
  this.instancedClasses.add(sig);
@@ -118,17 +218,20 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
118
218
  }
119
219
  let cfg = arkMethod.getCfg();
120
220
  if (!cfg) {
121
- logger.error(`arkMethod ${arkMethod.getSignature().toString()} has no cfg`);
122
221
  return instancedClasses;
123
222
  }
124
223
  for (let stmt of cfg.getStmts()) {
125
- let stmtExpr = stmt.getExprs()[0];
126
- if (stmtExpr instanceof Expr_1.ArkNewExpr) {
127
- let classSig = stmtExpr.getType().getClassSignature();
128
- if (classSig != null) {
129
- // TODO: need to check if different stmt has single sig
130
- instancedClasses.add(classSig);
131
- }
224
+ let stmtExpr;
225
+ if (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getRightOp() instanceof Expr_1.ArkNewExpr) {
226
+ stmtExpr = stmt.getRightOp();
227
+ }
228
+ else {
229
+ continue;
230
+ }
231
+ let classSig = stmtExpr.getType().getClassSignature();
232
+ if (classSig != null) {
233
+ // TODO: need to check if different stmt has single sig
234
+ instancedClasses.add(classSig);
132
235
  }
133
236
  }
134
237
  return instancedClasses;
@@ -1,4 +1,4 @@
1
- import { CallGraphNodeKind } from '../model/CallGraph';
1
+ import { CallGraph, CallGraphNodeKind } from '../model/CallGraph';
2
2
  import { PointerAnalysis } from '../pointerAnalysis/PointerAnalysis';
3
3
  declare abstract class StatTraits {
4
4
  TotalTime: number;
@@ -53,8 +53,10 @@ export declare class CGStat extends StatTraits {
53
53
  numIntrinsic: number;
54
54
  numConstructor: number;
55
55
  numBlank: number;
56
+ numTotalEdge: number;
56
57
  startStat(): void;
57
- endStat(): void;
58
+ endStat(cg?: CallGraph): void;
59
+ private computeEdgeStat;
58
60
  addNodeStat(kind: CallGraphNodeKind): void;
59
61
  getStat(): string;
60
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAQrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IAUjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;IAC3B,QAAQ,EAAE,MAAM,CAAK;IAEd,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAKf,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAoB1C,OAAO,IAAI,MAAM;CAa3B"}
1
+ {"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,SAAS,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAQrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IAUjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;IAC3B,QAAQ,EAAE,MAAM,CAAK;IAGrB,YAAY,EAAE,MAAM,CAAK;IAElB,SAAS,IAAI,IAAI;IAIjB,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI;IAQpC,OAAO,CAAC,eAAe;IAOhB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAoB1C,OAAO,IAAI,MAAM;CAc3B"}
@@ -225,13 +225,24 @@ class CGStat extends StatTraits {
225
225
  this.numIntrinsic = 0;
226
226
  this.numConstructor = 0;
227
227
  this.numBlank = 0;
228
+ // edge statistics
229
+ this.numTotalEdge = 0;
228
230
  }
229
231
  startStat() {
230
232
  this.startTime = new Date().getTime();
231
233
  }
232
- endStat() {
234
+ endStat(cg) {
233
235
  this.endTime = new Date().getTime();
234
236
  this.TotalTime = (this.endTime - this.startTime) / 1000;
237
+ if (cg) {
238
+ this.computeEdgeStat(cg);
239
+ }
240
+ }
241
+ computeEdgeStat(cg) {
242
+ this.numTotalEdge = 0;
243
+ for (const _edge of cg.getCallEdges()) {
244
+ this.numTotalEdge++;
245
+ }
235
246
  }
236
247
  addNodeStat(kind) {
237
248
  switch (kind) {
@@ -262,7 +273,8 @@ ${'Intrinsic function'.padEnd(LABEL_WIDTH)}${this.numIntrinsic}
262
273
  ${'Constructor function'.padEnd(LABEL_WIDTH)}${this.numConstructor}
263
274
  ${'Virtual function'.padEnd(LABEL_WIDTH)}${this.numVirtual}
264
275
  ${'Blank function'.padEnd(LABEL_WIDTH)}${this.numBlank}
265
- ${'Total'.padEnd(LABEL_WIDTH)}${this.numTotalNode}`;
276
+ ${'Total node'.padEnd(LABEL_WIDTH)}${this.numTotalNode}
277
+ ${'Total edge'.padEnd(LABEL_WIDTH)}${this.numTotalEdge}`;
266
278
  }
267
279
  }
268
280
  exports.CGStat = CGStat;
@@ -15,13 +15,14 @@ export declare enum CallGraphNodeKind {
15
15
  blank = 4
16
16
  }
17
17
  export declare class CallGraphEdge extends BaseEdge {
18
- private directCalls;
19
- private specialCalls;
20
- private indirectCalls;
18
+ private flags;
21
19
  constructor(src: CallGraphNode, dst: CallGraphNode);
22
- addDirectCallSite(stmt: Stmt): void;
23
- addSpecialCallSite(stmt: Stmt): void;
24
- addInDirectCallSite(stmt: Stmt): void;
20
+ addDirectCallSite(_stmt: Stmt): void;
21
+ addSpecialCallSite(_stmt: Stmt): void;
22
+ addInDirectCallSite(_stmt: Stmt): void;
23
+ hasDirectCall(): boolean;
24
+ hasIndirectCall(): boolean;
25
+ hasSpecialCall(): boolean;
25
26
  getDotAttr(): string;
26
27
  }
27
28
  export declare class CallGraphNode extends BaseNode {
@@ -44,11 +45,12 @@ export declare class CallGraph extends BaseExplicitGraph {
44
45
  private callPairToEdgeMap;
45
46
  private methodToCallSiteMap;
46
47
  private entries;
47
- private cgStat;
48
+ private cgStat?;
48
49
  private dummyMainMethodID;
49
- constructor(s: Scene);
50
+ constructor(s: Scene, enableStatistics?: boolean);
50
51
  private getCallPairString;
51
52
  getCallEdgeByPair(srcID: NodeID, dstID: NodeID): CallGraphEdge | undefined;
53
+ getCallEdges(): Iterable<CallGraphEdge>;
52
54
  addCallGraphNode(method: Method, kind?: CallGraphNodeKind): CallGraphNode;
53
55
  removeCallGraphNode(nodeID: NodeID): void;
54
56
  getCallGraphNodeByMethod(method: Method): CallGraphNode;
@@ -67,7 +69,9 @@ export declare class CallGraph extends BaseExplicitGraph {
67
69
  getArkMethodByFuncID(id: FuncID): ArkMethod | null;
68
70
  getEntries(): FuncID[];
69
71
  setEntries(n: NodeID[]): void;
72
+ getCallPairEdges(): Map<string, CallGraphEdge>;
70
73
  dump(name: string, entry?: FuncID): void;
74
+ dump2Json(name: string): void;
71
75
  detectReachable(fromID: FuncID, dstID: FuncID): boolean;
72
76
  startStat(): void;
73
77
  endStat(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ const Const_1 = require("../../core/common/Const");
24
24
  const CallSite_1 = require("./CallSite");
25
25
  Object.defineProperty(exports, "CallSite", { enumerable: true, get: function () { return CallSite_1.CallSite; } });
26
26
  Object.defineProperty(exports, "DynCallSite", { enumerable: true, get: function () { return CallSite_1.DynCallSite; } });
27
+ const CGJsonPrinter_1 = require("../../save/CGJsonPrinter");
27
28
  var CallGraphNodeKind;
28
29
  (function (CallGraphNodeKind) {
29
30
  CallGraphNodeKind[CallGraphNodeKind["real"] = 0] = "real";
@@ -32,34 +33,40 @@ var CallGraphNodeKind;
32
33
  CallGraphNodeKind[CallGraphNodeKind["constructor"] = 3] = "constructor";
33
34
  CallGraphNodeKind[CallGraphNodeKind["blank"] = 4] = "blank";
34
35
  })(CallGraphNodeKind = exports.CallGraphNodeKind || (exports.CallGraphNodeKind = {}));
36
+ const EDGE_FLAG_DIRECT = 1;
37
+ const EDGE_FLAG_SPECIAL = 2;
38
+ const EDGE_FLAG_INDIRECT = 4;
35
39
  class CallGraphEdge extends BaseExplicitGraph_1.BaseEdge {
36
- // private callSiteID: CallSiteID;
37
40
  constructor(src, dst) {
38
41
  super(src, dst, 0);
39
- this.directCalls = new Set();
40
- this.specialCalls = new Set();
41
- this.indirectCalls = new Set();
42
+ this.flags = 0;
42
43
  }
43
- addDirectCallSite(stmt) {
44
- this.directCalls.add(stmt);
44
+ addDirectCallSite(_stmt) {
45
+ this.flags |= EDGE_FLAG_DIRECT;
45
46
  }
46
- addSpecialCallSite(stmt) {
47
- this.specialCalls.add(stmt);
47
+ addSpecialCallSite(_stmt) {
48
+ this.flags |= EDGE_FLAG_SPECIAL;
48
49
  }
49
- addInDirectCallSite(stmt) {
50
- this.indirectCalls.add(stmt);
50
+ addInDirectCallSite(_stmt) {
51
+ this.flags |= EDGE_FLAG_INDIRECT;
52
+ }
53
+ hasDirectCall() {
54
+ return (this.flags & EDGE_FLAG_DIRECT) !== 0;
55
+ }
56
+ hasIndirectCall() {
57
+ return (this.flags & EDGE_FLAG_INDIRECT) !== 0;
58
+ }
59
+ hasSpecialCall() {
60
+ return (this.flags & EDGE_FLAG_SPECIAL) !== 0;
51
61
  }
52
62
  getDotAttr() {
53
- const indirectCallNums = this.indirectCalls.size;
54
- const directCallNums = this.directCalls.size;
55
- const specialCallNums = this.specialCalls.size;
56
- if (indirectCallNums !== 0 && directCallNums === 0) {
63
+ if (this.hasIndirectCall() && !this.hasDirectCall()) {
57
64
  return 'color=red';
58
65
  }
59
- else if (specialCallNums !== 0) {
66
+ else if (this.hasSpecialCall()) {
60
67
  return 'color=yellow';
61
68
  }
62
- else if (indirectCallNums === 0 && directCallNums !== 0) {
69
+ else if (this.hasDirectCall()) {
63
70
  return 'color=black';
64
71
  }
65
72
  else {
@@ -97,7 +104,7 @@ class CallGraphNode extends BaseExplicitGraph_1.BaseNode {
97
104
  }
98
105
  exports.CallGraphNode = CallGraphNode;
99
106
  class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
100
- constructor(s) {
107
+ constructor(s, enableStatistics = false) {
101
108
  super();
102
109
  this.csManager = new CallSite_1.CallSiteManager();
103
110
  this.stmtToCallSitemap = new Map();
@@ -106,7 +113,9 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
106
113
  this.callPairToEdgeMap = new Map();
107
114
  this.methodToCallSiteMap = new Map();
108
115
  this.scene = s;
109
- this.cgStat = new Statistics_1.CGStat();
116
+ if (enableStatistics) {
117
+ this.cgStat = new Statistics_1.CGStat();
118
+ }
110
119
  }
111
120
  getCallPairString(srcID, dstID) {
112
121
  return `${srcID}-${dstID}`;
@@ -115,14 +124,18 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
115
124
  let key = this.getCallPairString(srcID, dstID);
116
125
  return this.callPairToEdgeMap.get(key);
117
126
  }
127
+ getCallEdges() {
128
+ return this.callPairToEdgeMap.values();
129
+ }
118
130
  addCallGraphNode(method, kind = CallGraphNodeKind.real) {
131
+ var _a;
119
132
  let id = this.nodeNum;
120
133
  let cgNode = new CallGraphNode(id, method, kind);
121
134
  // check if sdk method
122
135
  cgNode.setSdkMethod(this.scene.hasSdkFile(method.getDeclaringClassSignature().getDeclaringFileSignature()));
123
136
  this.addNode(cgNode);
124
137
  this.methodToCGNodeMap.set(method.toString(), cgNode.getID());
125
- this.cgStat.addNodeStat(kind);
138
+ (_a = this.cgStat) === null || _a === void 0 ? void 0 : _a.addNodeStat(kind);
126
139
  return cgNode;
127
140
  }
128
141
  removeCallGraphNode(nodeID) {
@@ -173,11 +186,12 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
173
186
  }
174
187
  }
175
188
  removeCallGraphEdge(nodeID) {
189
+ var _a, _b;
176
190
  let node = this.getNode(nodeID);
177
- for (const inEdge of node.getIncomingEdge()) {
191
+ for (const inEdge of (_a = node.getIncomingEdge()) !== null && _a !== void 0 ? _a : []) {
178
192
  node.removeIncomingEdge(inEdge);
179
193
  }
180
- for (const outEdge of node.getOutgoingEdges()) {
194
+ for (const outEdge of (_b = node.getOutgoingEdges()) !== null && _b !== void 0 ? _b : []) {
181
195
  node.removeIncomingEdge(outEdge);
182
196
  }
183
197
  }
@@ -212,10 +226,8 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
212
226
  return this.stmtToDynCallSitemap.get(stmt);
213
227
  }
214
228
  addStmtToCallSiteMap(stmt, cs) {
215
- var _a;
216
229
  if (this.stmtToCallSitemap.has(stmt)) {
217
- let callSites = (_a = this.stmtToCallSitemap.get(stmt)) !== null && _a !== void 0 ? _a : [];
218
- this.stmtToCallSitemap.set(stmt, [...callSites, cs]);
230
+ this.stmtToCallSitemap.get(stmt).push(cs);
219
231
  return false;
220
232
  }
221
233
  this.stmtToCallSitemap.set(stmt, [cs]);
@@ -289,6 +301,9 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
289
301
  setEntries(n) {
290
302
  this.entries = n;
291
303
  }
304
+ getCallPairEdges() {
305
+ return this.callPairToEdgeMap;
306
+ }
292
307
  dump(name, entry) {
293
308
  let printer = new GraphPrinter_1.GraphPrinter(this);
294
309
  if (entry) {
@@ -296,7 +311,12 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
296
311
  }
297
312
  PrinterBuilder_1.PrinterBuilder.dump(printer, name);
298
313
  }
314
+ dump2Json(name) {
315
+ let printer = new CGJsonPrinter_1.CallGraphJsonPrinter(this);
316
+ PrinterBuilder_1.PrinterBuilder.dump(printer, name);
317
+ }
299
318
  detectReachable(fromID, dstID) {
319
+ var _a;
300
320
  let dWorklist = [];
301
321
  let travserdFuncs = new Set();
302
322
  dWorklist.push(fromID);
@@ -307,7 +327,7 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
307
327
  }
308
328
  travserdFuncs.add(nodeID);
309
329
  let node = this.getNode(nodeID);
310
- for (let e of node.getOutgoingEdges()) {
330
+ for (let e of (_a = node.getOutgoingEdges()) !== null && _a !== void 0 ? _a : []) {
311
331
  let dst = e.getDstID();
312
332
  if (dst === dstID) {
313
333
  return true;
@@ -318,16 +338,20 @@ class CallGraph extends BaseExplicitGraph_1.BaseExplicitGraph {
318
338
  return false;
319
339
  }
320
340
  startStat() {
321
- this.cgStat.startStat();
341
+ var _a;
342
+ (_a = this.cgStat) === null || _a === void 0 ? void 0 : _a.startStat();
322
343
  }
323
344
  endStat() {
324
- this.cgStat.endStat();
345
+ var _a;
346
+ (_a = this.cgStat) === null || _a === void 0 ? void 0 : _a.endStat(this);
325
347
  }
326
348
  printStat() {
327
- this.cgStat.printStat();
349
+ var _a;
350
+ (_a = this.cgStat) === null || _a === void 0 ? void 0 : _a.printStat();
328
351
  }
329
352
  getStat() {
330
- return this.cgStat.getStat();
353
+ var _a, _b;
354
+ return (_b = (_a = this.cgStat) === null || _a === void 0 ? void 0 : _a.getStat()) !== null && _b !== void 0 ? _b : '';
331
355
  }
332
356
  setDummyMainFuncID(dummyMainMethodID) {
333
357
  this.dummyMainMethodID = dummyMainMethodID;
@@ -10,6 +10,7 @@ export declare class CallGraphBuilder {
10
10
  buildDirectCallGraph(methods: ArkMethod[]): void;
11
11
  buildClassHierarchyCallGraph(entries: Method[], displayGeneratedMethod?: boolean): void;
12
12
  buildCHA4WholeProject(displayGeneratedMethod?: boolean): void;
13
+ buildRTA4WholeProject(displayGeneratedMethod?: boolean): void;
13
14
  buildRapidTypeCallGraph(entries: Method[], displayGeneratedMethod?: boolean): void;
14
15
  private getDCCallee;
15
16
  setEntries(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IA2BhD,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAW9F,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAYhG,OAAO,CAAC,WAAW;IAIZ,UAAU,IAAI,IAAI;CAO5B"}
1
+ {"version":3,"file":"CallGraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/model/builder/CallGraphBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAoC,MAAM,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAQ;gBAET,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK;IAK3B,4BAA4B,IAAI,IAAI;IAWpC,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IAgBxC,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI;IA2BhD,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAW9F,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,qBAAqB,CAAC,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAKpE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,sBAAsB,GAAE,OAAe,GAAG,IAAI;IAYhG,OAAO,CAAC,WAAW;IAIZ,UAAU,IAAI,IAAI;CAO5B"}
@@ -87,13 +87,17 @@ class CallGraphBuilder {
87
87
  let classHierarchyAnalysis = new ClassHierarchyAnalysis_1.ClassHierarchyAnalysis(this.scene, this.cg, this);
88
88
  classHierarchyAnalysis.projectStart(displayGeneratedMethod);
89
89
  }
90
+ buildRTA4WholeProject(displayGeneratedMethod = false) {
91
+ let rapidTypeAnalysis = new RapidTypeAnalysis_1.RapidTypeAnalysis(this.scene, this.cg, this);
92
+ rapidTypeAnalysis.projectStart(displayGeneratedMethod);
93
+ }
90
94
  buildRapidTypeCallGraph(entries, displayGeneratedMethod = false) {
91
95
  let cgEntries = [];
92
96
  entries.forEach((entry) => {
93
97
  cgEntries.push(this.cg.getCallGraphNodeByMethod(entry).getID());
94
98
  });
95
99
  this.cg.setEntries(cgEntries);
96
- let rapidTypeAnalysis = new RapidTypeAnalysis_1.RapidTypeAnalysis(this.scene, this.cg);
100
+ let rapidTypeAnalysis = new RapidTypeAnalysis_1.RapidTypeAnalysis(this.scene, this.cg, this);
97
101
  rapidTypeAnalysis.start(displayGeneratedMethod);
98
102
  }
99
103
  /// Get direct call callee