arkanalyzer 1.0.20 → 1.0.22

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 (292) hide show
  1. package/config/arkanalyzer.json +14 -13
  2. package/lib/Config.d.ts +70 -70
  3. package/lib/Config.js +198 -198
  4. package/lib/Scene.d.ts +316 -316
  5. package/lib/Scene.js +1316 -1316
  6. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -28
  7. package/lib/callgraph/algorithm/AbstractAnalysis.js +144 -144
  8. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +10 -10
  9. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +69 -69
  10. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +15 -15
  11. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +146 -146
  12. package/lib/callgraph/common/Statistics.d.ts +57 -57
  13. package/lib/callgraph/common/Statistics.js +228 -228
  14. package/lib/callgraph/model/CallGraph.d.ts +96 -96
  15. package/lib/callgraph/model/CallGraph.js +354 -354
  16. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +15 -15
  17. package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -106
  18. package/lib/callgraph/pointerAnalysis/Context.d.ts +37 -37
  19. package/lib/callgraph/pointerAnalysis/Context.js +155 -155
  20. package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +22 -22
  21. package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -104
  22. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +5 -5
  23. package/lib/callgraph/pointerAnalysis/PTAUtils.js +46 -46
  24. package/lib/callgraph/pointerAnalysis/Pag.d.ts +261 -261
  25. package/lib/callgraph/pointerAnalysis/Pag.js +930 -930
  26. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +157 -157
  27. package/lib/callgraph/pointerAnalysis/PagBuilder.js +1399 -1399
  28. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +72 -72
  29. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +573 -573
  30. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +15 -15
  31. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +81 -81
  32. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +80 -80
  33. package/lib/callgraph/pointerAnalysis/PtsDS.js +308 -308
  34. package/lib/core/base/Constant.d.ts +48 -48
  35. package/lib/core/base/Constant.js +103 -103
  36. package/lib/core/base/Decorator.d.ts +15 -15
  37. package/lib/core/base/Decorator.js +46 -46
  38. package/lib/core/base/DefUseChain.d.ts +8 -8
  39. package/lib/core/base/DefUseChain.js +25 -25
  40. package/lib/core/base/Expr.d.ts +340 -340
  41. package/lib/core/base/Expr.js +917 -917
  42. package/lib/core/base/Local.d.ts +104 -104
  43. package/lib/core/base/Local.js +176 -176
  44. package/lib/core/base/Position.d.ts +30 -30
  45. package/lib/core/base/Position.js +147 -147
  46. package/lib/core/base/Ref.d.ts +173 -173
  47. package/lib/core/base/Ref.d.ts.map +1 -1
  48. package/lib/core/base/Ref.js +373 -374
  49. package/lib/core/base/Stmt.d.ts +237 -237
  50. package/lib/core/base/Stmt.js +525 -525
  51. package/lib/core/base/Trap.d.ts +8 -8
  52. package/lib/core/base/Trap.js +30 -30
  53. package/lib/core/base/Type.d.ts +308 -308
  54. package/lib/core/base/Type.js +639 -639
  55. package/lib/core/base/TypeExpr.d.ts +71 -71
  56. package/lib/core/base/TypeExpr.js +155 -155
  57. package/lib/core/base/Value.d.ts +32 -32
  58. package/lib/core/base/Value.js +16 -16
  59. package/lib/core/common/ArkError.d.ts +14 -14
  60. package/lib/core/common/ArkError.js +28 -28
  61. package/lib/core/common/ArkIRTransformer.d.ts +68 -67
  62. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  63. package/lib/core/common/ArkIRTransformer.js +705 -690
  64. package/lib/core/common/ArkValueTransformer.d.ts +89 -89
  65. package/lib/core/common/ArkValueTransformer.js +1478 -1478
  66. package/lib/core/common/Builtin.d.ts +36 -36
  67. package/lib/core/common/Builtin.js +81 -81
  68. package/lib/core/common/Const.d.ts +21 -21
  69. package/lib/core/common/Const.js +43 -43
  70. package/lib/core/common/DummyMainCreater.d.ts +46 -46
  71. package/lib/core/common/DummyMainCreater.js +319 -319
  72. package/lib/core/common/EtsConst.d.ts +73 -73
  73. package/lib/core/common/EtsConst.js +1021 -1021
  74. package/lib/core/common/ExprUseReplacer.d.ts +21 -21
  75. package/lib/core/common/ExprUseReplacer.js +124 -124
  76. package/lib/core/common/IRInference.d.ts +45 -36
  77. package/lib/core/common/IRInference.d.ts.map +1 -1
  78. package/lib/core/common/IRInference.js +731 -648
  79. package/lib/core/common/IRUtils.d.ts +18 -18
  80. package/lib/core/common/IRUtils.js +141 -141
  81. package/lib/core/common/ModelUtils.d.ts +70 -70
  82. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  83. package/lib/core/common/ModelUtils.js +723 -712
  84. package/lib/core/common/RefUseReplacer.d.ts +13 -13
  85. package/lib/core/common/RefUseReplacer.js +52 -52
  86. package/lib/core/common/SdkUtils.d.ts +11 -8
  87. package/lib/core/common/SdkUtils.d.ts.map +1 -1
  88. package/lib/core/common/SdkUtils.js +127 -105
  89. package/lib/core/common/StmtDefReplacer.d.ts +12 -12
  90. package/lib/core/common/StmtDefReplacer.js +41 -41
  91. package/lib/core/common/StmtUseReplacer.d.ts +16 -16
  92. package/lib/core/common/StmtUseReplacer.js +108 -108
  93. package/lib/core/common/TSConst.d.ts +20 -18
  94. package/lib/core/common/TSConst.d.ts.map +1 -1
  95. package/lib/core/common/TSConst.js +38 -36
  96. package/lib/core/common/TypeInference.d.ts +105 -102
  97. package/lib/core/common/TypeInference.d.ts.map +1 -1
  98. package/lib/core/common/TypeInference.js +806 -748
  99. package/lib/core/common/ValueUtil.d.ts +12 -12
  100. package/lib/core/common/ValueUtil.js +54 -54
  101. package/lib/core/common/VisibleValue.d.ts +36 -36
  102. package/lib/core/common/VisibleValue.js +212 -212
  103. package/lib/core/dataflow/DataflowProblem.d.ts +20 -20
  104. package/lib/core/dataflow/DataflowProblem.js +20 -20
  105. package/lib/core/dataflow/DataflowResult.d.ts +7 -7
  106. package/lib/core/dataflow/DataflowResult.js +26 -26
  107. package/lib/core/dataflow/DataflowSolver.d.ts +43 -43
  108. package/lib/core/dataflow/DataflowSolver.js +307 -307
  109. package/lib/core/dataflow/Edge.d.ts +11 -11
  110. package/lib/core/dataflow/Edge.js +31 -31
  111. package/lib/core/dataflow/Fact.d.ts +6 -6
  112. package/lib/core/dataflow/Fact.js +24 -24
  113. package/lib/core/dataflow/GenericDataFlow.d.ts +142 -142
  114. package/lib/core/dataflow/GenericDataFlow.js +109 -109
  115. package/lib/core/dataflow/ReachingDef.d.ts +62 -62
  116. package/lib/core/dataflow/ReachingDef.js +168 -168
  117. package/lib/core/dataflow/UndefinedVariable.d.ts +45 -45
  118. package/lib/core/dataflow/UndefinedVariable.js +288 -288
  119. package/lib/core/dataflow/Util.d.ts +9 -9
  120. package/lib/core/dataflow/Util.js +64 -64
  121. package/lib/core/graph/BaseExplicitGraph.d.ts +58 -58
  122. package/lib/core/graph/BaseExplicitGraph.js +157 -157
  123. package/lib/core/graph/BaseImplicitGraph.d.ts +77 -77
  124. package/lib/core/graph/BaseImplicitGraph.js +78 -78
  125. package/lib/core/graph/BasicBlock.d.ts +104 -104
  126. package/lib/core/graph/BasicBlock.js +280 -280
  127. package/lib/core/graph/Cfg.d.ts +59 -59
  128. package/lib/core/graph/Cfg.js +282 -282
  129. package/lib/core/graph/DependsGraph.d.ts +35 -35
  130. package/lib/core/graph/DependsGraph.js +87 -87
  131. package/lib/core/graph/DominanceFinder.d.ts +15 -15
  132. package/lib/core/graph/DominanceFinder.js +121 -121
  133. package/lib/core/graph/DominanceTree.d.ts +12 -12
  134. package/lib/core/graph/DominanceTree.js +70 -70
  135. package/lib/core/graph/GraphTraits.d.ts +7 -7
  136. package/lib/core/graph/GraphTraits.js +16 -16
  137. package/lib/core/graph/Scc.d.ts +61 -61
  138. package/lib/core/graph/Scc.js +222 -222
  139. package/lib/core/graph/ViewTree.d.ts +114 -114
  140. package/lib/core/graph/ViewTree.js +16 -16
  141. package/lib/core/graph/builder/CfgBuilder.d.ts +176 -176
  142. package/lib/core/graph/builder/CfgBuilder.js +1139 -1139
  143. package/lib/core/graph/builder/ConditionBuilder.d.ts +15 -15
  144. package/lib/core/graph/builder/ConditionBuilder.js +252 -252
  145. package/lib/core/graph/builder/LoopBuilder.d.ts +20 -20
  146. package/lib/core/graph/builder/LoopBuilder.js +251 -251
  147. package/lib/core/graph/builder/SwitchBuilder.d.ts +11 -11
  148. package/lib/core/graph/builder/SwitchBuilder.js +152 -152
  149. package/lib/core/graph/builder/TrapBuilder.d.ts +16 -16
  150. package/lib/core/graph/builder/TrapBuilder.js +272 -272
  151. package/lib/core/graph/builder/ViewTreeBuilder.d.ts +203 -203
  152. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  153. package/lib/core/graph/builder/ViewTreeBuilder.js +1058 -1055
  154. package/lib/core/model/ArkBaseModel.d.ts +59 -59
  155. package/lib/core/model/ArkBaseModel.js +274 -274
  156. package/lib/core/model/ArkBody.d.ts +24 -24
  157. package/lib/core/model/ArkBody.js +65 -65
  158. package/lib/core/model/ArkClass.d.ts +206 -206
  159. package/lib/core/model/ArkClass.d.ts.map +1 -1
  160. package/lib/core/model/ArkClass.js +442 -439
  161. package/lib/core/model/ArkExport.d.ts +72 -72
  162. package/lib/core/model/ArkExport.js +147 -147
  163. package/lib/core/model/ArkField.d.ts +62 -62
  164. package/lib/core/model/ArkField.js +113 -113
  165. package/lib/core/model/ArkFile.d.ts +131 -131
  166. package/lib/core/model/ArkFile.js +267 -267
  167. package/lib/core/model/ArkImport.d.ts +44 -44
  168. package/lib/core/model/ArkImport.js +108 -108
  169. package/lib/core/model/ArkMetadata.d.ts +31 -31
  170. package/lib/core/model/ArkMetadata.js +55 -55
  171. package/lib/core/model/ArkMethod.d.ts +261 -261
  172. package/lib/core/model/ArkMethod.js +592 -592
  173. package/lib/core/model/ArkNamespace.d.ts +66 -66
  174. package/lib/core/model/ArkNamespace.js +209 -209
  175. package/lib/core/model/ArkSignature.d.ts +167 -162
  176. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  177. package/lib/core/model/ArkSignature.js +393 -379
  178. package/lib/core/model/builder/ArkClassBuilder.d.ts +12 -12
  179. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  180. package/lib/core/model/builder/ArkClassBuilder.js +423 -454
  181. package/lib/core/model/builder/ArkExportBuilder.d.ts +24 -24
  182. package/lib/core/model/builder/ArkExportBuilder.js +210 -210
  183. package/lib/core/model/builder/ArkFieldBuilder.d.ts +8 -8
  184. package/lib/core/model/builder/ArkFieldBuilder.js +193 -193
  185. package/lib/core/model/builder/ArkFileBuilder.d.ts +9 -9
  186. package/lib/core/model/builder/ArkFileBuilder.js +165 -165
  187. package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -4
  188. package/lib/core/model/builder/ArkImportBuilder.js +128 -128
  189. package/lib/core/model/builder/ArkMethodBuilder.d.ts +63 -63
  190. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  191. package/lib/core/model/builder/ArkMethodBuilder.js +487 -486
  192. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -5
  193. package/lib/core/model/builder/ArkNamespaceBuilder.js +205 -205
  194. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +8 -8
  195. package/lib/core/model/builder/ArkSignatureBuilder.js +40 -40
  196. package/lib/core/model/builder/BodyBuilder.d.ts +55 -30
  197. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  198. package/lib/core/model/builder/BodyBuilder.js +542 -371
  199. package/lib/core/model/builder/builderUtils.d.ts +18 -18
  200. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  201. package/lib/core/model/builder/builderUtils.js +571 -558
  202. package/lib/index.d.ts +82 -80
  203. package/lib/index.d.ts.map +1 -1
  204. package/lib/index.js +201 -196
  205. package/lib/save/ArkStream.d.ts +23 -23
  206. package/lib/save/ArkStream.js +83 -83
  207. package/lib/save/DotPrinter.d.ts +43 -43
  208. package/lib/save/DotPrinter.js +170 -170
  209. package/lib/save/GraphPrinter.d.ts +16 -16
  210. package/lib/save/GraphPrinter.js +134 -134
  211. package/lib/save/JsonPrinter.d.ts +30 -30
  212. package/lib/save/JsonPrinter.js +580 -580
  213. package/lib/save/Printer.d.ts +12 -12
  214. package/lib/save/Printer.js +27 -27
  215. package/lib/save/PrinterBuilder.d.ts +53 -53
  216. package/lib/save/PrinterBuilder.js +145 -145
  217. package/lib/save/ViewTreePrinter.d.ts +14 -14
  218. package/lib/save/ViewTreePrinter.js +123 -123
  219. package/lib/save/arkir/ArkIRClassPrinter.d.ts +13 -13
  220. package/lib/save/arkir/ArkIRClassPrinter.js +92 -92
  221. package/lib/save/arkir/ArkIRFieldPrinter.d.ts +11 -11
  222. package/lib/save/arkir/ArkIRFieldPrinter.js +64 -64
  223. package/lib/save/arkir/ArkIRFilePrinter.d.ts +12 -12
  224. package/lib/save/arkir/ArkIRFilePrinter.js +54 -54
  225. package/lib/save/arkir/ArkIRMethodPrinter.d.ts +16 -16
  226. package/lib/save/arkir/ArkIRMethodPrinter.js +159 -159
  227. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +11 -11
  228. package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -66
  229. package/lib/save/base/BasePrinter.d.ts +23 -23
  230. package/lib/save/base/BasePrinter.js +70 -70
  231. package/lib/save/base/ExportPrinter.d.ts +8 -8
  232. package/lib/save/base/ExportPrinter.js +67 -67
  233. package/lib/save/base/ImportPrinter.d.ts +9 -9
  234. package/lib/save/base/ImportPrinter.js +92 -92
  235. package/lib/save/base/PrinterUtils.d.ts +24 -24
  236. package/lib/save/base/PrinterUtils.js +208 -208
  237. package/lib/save/serializeArkIR.d.ts +8 -8
  238. package/lib/save/serializeArkIR.js +294 -294
  239. package/lib/save/source/SourceBase.d.ts +22 -22
  240. package/lib/save/source/SourceBase.js +64 -64
  241. package/lib/save/source/SourceBody.d.ts +58 -58
  242. package/lib/save/source/SourceBody.js +296 -296
  243. package/lib/save/source/SourceClass.d.ts +25 -25
  244. package/lib/save/source/SourceClass.js +187 -187
  245. package/lib/save/source/SourceField.d.ts +13 -13
  246. package/lib/save/source/SourceField.js +73 -73
  247. package/lib/save/source/SourceFilePrinter.d.ts +12 -12
  248. package/lib/save/source/SourceFilePrinter.js +69 -69
  249. package/lib/save/source/SourceMethod.d.ts +22 -22
  250. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  251. package/lib/save/source/SourceMethod.js +196 -193
  252. package/lib/save/source/SourceNamespace.d.ts +11 -11
  253. package/lib/save/source/SourceNamespace.js +83 -83
  254. package/lib/save/source/SourceStmt.d.ts +178 -178
  255. package/lib/save/source/SourceStmt.js +838 -838
  256. package/lib/save/source/SourceTransformer.d.ts +46 -46
  257. package/lib/save/source/SourceTransformer.js +446 -446
  258. package/lib/transformer/FunctionTransformer.d.ts +2 -2
  259. package/lib/transformer/FunctionTransformer.js +17 -17
  260. package/lib/transformer/SceneTransformer.d.ts +2 -2
  261. package/lib/transformer/SceneTransformer.js +17 -17
  262. package/lib/transformer/StaticSingleAssignmentFormer.d.ts +12 -12
  263. package/lib/transformer/StaticSingleAssignmentFormer.js +259 -259
  264. package/lib/transformer/Transformer.d.ts +6 -6
  265. package/lib/transformer/Transformer.js +22 -22
  266. package/lib/utils/AstTreeUtils.d.ts +4 -4
  267. package/lib/utils/AstTreeUtils.js +26 -26
  268. package/lib/utils/CfgStructualAnalysis.d.ts +110 -110
  269. package/lib/utils/CfgStructualAnalysis.js +1277 -1277
  270. package/lib/utils/FileUtils.d.ts +18 -18
  271. package/lib/utils/FileUtils.js +135 -135
  272. package/lib/utils/SparseBitVector.d.ts +100 -100
  273. package/lib/utils/SparseBitVector.js +445 -445
  274. package/lib/utils/callGraphUtils.d.ts +30 -30
  275. package/lib/utils/callGraphUtils.js +205 -205
  276. package/lib/utils/crypto_utils.d.ts +5 -5
  277. package/lib/utils/crypto_utils.js +57 -57
  278. package/lib/utils/entryMethodUtils.d.ts +13 -13
  279. package/lib/utils/entryMethodUtils.js +110 -110
  280. package/lib/utils/getAllFiles.d.ts +9 -9
  281. package/lib/utils/getAllFiles.js +90 -90
  282. package/lib/utils/json5parser.d.ts +6 -6
  283. package/lib/utils/json5parser.js +146 -146
  284. package/lib/utils/logger.d.ts +18 -18
  285. package/lib/utils/logger.d.ts.map +1 -1
  286. package/lib/utils/logger.js +97 -90
  287. package/lib/utils/pathTransfer.d.ts +1 -1
  288. package/lib/utils/pathTransfer.js +25 -25
  289. package/node_modules/json5/lib/cli.js +0 -0
  290. package/node_modules/ohos-typescript/bin/tsc +0 -0
  291. package/node_modules/ohos-typescript/bin/tsserver +0 -0
  292. package/package.json +3 -3
@@ -1,648 +1,731 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.IRInference = void 0;
27
- /*
28
- * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
29
- * Licensed under the Apache License, Version 2.0 (the "License");
30
- * you may not use this file except in compliance with the License.
31
- * You may obtain a copy of the License at
32
- *
33
- * http://www.apache.org/licenses/LICENSE-2.0
34
- *
35
- * Unless required by applicable law or agreed to in writing, software
36
- * distributed under the License is distributed on an "AS IS" BASIS,
37
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
- * See the License for the specific language governing permissions and
39
- * limitations under the License.
40
- */
41
- const ArkMethod_1 = require("../model/ArkMethod");
42
- const Type_1 = require("../base/Type");
43
- const Local_1 = require("../base/Local");
44
- const TypeInference_1 = require("./TypeInference");
45
- const Expr_1 = require("../base/Expr");
46
- const logger_1 = __importStar(require("../../utils/logger"));
47
- const ArkClass_1 = require("../model/ArkClass");
48
- const ModelUtils_1 = require("./ModelUtils");
49
- const ArkField_1 = require("../model/ArkField");
50
- const EtsConst_1 = require("./EtsConst");
51
- const ArkSignature_1 = require("../model/ArkSignature");
52
- const TSConst_1 = require("./TSConst");
53
- const Builtin_1 = require("./Builtin");
54
- const Stmt_1 = require("../base/Stmt");
55
- const Ref_1 = require("../base/Ref");
56
- const Constant_1 = require("../base/Constant");
57
- const Const_1 = require("./Const");
58
- const ValueUtil_1 = require("./ValueUtil");
59
- const TypeExpr_1 = require("../base/TypeExpr");
60
- const ArkBaseModel_1 = require("../model/ArkBaseModel");
61
- const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'IRInference');
62
- class IRInference {
63
- static inferExportInfos(file) {
64
- file.getExportInfos().forEach(exportInfo => {
65
- if (exportInfo.getArkExport() === undefined) {
66
- let arkExport = (0, ModelUtils_1.findArkExport)(exportInfo);
67
- exportInfo.setArkExport(arkExport);
68
- if (arkExport) {
69
- exportInfo.setExportClauseType(arkExport.getExportType());
70
- }
71
- }
72
- });
73
- }
74
- static inferImportInfos(file) {
75
- file.getImportInfos().forEach(importInfo => {
76
- importInfo.getLazyExportInfo();
77
- });
78
- }
79
- static inferFile(file) {
80
- this.inferImportInfos(file);
81
- ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
82
- TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
83
- const defaultArkMethod = arkClass.getDefaultArkMethod();
84
- if (defaultArkMethod) {
85
- TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
86
- }
87
- arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
88
- const methods = arkClass.getMethods().sort((a, b) => {
89
- const name = a.getName().split(Const_1.NAME_DELIMITER).reverse().join();
90
- const anotherName = b.getName().split(Const_1.NAME_DELIMITER).reverse().join();
91
- if (name.startsWith(anotherName)) {
92
- return 1;
93
- }
94
- else if (anotherName.startsWith(name)) {
95
- return -1;
96
- }
97
- return 0;
98
- });
99
- methods.forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
100
- });
101
- this.inferExportInfos(file);
102
- }
103
- static inferStaticInvokeExpr(expr, arkMethod) {
104
- const arkClass = arkMethod.getDeclaringArkClass();
105
- const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
106
- if (methodName === TSConst_1.IMPORT) {
107
- const arg = expr.getArg(0);
108
- let type;
109
- if (arg instanceof Constant_1.Constant) {
110
- type = TypeInference_1.TypeInference.inferDynamicImportType(arg.getValue(), arkClass);
111
- }
112
- if (type) {
113
- expr.getMethodSignature().getMethodSubSignature().setReturnType(type);
114
- }
115
- return expr;
116
- }
117
- const className = expr.getMethodSignature().getDeclaringClassSignature().getClassName();
118
- if (className && className !== Const_1.UNKNOWN_CLASS_NAME) {
119
- const baseType = TypeInference_1.TypeInference.inferUnclearRefName(className, arkClass);
120
- if (baseType) {
121
- let result = this.inferInvokeExpr(expr, baseType, methodName, arkClass.getDeclaringArkFile().getScene());
122
- if (result) {
123
- this.inferArgs(result, arkMethod);
124
- return result;
125
- }
126
- }
127
- return expr;
128
- }
129
- this.inferStaticInvokeExprByMethodName(methodName, arkMethod, expr);
130
- return expr;
131
- }
132
- static inferStaticInvokeExprByMethodName(methodName, arkMethod, expr) {
133
- var _a, _b, _c, _d, _e;
134
- const arkClass = arkMethod.getDeclaringArkClass();
135
- const arkExport = (_d = (_c = (_b = (_a = ModelUtils_1.ModelUtils.getStaticMethodWithName(methodName, arkClass)) !== null && _a !== void 0 ? _a : arkMethod.getFunctionLocal(methodName)) !== null && _b !== void 0 ? _b : ModelUtils_1.ModelUtils.findDeclaredLocal(new Local_1.Local(methodName), arkMethod)) !== null && _c !== void 0 ? _c : ModelUtils_1.ModelUtils.getArkExportInImportInfoWithName(methodName, arkClass.getDeclaringArkFile())) !== null && _d !== void 0 ? _d : arkClass.getDeclaringArkFile().getScene().getSdkGlobal(methodName);
136
- let method;
137
- let signature;
138
- if (arkExport instanceof ArkMethod_1.ArkMethod) {
139
- method = arkExport;
140
- }
141
- else if (arkExport instanceof ArkClass_1.ArkClass) {
142
- method = arkExport.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
143
- }
144
- else if (arkExport instanceof Local_1.Local) {
145
- const type = arkExport.getType();
146
- if (type instanceof Type_1.ClassType) {
147
- const cls = arkClass.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
148
- method = (_e = cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME)) !== null && _e !== void 0 ? _e : cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
149
- }
150
- else if (type instanceof Type_1.FunctionType) {
151
- signature = type.getMethodSignature();
152
- }
153
- }
154
- else if (arkExport instanceof Type_1.AliasType && arkExport.getOriginalType() instanceof Type_1.FunctionType) {
155
- signature = arkExport.getOriginalType().getMethodSignature();
156
- }
157
- if (method) {
158
- signature = method.matchMethodSignature(expr.getArgs());
159
- TypeInference_1.TypeInference.inferSignatureReturnType(signature, method);
160
- }
161
- if (signature) {
162
- signature = this.generateNewMethodSignature(methodName, signature);
163
- expr.setMethodSignature(signature);
164
- this.inferArgs(expr, arkMethod);
165
- }
166
- }
167
- static generateNewMethodSignature(methodName, signature) {
168
- if (signature.getMethodSubSignature().getMethodName().startsWith(Const_1.ANONYMOUS_METHOD_PREFIX)) {
169
- const subSignature = signature.getMethodSubSignature();
170
- const newSubSignature = new ArkSignature_1.MethodSubSignature(methodName, subSignature.getParameters(), subSignature.getReturnType(), subSignature.isStatic());
171
- return new ArkSignature_1.MethodSignature(signature.getDeclaringClassSignature(), newSubSignature);
172
- }
173
- return signature;
174
- }
175
- static inferInstanceInvokeExpr(expr, arkMethod) {
176
- const arkClass = arkMethod.getDeclaringArkClass();
177
- TypeInference_1.TypeInference.inferRealGenericTypes(expr.getRealGenericTypes(), arkClass);
178
- this.inferLocal(expr.getBase(), arkMethod);
179
- const baseType = TypeInference_1.TypeInference.replaceAliasType(expr.getBase().getType());
180
- const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
181
- const scene = arkClass.getDeclaringArkFile().getScene();
182
- if ((methodName === 'forEach') && (baseType instanceof Type_1.ArrayType)) {
183
- this.processForEach(expr.getArg(0), baseType, scene);
184
- return expr;
185
- }
186
- let result = this.inferInvokeExpr(expr, baseType, methodName, scene);
187
- if (result) {
188
- this.inferArgs(result, arkMethod);
189
- return result;
190
- }
191
- logger.warn('invoke ArkInstanceInvokeExpr MethodSignature type fail: ', expr.toString());
192
- return expr;
193
- }
194
- static inferFieldRef(ref, arkMethod) {
195
- this.inferLocal(ref.getBase(), arkMethod);
196
- const baseType = TypeInference_1.TypeInference.replaceAliasType(ref.getBase().getType());
197
- if (baseType instanceof Type_1.ArrayType && ref.getFieldName() !== 'length') {
198
- return new Ref_1.ArkArrayRef(ref.getBase(), ValueUtil_1.ValueUtil.createConst(ref.getFieldName()));
199
- }
200
- const arkClass = arkMethod.getDeclaringArkClass();
201
- let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, baseType);
202
- if (newFieldSignature) {
203
- if (newFieldSignature.isStatic()) {
204
- return new Ref_1.ArkStaticFieldRef(newFieldSignature);
205
- }
206
- ref.setFieldSignature(newFieldSignature);
207
- }
208
- return ref;
209
- }
210
- static inferArgs(expr, arkMethod) {
211
- const scene = arkMethod.getDeclaringArkFile().getScene();
212
- const parameters = expr.getMethodSignature().getMethodSubSignature().getParameters();
213
- let realTypes = [];
214
- const len = expr.getArgs().length;
215
- for (let index = 0; index < len; index++) {
216
- const arg = expr.getArg(index);
217
- TypeInference_1.TypeInference.inferValueType(arg, arkMethod);
218
- if (index >= parameters.length) {
219
- break;
220
- }
221
- const argType = arg.getType();
222
- const paramType = parameters[index].getType();
223
- this.inferArg(expr, argType, paramType, scene, realTypes);
224
- }
225
- if (realTypes.length > 0 && !expr.getRealGenericTypes()) {
226
- expr.setRealGenericTypes(realTypes);
227
- }
228
- }
229
- static inferArg(expr, argType, paramType, scene, realTypes) {
230
- if (paramType instanceof Type_1.UnionType) {
231
- paramType.getTypes().forEach(t => this.inferArg(expr, argType, t, scene, realTypes));
232
- }
233
- else if (paramType instanceof Type_1.AliasType) {
234
- this.inferArg(expr, argType, paramType.getOriginalType(), scene, realTypes);
235
- }
236
- else if (paramType instanceof Type_1.ArrayType && argType instanceof Type_1.ArrayType) {
237
- this.inferArg(expr, argType.getBaseType(), paramType.getBaseType(), scene, realTypes);
238
- }
239
- if (paramType instanceof Type_1.ClassType && scene.getProjectSdkMap().has(paramType.getClassSignature()
240
- .getDeclaringFileSignature().getProjectName())) {
241
- this.inferArgTypeWithSdk(paramType, scene, argType);
242
- }
243
- else if (paramType instanceof Type_1.GenericType || paramType instanceof Type_1.AnyType) {
244
- realTypes.push(argType);
245
- }
246
- else if (paramType instanceof Type_1.FunctionType && argType instanceof Type_1.FunctionType) {
247
- const params = paramType.getMethodSignature().getMethodSubSignature().getParameters();
248
- const realTypes = expr.getRealGenericTypes();
249
- TypeInference_1.TypeInference.inferFunctionType(argType, params, realTypes);
250
- }
251
- }
252
- static inferRightWithSdkType(leftType, rightType, ackClass) {
253
- if (leftType instanceof Type_1.AliasType) {
254
- this.inferRightWithSdkType(TypeInference_1.TypeInference.replaceAliasType(leftType), rightType, ackClass);
255
- }
256
- else if (leftType instanceof Type_1.UnionType) {
257
- leftType.getTypes().forEach(t => this.inferRightWithSdkType(t, rightType, ackClass));
258
- }
259
- else if (leftType instanceof Type_1.ClassType) {
260
- IRInference.inferArgTypeWithSdk(leftType, ackClass.getDeclaringArkFile().getScene(), rightType);
261
- }
262
- else if (rightType instanceof Type_1.ArrayType && leftType instanceof Type_1.ArrayType) {
263
- const baseType = TypeInference_1.TypeInference.replaceAliasType(leftType.getBaseType());
264
- if (baseType instanceof Type_1.ClassType) {
265
- IRInference.inferArgTypeWithSdk(baseType, ackClass.getDeclaringArkFile().getScene(), rightType);
266
- }
267
- }
268
- }
269
- static inferArgTypeWithSdk(sdkType, scene, argType) {
270
- var _a, _b;
271
- if (!scene.getProjectSdkMap().has(sdkType.getClassSignature().getDeclaringFileSignature().getProjectName())) {
272
- return;
273
- }
274
- if (argType instanceof Type_1.UnionType) {
275
- argType.getTypes().forEach(t => this.inferArgTypeWithSdk(sdkType, scene, t));
276
- }
277
- else if (argType instanceof Type_1.ClassType && argType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
278
- this.inferAnonymousClass(scene.getClass(argType.getClassSignature()), sdkType.getClassSignature());
279
- }
280
- else if (argType instanceof Type_1.FunctionType) {
281
- const params = (_b = (_a = scene.getClass(sdkType.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME)) === null || _b === void 0 ? void 0 : _b.getParameters();
282
- const realTypes = sdkType.getRealGenericTypes();
283
- TypeInference_1.TypeInference.inferFunctionType(argType, params, realTypes);
284
- }
285
- }
286
- static inferInvokeExpr(expr, baseType, methodName, scene) {
287
- if (baseType instanceof Type_1.AliasType) {
288
- return this.inferInvokeExpr(expr, baseType.getOriginalType(), methodName, scene);
289
- }
290
- else if (baseType instanceof Type_1.UnionType) {
291
- for (let type of baseType.flatType()) {
292
- if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
293
- continue;
294
- }
295
- let result = this.inferInvokeExpr(expr, type, methodName, scene);
296
- if (result) {
297
- return result;
298
- }
299
- }
300
- }
301
- if (baseType instanceof Type_1.ClassType) {
302
- return this.inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene);
303
- }
304
- else if (baseType instanceof Type_1.AnnotationNamespaceType) {
305
- const namespace = scene.getNamespace(baseType.getNamespaceSignature());
306
- if (namespace) {
307
- const foundMethod = ModelUtils_1.ModelUtils.findPropertyInNamespace(methodName, namespace);
308
- if (foundMethod instanceof ArkMethod_1.ArkMethod) {
309
- let signature = foundMethod.matchMethodSignature(expr.getArgs());
310
- TypeInference_1.TypeInference.inferSignatureReturnType(signature, foundMethod);
311
- expr.setMethodSignature(signature);
312
- return expr instanceof Expr_1.ArkInstanceInvokeExpr ?
313
- new Expr_1.ArkStaticInvokeExpr(signature, expr.getArgs(), expr.getRealGenericTypes()) : expr;
314
- }
315
- }
316
- }
317
- else if (baseType instanceof Type_1.FunctionType) {
318
- expr.setMethodSignature(baseType.getMethodSignature());
319
- return expr;
320
- }
321
- else if (baseType instanceof Type_1.ArrayType && methodName === Builtin_1.Builtin.ITERATOR_FUNCTION) {
322
- const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
323
- if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
324
- .getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
325
- returnType.setRealGenericTypes([baseType.getBaseType()]);
326
- return expr;
327
- }
328
- }
329
- return null;
330
- }
331
- static inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene) {
332
- var _a;
333
- let declaredClass = scene.getClass(baseType.getClassSignature());
334
- if (!declaredClass) {
335
- const globalClass = scene.getSdkGlobal(baseType.getClassSignature().getClassName());
336
- if (globalClass instanceof ArkClass_1.ArkClass) {
337
- declaredClass = globalClass;
338
- }
339
- }
340
- const method = declaredClass ? ModelUtils_1.ModelUtils.findPropertyInClass(methodName, declaredClass) : null;
341
- if (method instanceof ArkMethod_1.ArkMethod) {
342
- const methodSignature = method.matchMethodSignature(expr.getArgs());
343
- TypeInference_1.TypeInference.inferSignatureReturnType(methodSignature, method);
344
- expr.setMethodSignature(this.replaceMethodSignature(expr.getMethodSignature(), methodSignature));
345
- expr.setRealGenericTypes(IRInference.getRealTypes(method, declaredClass, baseType));
346
- if (method.isStatic() && expr instanceof Expr_1.ArkInstanceInvokeExpr) {
347
- return new Expr_1.ArkStaticInvokeExpr(methodSignature, expr.getArgs(), expr.getRealGenericTypes());
348
- }
349
- return expr;
350
- }
351
- else if (method instanceof ArkField_1.ArkField) {
352
- const type = method.getType();
353
- if (type instanceof Type_1.FunctionType) {
354
- expr.setMethodSignature(this.generateNewMethodSignature(methodName, type.getMethodSignature()));
355
- return expr;
356
- }
357
- else if (type instanceof Type_1.ClassType && type.getClassSignature().getClassName().endsWith(EtsConst_1.CALL_BACK)) {
358
- const callback = (_a = scene.getClass(type.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
359
- if (callback) {
360
- expr.setMethodSignature(callback.getSignature());
361
- return expr;
362
- }
363
- }
364
- }
365
- else if (methodName === TSConst_1.CONSTRUCTOR_NAME) { //sdk隐式构造
366
- const subSignature = new ArkSignature_1.MethodSubSignature(methodName, [], new Type_1.ClassType(baseType.getClassSignature()));
367
- const signature = new ArkSignature_1.MethodSignature(baseType.getClassSignature(), subSignature);
368
- expr.setMethodSignature(signature);
369
- return expr;
370
- }
371
- else if (methodName === Builtin_1.Builtin.ITERATOR_NEXT) { //sdk隐式构造
372
- const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
373
- if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
374
- .getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
375
- returnType.setRealGenericTypes(baseType.getRealGenericTypes());
376
- return expr;
377
- }
378
- }
379
- return null;
380
- }
381
- static getRealTypes(method, declaredClass, baseType) {
382
- let realTypes;
383
- if (method.getDeclaringArkClass() === declaredClass) {
384
- realTypes = baseType.getRealGenericTypes();
385
- }
386
- else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes()) {
387
- realTypes = declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes();
388
- }
389
- else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.hasComponentDecorator()) {
390
- realTypes = [new Type_1.ClassType(declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getSignature())];
391
- }
392
- return realTypes;
393
- }
394
- static replaceMethodSignature(init, declared) {
395
- const className = init.getDeclaringClassSignature().getClassName();
396
- let classSignature;
397
- if (declared.getDeclaringClassSignature().getClassName().endsWith('Interface')) {
398
- classSignature = new ArkSignature_1.AliasClassSignature(className, declared.getDeclaringClassSignature());
399
- }
400
- let newSubSignature;
401
- if (classSignature || newSubSignature) {
402
- return new ArkSignature_1.MethodSignature(classSignature !== null && classSignature !== void 0 ? classSignature : declared.getDeclaringClassSignature(), newSubSignature !== null && newSubSignature !== void 0 ? newSubSignature : declared.getMethodSubSignature());
403
- }
404
- return declared;
405
- }
406
- static processForEach(arg, baseType, scene) {
407
- const argType = arg.getType();
408
- if (argType instanceof Type_1.FunctionType) {
409
- const argMethodSignature = argType.getMethodSignature();
410
- const argMethod = scene.getMethod(argMethodSignature);
411
- if (argMethod != null && argMethod.getBody()) {
412
- const body = argMethod.getBody();
413
- const firstStmt = body.getCfg().getStartingStmt();
414
- if ((firstStmt instanceof Stmt_1.ArkAssignStmt) && (firstStmt.getRightOp() instanceof Ref_1.ArkParameterRef)) {
415
- const parameterRef = firstStmt.getRightOp();
416
- parameterRef.setType(baseType.getBaseType());
417
- }
418
- TypeInference_1.TypeInference.inferTypeInMethod(argMethod);
419
- }
420
- }
421
- else {
422
- logger.warn(`arg of forEach must be callable`);
423
- }
424
- }
425
- static inferLocal(base, arkMethod) {
426
- var _a, _b, _c;
427
- const arkClass = arkMethod.getDeclaringArkClass();
428
- if (base.getName() === TSConst_1.THIS_NAME) {
429
- if (!arkClass.isAnonymousClass()) {
430
- base.setType(new Type_1.ClassType(arkClass.getSignature(), arkClass.getGenericsTypes()));
431
- }
432
- return;
433
- }
434
- let baseType = base.getType();
435
- if (baseType instanceof Type_1.UnclearReferenceType) {
436
- baseType = TypeInference_1.TypeInference.inferUnclearRefName(baseType.getName(), arkClass);
437
- }
438
- else if (TypeInference_1.TypeInference.isUnclearType(baseType)) {
439
- const declaringStmt = base.getDeclaringStmt();
440
- if (!declaringStmt || !declaringStmt.getOriginalText() || ((_a = declaringStmt.getOriginalText()) === null || _a === void 0 ? void 0 : _a.startsWith(base.getName()))) {
441
- baseType = (_c = (_b = ModelUtils_1.ModelUtils.findDeclaredLocal(base, arkMethod)) === null || _b === void 0 ? void 0 : _b.getType()) !== null && _c !== void 0 ? _c : TypeInference_1.TypeInference.inferBaseType(base.getName(), arkClass);
442
- }
443
- }
444
- if (baseType && !TypeInference_1.TypeInference.isUnclearType(baseType)) {
445
- base.setType(baseType);
446
- }
447
- }
448
- static generateNewFieldSignature(ref, arkClass, baseType) {
449
- if (baseType instanceof Type_1.UnionType) {
450
- for (let type of baseType.flatType()) {
451
- if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
452
- continue;
453
- }
454
- let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, type);
455
- if (!TypeInference_1.TypeInference.isUnclearType(newFieldSignature === null || newFieldSignature === void 0 ? void 0 : newFieldSignature.getType())) {
456
- return newFieldSignature;
457
- }
458
- }
459
- return null;
460
- }
461
- else if (baseType instanceof Type_1.AliasType) {
462
- return this.generateNewFieldSignature(ref, arkClass, baseType.getOriginalType());
463
- }
464
- const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
465
- const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
466
- let propertyType = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[1];
467
- if (propertyType && TypeInference_1.TypeInference.isUnclearType(propertyType)) {
468
- const newType = TypeInference_1.TypeInference.inferUnclearedType(propertyType, arkClass);
469
- if (newType) {
470
- propertyType = newType;
471
- }
472
- }
473
- let staticFlag;
474
- let signature;
475
- if (baseType instanceof Type_1.ClassType) {
476
- const property = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[0];
477
- if (property instanceof ArkField_1.ArkField) {
478
- return property.getSignature();
479
- }
480
- staticFlag = baseType.getClassSignature().getClassName() === Const_1.DEFAULT_ARK_CLASS_NAME ||
481
- (property instanceof ArkMethod_1.ArkMethod && property.isStatic());
482
- signature = property instanceof ArkMethod_1.ArkMethod ? property.getSignature().getDeclaringClassSignature() : baseType.getClassSignature();
483
- }
484
- else if (baseType instanceof Type_1.AnnotationNamespaceType) {
485
- staticFlag = true;
486
- signature = baseType.getNamespaceSignature();
487
- }
488
- else {
489
- return null;
490
- }
491
- return new ArkSignature_1.FieldSignature(fieldName, signature, propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
492
- }
493
- static inferAnonymousClass(anon, declaredSignature, set = new Set()) {
494
- var _a;
495
- if (!anon) {
496
- return;
497
- }
498
- const key = anon.getSignature().toString();
499
- if (set.has(key)) {
500
- return;
501
- }
502
- else {
503
- set.add(key);
504
- }
505
- const scene = anon.getDeclaringArkFile().getScene();
506
- const declaredClass = scene.getClass(declaredSignature);
507
- if (!declaredClass) {
508
- return;
509
- }
510
- for (const anonField of anon.getFields()) {
511
- const property = ModelUtils_1.ModelUtils.findPropertyInClass(anonField.getName(), declaredClass);
512
- if (property instanceof ArkField_1.ArkField) {
513
- this.assignAnonField(property, anonField, scene, set);
514
- }
515
- }
516
- for (const anonMethod of anon.getMethods()) {
517
- const methodSignature = (_a = declaredClass.getMethodWithName(anonMethod.getName())) === null || _a === void 0 ? void 0 : _a.matchMethodSignature(anonMethod.getSubSignature().getParameters());
518
- if (methodSignature) {
519
- anonMethod.setImplementationSignature(methodSignature);
520
- }
521
- }
522
- }
523
- static assignAnonField(property, anonField, scene, set) {
524
- function deepInfer(anonType, declaredSignature) {
525
- if (anonType instanceof Type_1.ClassType && anonType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
526
- IRInference.inferAnonymousClass(scene.getClass(anonType.getClassSignature()), declaredSignature, set);
527
- }
528
- }
529
- const type = property.getSignature().getType();
530
- const lastStmt = anonField.getInitializer().at(-1);
531
- if (lastStmt instanceof Stmt_1.ArkAssignStmt) {
532
- const rightType = lastStmt.getRightOp().getType();
533
- if (type instanceof Type_1.ClassType) {
534
- deepInfer(rightType, type.getClassSignature());
535
- }
536
- else if (type instanceof Type_1.ArrayType && type.getBaseType() instanceof Type_1.ClassType &&
537
- rightType instanceof Type_1.ArrayType) {
538
- const baseType = rightType.getBaseType();
539
- const classSignature = type.getBaseType().getClassSignature();
540
- if (baseType instanceof Type_1.UnionType) {
541
- baseType.getTypes().forEach(t => deepInfer(t, classSignature));
542
- }
543
- else {
544
- deepInfer(rightType.getBaseType(), classSignature);
545
- }
546
- }
547
- const leftOp = lastStmt.getLeftOp();
548
- if (leftOp instanceof Ref_1.AbstractFieldRef) {
549
- leftOp.setFieldSignature(property.getSignature());
550
- }
551
- }
552
- anonField.setSignature(property.getSignature());
553
- }
554
- static inferAliasTypeExpr(expr, arkMethod) {
555
- const originalObject = expr.getOriginalObject();
556
- let model;
557
- if (originalObject instanceof Local_1.Local) {
558
- model = ModelUtils_1.ModelUtils.findArkModelByRefName(originalObject.getName(), arkMethod.getDeclaringArkClass());
559
- }
560
- else if (originalObject instanceof TypeExpr_1.AbstractTypeExpr) {
561
- originalObject.inferType(arkMethod);
562
- model = originalObject;
563
- }
564
- else if (originalObject instanceof Type_1.Type) {
565
- const type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
566
- // If original Object is ClassType, AliasType or UnclearReferenceType with real generic types,
567
- // the type after infer should be revert back to the object itself.
568
- if (type instanceof Type_1.ClassType) {
569
- const scene = arkMethod.getDeclaringArkFile().getScene();
570
- model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getClassSignature(), scene);
571
- }
572
- else if (type instanceof Type_1.AliasType) {
573
- const scene = arkMethod.getDeclaringArkFile().getScene();
574
- model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getSignature(), scene);
575
- }
576
- else if (type) {
577
- model = type;
578
- }
579
- if (expr.getRealGenericTypes() !== undefined && originalObject instanceof Type_1.UnclearReferenceType) {
580
- expr.setRealGenericTypes(originalObject.getGenericTypes());
581
- }
582
- }
583
- if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(model)) {
584
- expr.setOriginalObject(model);
585
- }
586
- return expr;
587
- }
588
- static inferTypeQueryExpr(expr, arkMethod) {
589
- var _a;
590
- let gTypes = expr.getGenerateTypes();
591
- if (gTypes) {
592
- for (let i = 0; i < gTypes.length; i++) {
593
- const newType = TypeInference_1.TypeInference.inferUnclearedType(gTypes[i], arkMethod.getDeclaringArkClass());
594
- if (newType) {
595
- gTypes[i] = newType;
596
- }
597
- }
598
- }
599
- const opValue = expr.getOpValue();
600
- let opValueType;
601
- if (opValue instanceof ArkBaseModel_1.ArkBaseModel) {
602
- opValueType = (_a = ModelUtils_1.ModelUtils.parseArkBaseModel2Type(opValue)) !== null && _a !== void 0 ? _a : Type_1.UnknownType.getInstance();
603
- }
604
- else {
605
- opValueType = opValue.getType();
606
- }
607
- if (!TypeInference_1.TypeInference.isUnclearType(opValueType)) {
608
- return;
609
- }
610
- if (opValue instanceof Local_1.Local) {
611
- const newOpValueType = TypeInference_1.TypeInference.inferUnclearRefName(opValue.getName(), arkMethod.getDeclaringArkClass());
612
- const scene = arkMethod.getDeclaringArkFile().getScene();
613
- if (newOpValueType instanceof Type_1.ClassType) {
614
- const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getClassSignature(), scene);
615
- if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
616
- expr.setOpValue(newOpValue);
617
- }
618
- }
619
- else if (newOpValueType instanceof Type_1.FunctionType) {
620
- const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getMethodSignature(), scene);
621
- if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
622
- expr.setOpValue(newOpValue);
623
- }
624
- }
625
- else {
626
- this.inferLocal(opValue, arkMethod);
627
- }
628
- }
629
- else if (opValue instanceof Ref_1.AbstractRef || opValue instanceof Expr_1.AbstractExpr) {
630
- expr.setOpValue(opValue.inferType(arkMethod));
631
- }
632
- }
633
- static inferKeyofTypeExpr(expr, arkMethod) {
634
- const opType = expr.getOpType();
635
- if (TypeInference_1.TypeInference.isUnclearType(opType)) {
636
- if (opType instanceof TypeExpr_1.TypeQueryExpr) {
637
- this.inferTypeQueryExpr(opType, arkMethod);
638
- }
639
- else {
640
- const type = TypeInference_1.TypeInference.inferUnclearedType(opType, arkMethod.getDeclaringArkClass());
641
- if (type) {
642
- expr.setOpType(type);
643
- }
644
- }
645
- }
646
- }
647
- }
648
- exports.IRInference = IRInference;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.IRInference = void 0;
27
+ /*
28
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
29
+ * Licensed under the Apache License, Version 2.0 (the "License");
30
+ * you may not use this file except in compliance with the License.
31
+ * You may obtain a copy of the License at
32
+ *
33
+ * http://www.apache.org/licenses/LICENSE-2.0
34
+ *
35
+ * Unless required by applicable law or agreed to in writing, software
36
+ * distributed under the License is distributed on an "AS IS" BASIS,
37
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38
+ * See the License for the specific language governing permissions and
39
+ * limitations under the License.
40
+ */
41
+ const ArkMethod_1 = require("../model/ArkMethod");
42
+ const Type_1 = require("../base/Type");
43
+ const Local_1 = require("../base/Local");
44
+ const TypeInference_1 = require("./TypeInference");
45
+ const Expr_1 = require("../base/Expr");
46
+ const logger_1 = __importStar(require("../../utils/logger"));
47
+ const ArkClass_1 = require("../model/ArkClass");
48
+ const ModelUtils_1 = require("./ModelUtils");
49
+ const ArkField_1 = require("../model/ArkField");
50
+ const EtsConst_1 = require("./EtsConst");
51
+ const ArkSignature_1 = require("../model/ArkSignature");
52
+ const TSConst_1 = require("./TSConst");
53
+ const Builtin_1 = require("./Builtin");
54
+ const Stmt_1 = require("../base/Stmt");
55
+ const Ref_1 = require("../base/Ref");
56
+ const Constant_1 = require("../base/Constant");
57
+ const Const_1 = require("./Const");
58
+ const ValueUtil_1 = require("./ValueUtil");
59
+ const TypeExpr_1 = require("../base/TypeExpr");
60
+ const ArkBaseModel_1 = require("../model/ArkBaseModel");
61
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'IRInference');
62
+ class IRInference {
63
+ static inferExportInfos(file) {
64
+ file.getExportInfos().forEach(exportInfo => {
65
+ if (exportInfo.getArkExport() === undefined) {
66
+ let arkExport = (0, ModelUtils_1.findArkExport)(exportInfo);
67
+ exportInfo.setArkExport(arkExport);
68
+ if (arkExport) {
69
+ exportInfo.setExportClauseType(arkExport.getExportType());
70
+ }
71
+ }
72
+ });
73
+ }
74
+ static inferImportInfos(file) {
75
+ file.getImportInfos().forEach(importInfo => {
76
+ importInfo.getLazyExportInfo();
77
+ });
78
+ }
79
+ static inferFile(file) {
80
+ this.inferImportInfos(file);
81
+ ModelUtils_1.ModelUtils.getAllClassesInFile(file).forEach(arkClass => {
82
+ TypeInference_1.TypeInference.inferGenericType(arkClass.getGenericsTypes(), arkClass);
83
+ const defaultArkMethod = arkClass.getDefaultArkMethod();
84
+ if (defaultArkMethod) {
85
+ TypeInference_1.TypeInference.inferTypeInMethod(defaultArkMethod);
86
+ }
87
+ arkClass.getFields().forEach(arkField => TypeInference_1.TypeInference.inferTypeInArkField(arkField));
88
+ const methods = arkClass.getMethods().sort((a, b) => {
89
+ const name = a.getName().split(Const_1.NAME_DELIMITER).reverse().join();
90
+ const anotherName = b.getName().split(Const_1.NAME_DELIMITER).reverse().join();
91
+ if (name.startsWith(anotherName)) {
92
+ return 1;
93
+ }
94
+ else if (anotherName.startsWith(name)) {
95
+ return -1;
96
+ }
97
+ return 0;
98
+ });
99
+ methods.forEach(arkMethod => TypeInference_1.TypeInference.inferTypeInMethod(arkMethod));
100
+ });
101
+ this.inferExportInfos(file);
102
+ }
103
+ static inferStaticInvokeExpr(expr, arkMethod) {
104
+ const arkClass = arkMethod.getDeclaringArkClass();
105
+ const methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
106
+ if (methodName === TSConst_1.IMPORT) {
107
+ const arg = expr.getArg(0);
108
+ let type;
109
+ if (arg instanceof Constant_1.Constant) {
110
+ type = TypeInference_1.TypeInference.inferDynamicImportType(arg.getValue(), arkClass);
111
+ }
112
+ if (type) {
113
+ expr.getMethodSignature().getMethodSubSignature().setReturnType(type);
114
+ }
115
+ return expr;
116
+ }
117
+ const className = expr.getMethodSignature().getDeclaringClassSignature().getClassName();
118
+ if (className && className !== Const_1.UNKNOWN_CLASS_NAME) {
119
+ const baseType = TypeInference_1.TypeInference.inferUnclearRefName(className, arkClass);
120
+ if (baseType) {
121
+ let result = this.inferInvokeExpr(expr, baseType, methodName, arkClass.getDeclaringArkFile().getScene());
122
+ if (result) {
123
+ this.inferArgs(result, arkMethod);
124
+ return result;
125
+ }
126
+ }
127
+ return expr;
128
+ }
129
+ this.inferStaticInvokeExprByMethodName(methodName, arkMethod, expr);
130
+ return expr;
131
+ }
132
+ static inferStaticInvokeExprByMethodName(methodName, arkMethod, expr) {
133
+ var _a, _b, _c, _d, _e;
134
+ const arkClass = arkMethod.getDeclaringArkClass();
135
+ const arkExport = (_d = (_c = (_b = (_a = ModelUtils_1.ModelUtils.getStaticMethodWithName(methodName, arkClass)) !== null && _a !== void 0 ? _a : arkMethod.getFunctionLocal(methodName)) !== null && _b !== void 0 ? _b : ModelUtils_1.ModelUtils.findDeclaredLocal(new Local_1.Local(methodName), arkMethod)) !== null && _c !== void 0 ? _c : ModelUtils_1.ModelUtils.getArkExportInImportInfoWithName(methodName, arkClass.getDeclaringArkFile())) !== null && _d !== void 0 ? _d : arkClass.getDeclaringArkFile().getScene().getSdkGlobal(methodName);
136
+ let method;
137
+ let signature;
138
+ if (arkExport instanceof ArkMethod_1.ArkMethod) {
139
+ method = arkExport;
140
+ }
141
+ else if (arkExport instanceof ArkClass_1.ArkClass) {
142
+ method = arkExport.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
143
+ }
144
+ else if (arkExport instanceof Local_1.Local) {
145
+ const type = arkExport.getType();
146
+ if (type instanceof Type_1.ClassType) {
147
+ const cls = arkClass.getDeclaringArkFile().getScene().getClass(type.getClassSignature());
148
+ method = (_e = cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME)) !== null && _e !== void 0 ? _e : cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
149
+ }
150
+ else if (type instanceof Type_1.FunctionType) {
151
+ signature = type.getMethodSignature();
152
+ }
153
+ }
154
+ else if (arkExport instanceof Type_1.AliasType && arkExport.getOriginalType() instanceof Type_1.FunctionType) {
155
+ signature = arkExport.getOriginalType().getMethodSignature();
156
+ }
157
+ if (method) {
158
+ signature = method.matchMethodSignature(expr.getArgs());
159
+ TypeInference_1.TypeInference.inferSignatureReturnType(signature, method);
160
+ }
161
+ if (signature) {
162
+ signature = this.generateNewMethodSignature(methodName, signature);
163
+ expr.setMethodSignature(signature);
164
+ this.inferArgs(expr, arkMethod);
165
+ }
166
+ }
167
+ static generateNewMethodSignature(methodName, signature) {
168
+ if (signature.getMethodSubSignature().getMethodName().startsWith(Const_1.ANONYMOUS_METHOD_PREFIX)) {
169
+ const subSignature = signature.getMethodSubSignature();
170
+ const newSubSignature = new ArkSignature_1.MethodSubSignature(methodName, subSignature.getParameters(), subSignature.getReturnType(), subSignature.isStatic());
171
+ return new ArkSignature_1.MethodSignature(signature.getDeclaringClassSignature(), newSubSignature);
172
+ }
173
+ return signature;
174
+ }
175
+ static inferInstanceInvokeExpr(expr, arkMethod) {
176
+ var _a, _b, _c;
177
+ const arkClass = arkMethod.getDeclaringArkClass();
178
+ TypeInference_1.TypeInference.inferRealGenericTypes(expr.getRealGenericTypes(), arkClass);
179
+ this.inferLocal(expr.getBase(), arkMethod);
180
+ const baseType = TypeInference_1.TypeInference.replaceAliasType(expr.getBase().getType());
181
+ let methodName = expr.getMethodSignature().getMethodSubSignature().getMethodName();
182
+ if (methodName.startsWith(Const_1.NAME_PREFIX)) {
183
+ const declaringStmt = (_b = (_a = arkMethod.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().get(methodName)) === null || _b === void 0 ? void 0 : _b.getDeclaringStmt();
184
+ if (declaringStmt instanceof Stmt_1.ArkAssignStmt && declaringStmt.getRightOp() instanceof Ref_1.ArkInstanceFieldRef) {
185
+ const rightOp = declaringStmt.getRightOp();
186
+ methodName = rightOp.getBase().getName() + '.' + rightOp.getFieldName();
187
+ }
188
+ }
189
+ const scene = arkClass.getDeclaringArkFile().getScene();
190
+ if ((methodName === 'forEach') && (baseType instanceof Type_1.ArrayType)) {
191
+ this.processForEach(expr.getArg(0), baseType, scene);
192
+ return expr;
193
+ }
194
+ let result = (_c = this.inferInvokeExpr(expr, baseType, methodName, scene)) !== null && _c !== void 0 ? _c : this.processExtendFunc(expr, arkMethod, methodName);
195
+ if (result) {
196
+ this.inferArgs(result, arkMethod);
197
+ return result;
198
+ }
199
+ logger.warn('invoke ArkInstanceInvokeExpr MethodSignature type fail: ', expr.toString());
200
+ return expr;
201
+ }
202
+ /**
203
+ * process arkUI function with Annotation @Extend @Styles @AnimatableExtend
204
+ * @param expr
205
+ * @param arkMethod
206
+ * @param methodName
207
+ */
208
+ static processExtendFunc(expr, arkMethod, methodName) {
209
+ var _a, _b;
210
+ const type = TypeInference_1.TypeInference.inferBaseType(methodName, arkMethod.getDeclaringArkClass());
211
+ if (type instanceof Type_1.FunctionType) {
212
+ const methodSignature = type.getMethodSignature();
213
+ // because of last stmt is ArkReturnVoidStmt, the ArkInvokeStmt at -2 before ArkReturnVoidStmt.
214
+ const endIndex = -2;
215
+ const endStmt = (_b = (_a = arkMethod.getDeclaringArkFile().getScene().getMethod(methodSignature)) === null || _a === void 0 ? void 0 : _a.getCfg()) === null || _b === void 0 ? void 0 : _b.getStmts().at(endIndex);
216
+ if (endStmt instanceof Stmt_1.ArkInvokeStmt) {
217
+ methodSignature.getMethodSubSignature().setReturnType(endStmt.getInvokeExpr().getType());
218
+ }
219
+ expr.setMethodSignature(methodSignature);
220
+ return expr;
221
+ }
222
+ return null;
223
+ }
224
+ static inferFieldRef(ref, arkMethod) {
225
+ this.inferLocal(ref.getBase(), arkMethod);
226
+ const baseType = TypeInference_1.TypeInference.replaceAliasType(ref.getBase().getType());
227
+ if (baseType instanceof Type_1.ArrayType && ref.getFieldName() !== 'length') {
228
+ return new Ref_1.ArkArrayRef(ref.getBase(), ValueUtil_1.ValueUtil.createConst(ref.getFieldName()));
229
+ }
230
+ const arkClass = arkMethod.getDeclaringArkClass();
231
+ let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, baseType);
232
+ if (newFieldSignature) {
233
+ if (newFieldSignature.isStatic()) {
234
+ return new Ref_1.ArkStaticFieldRef(newFieldSignature);
235
+ }
236
+ ref.setFieldSignature(newFieldSignature);
237
+ }
238
+ return ref;
239
+ }
240
+ static inferArgs(expr, arkMethod) {
241
+ const scene = arkMethod.getDeclaringArkFile().getScene();
242
+ const parameters = expr.getMethodSignature().getMethodSubSignature().getParameters();
243
+ let realTypes = [];
244
+ const len = expr.getArgs().length;
245
+ for (let index = 0; index < len; index++) {
246
+ const arg = expr.getArg(index);
247
+ TypeInference_1.TypeInference.inferValueType(arg, arkMethod);
248
+ if (index >= parameters.length) {
249
+ break;
250
+ }
251
+ const argType = arg.getType();
252
+ const paramType = parameters[index].getType();
253
+ this.inferArg(expr, argType, paramType, scene, realTypes);
254
+ }
255
+ if (realTypes.length > 0 && !expr.getRealGenericTypes()) {
256
+ expr.setRealGenericTypes(realTypes);
257
+ }
258
+ }
259
+ static inferArg(expr, argType, paramType, scene, realTypes) {
260
+ if (paramType instanceof Type_1.UnionType) {
261
+ paramType.getTypes().forEach(t => this.inferArg(expr, argType, t, scene, realTypes));
262
+ }
263
+ else if (paramType instanceof Type_1.AliasType) {
264
+ this.inferArg(expr, argType, paramType.getOriginalType(), scene, realTypes);
265
+ }
266
+ else if (paramType instanceof Type_1.ArrayType && argType instanceof Type_1.ArrayType) {
267
+ this.inferArg(expr, argType.getBaseType(), paramType.getBaseType(), scene, realTypes);
268
+ }
269
+ else if (expr instanceof Expr_1.ArkInstanceInvokeExpr && expr.getBase().getType() instanceof Type_1.ArrayType) {
270
+ if (paramType instanceof Type_1.ArrayType && paramType.getBaseType() instanceof Type_1.GenericType) {
271
+ this.inferArg(expr, argType, expr.getBase().getType().getBaseType(), scene, realTypes);
272
+ }
273
+ }
274
+ if (paramType instanceof Type_1.ClassType && scene.getProjectSdkMap().has(paramType.getClassSignature()
275
+ .getDeclaringFileSignature().getProjectName())) {
276
+ this.inferArgTypeWithSdk(paramType, scene, argType);
277
+ }
278
+ else if (paramType instanceof Type_1.GenericType || paramType instanceof Type_1.AnyType) {
279
+ realTypes.push(argType);
280
+ }
281
+ else if (paramType instanceof Type_1.FunctionType && argType instanceof Type_1.FunctionType) {
282
+ const method = scene.getMethod(argType.getMethodSignature());
283
+ if (method) {
284
+ TypeInference_1.TypeInference.inferTypeInMethod(method);
285
+ }
286
+ const realTypes = expr.getRealGenericTypes();
287
+ TypeInference_1.TypeInference.inferFunctionType(argType, paramType.getMethodSignature().getMethodSubSignature(), realTypes);
288
+ }
289
+ }
290
+ static inferRightWithSdkType(leftType, rightType, ackClass) {
291
+ if (leftType instanceof Type_1.AliasType) {
292
+ this.inferRightWithSdkType(TypeInference_1.TypeInference.replaceAliasType(leftType), rightType, ackClass);
293
+ }
294
+ else if (leftType instanceof Type_1.UnionType) {
295
+ leftType.getTypes().forEach(t => this.inferRightWithSdkType(t, rightType, ackClass));
296
+ }
297
+ else if (leftType instanceof Type_1.ClassType) {
298
+ IRInference.inferArgTypeWithSdk(leftType, ackClass.getDeclaringArkFile().getScene(), rightType);
299
+ }
300
+ else if (rightType instanceof Type_1.ArrayType && leftType instanceof Type_1.ArrayType) {
301
+ const baseType = TypeInference_1.TypeInference.replaceAliasType(leftType.getBaseType());
302
+ if (baseType instanceof Type_1.ClassType) {
303
+ IRInference.inferArgTypeWithSdk(baseType, ackClass.getDeclaringArkFile().getScene(), rightType.getBaseType());
304
+ }
305
+ }
306
+ }
307
+ static inferArgTypeWithSdk(sdkType, scene, argType) {
308
+ var _a, _b;
309
+ if (!scene.getProjectSdkMap().has(sdkType.getClassSignature().getDeclaringFileSignature().getProjectName())) {
310
+ return;
311
+ }
312
+ if (argType instanceof Type_1.UnionType) {
313
+ argType.getTypes().forEach(t => this.inferArgTypeWithSdk(sdkType, scene, t));
314
+ }
315
+ else if (argType instanceof Type_1.ClassType && argType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
316
+ this.inferAnonymousClass(scene.getClass(argType.getClassSignature()), sdkType.getClassSignature());
317
+ }
318
+ else if (argType instanceof Type_1.FunctionType) {
319
+ const param = (_b = (_a = scene.getClass(sdkType.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME)) === null || _b === void 0 ? void 0 : _b.getSignature().getMethodSubSignature();
320
+ const realTypes = sdkType.getRealGenericTypes();
321
+ TypeInference_1.TypeInference.inferFunctionType(argType, param, realTypes);
322
+ }
323
+ }
324
+ static inferInvokeExpr(expr, baseType, methodName, scene) {
325
+ if (baseType instanceof Type_1.AliasType) {
326
+ return this.inferInvokeExpr(expr, baseType.getOriginalType(), methodName, scene);
327
+ }
328
+ else if (baseType instanceof Type_1.ArrayType) {
329
+ const arrayInterface = scene.getSdkGlobal(Builtin_1.Builtin.ARRAY);
330
+ if (arrayInterface instanceof ArkClass_1.ArkClass) {
331
+ return this.inferInvokeExpr(expr, new Type_1.ClassType(arrayInterface.getSignature(), [baseType.getBaseType()]), methodName, scene);
332
+ }
333
+ }
334
+ else if (baseType instanceof Type_1.UnionType) {
335
+ for (let type of baseType.flatType()) {
336
+ if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
337
+ continue;
338
+ }
339
+ let result = this.inferInvokeExpr(expr, type, methodName, scene);
340
+ if (result) {
341
+ return result;
342
+ }
343
+ }
344
+ }
345
+ if (baseType instanceof Type_1.ClassType) {
346
+ return this.inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene);
347
+ }
348
+ else if (baseType instanceof Type_1.AnnotationNamespaceType) {
349
+ const namespace = scene.getNamespace(baseType.getNamespaceSignature());
350
+ if (namespace) {
351
+ const foundMethod = ModelUtils_1.ModelUtils.findPropertyInNamespace(methodName, namespace);
352
+ if (foundMethod instanceof ArkMethod_1.ArkMethod) {
353
+ let signature = foundMethod.matchMethodSignature(expr.getArgs());
354
+ TypeInference_1.TypeInference.inferSignatureReturnType(signature, foundMethod);
355
+ expr.setMethodSignature(signature);
356
+ return expr instanceof Expr_1.ArkInstanceInvokeExpr ?
357
+ new Expr_1.ArkStaticInvokeExpr(signature, expr.getArgs(), expr.getRealGenericTypes()) : expr;
358
+ }
359
+ }
360
+ }
361
+ else if (baseType instanceof Type_1.FunctionType) {
362
+ return IRInference.inferInvokeExprWithFunction(methodName, expr, baseType, scene);
363
+ }
364
+ else if (baseType instanceof Type_1.ArrayType) {
365
+ return IRInference.inferInvokeExprWithArray(methodName, expr, baseType, scene);
366
+ }
367
+ return null;
368
+ }
369
+ static inferInvokeExprWithArray(methodName, expr, baseType, scene) {
370
+ if (methodName === Builtin_1.Builtin.ITERATOR_FUNCTION) {
371
+ const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
372
+ if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
373
+ .getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
374
+ returnType.setRealGenericTypes([baseType.getBaseType()]);
375
+ return expr;
376
+ }
377
+ }
378
+ else {
379
+ const arrayInterface = scene.getSdkGlobal(Builtin_1.Builtin.ARRAY);
380
+ if (arrayInterface instanceof ArkClass_1.ArkClass) {
381
+ return this.inferInvokeExpr(expr, new Type_1.ClassType(arrayInterface.getSignature(), [baseType.getBaseType()]), methodName, scene);
382
+ }
383
+ }
384
+ return null;
385
+ }
386
+ static inferInvokeExprWithFunction(methodName, expr, baseType, scene) {
387
+ if (methodName === Const_1.CALL_SIGNATURE_NAME) {
388
+ expr.setMethodSignature(baseType.getMethodSignature());
389
+ return expr;
390
+ }
391
+ const funcInterface = scene.getSdkGlobal(TSConst_1.FUNCTION);
392
+ if (funcInterface instanceof ArkClass_1.ArkClass) {
393
+ const method = ModelUtils_1.ModelUtils.findPropertyInClass(methodName, funcInterface);
394
+ if (method instanceof ArkMethod_1.ArkMethod) {
395
+ expr.setRealGenericTypes([baseType]);
396
+ expr.setMethodSignature(method.getSignature());
397
+ return expr;
398
+ }
399
+ }
400
+ return null;
401
+ }
402
+ static inferInvokeExprWithDeclaredClass(expr, baseType, methodName, scene) {
403
+ var _a;
404
+ let declaredClass = scene.getClass(baseType.getClassSignature());
405
+ if (!declaredClass) {
406
+ const globalClass = scene.getSdkGlobal(baseType.getClassSignature().getClassName());
407
+ if (globalClass instanceof ArkClass_1.ArkClass) {
408
+ declaredClass = globalClass;
409
+ }
410
+ }
411
+ const method = declaredClass ? ModelUtils_1.ModelUtils.findPropertyInClass(methodName, declaredClass) : null;
412
+ if (method instanceof ArkMethod_1.ArkMethod) {
413
+ const methodSignature = method.matchMethodSignature(expr.getArgs());
414
+ TypeInference_1.TypeInference.inferSignatureReturnType(methodSignature, method);
415
+ expr.setMethodSignature(this.replaceMethodSignature(expr.getMethodSignature(), methodSignature));
416
+ expr.setRealGenericTypes(IRInference.getRealTypes(method, declaredClass, baseType));
417
+ if (method.isStatic() && expr instanceof Expr_1.ArkInstanceInvokeExpr) {
418
+ return new Expr_1.ArkStaticInvokeExpr(methodSignature, expr.getArgs(), expr.getRealGenericTypes());
419
+ }
420
+ return expr;
421
+ }
422
+ else if (method instanceof ArkField_1.ArkField) {
423
+ const type = method.getType();
424
+ if (type instanceof Type_1.FunctionType) {
425
+ expr.setMethodSignature(this.generateNewMethodSignature(methodName, type.getMethodSignature()));
426
+ return expr;
427
+ }
428
+ else if (type instanceof Type_1.ClassType && type.getClassSignature().getClassName().endsWith(EtsConst_1.CALL_BACK)) {
429
+ const callback = (_a = scene.getClass(type.getClassSignature())) === null || _a === void 0 ? void 0 : _a.getMethodWithName(Const_1.CALL_SIGNATURE_NAME);
430
+ if (callback) {
431
+ expr.setMethodSignature(callback.getSignature());
432
+ return expr;
433
+ }
434
+ }
435
+ }
436
+ else if (methodName === TSConst_1.CONSTRUCTOR_NAME) { //sdk隐式构造
437
+ const subSignature = new ArkSignature_1.MethodSubSignature(methodName, [], new Type_1.ClassType(baseType.getClassSignature()));
438
+ const signature = new ArkSignature_1.MethodSignature(baseType.getClassSignature(), subSignature);
439
+ expr.setMethodSignature(signature);
440
+ return expr;
441
+ }
442
+ else if (methodName === Builtin_1.Builtin.ITERATOR_NEXT) { //sdk隐式构造
443
+ const returnType = expr.getMethodSignature().getMethodSubSignature().getReturnType();
444
+ if (returnType instanceof Type_1.ClassType && returnType.getClassSignature().getDeclaringFileSignature()
445
+ .getProjectName() === Builtin_1.Builtin.DUMMY_PROJECT_NAME) {
446
+ returnType.setRealGenericTypes(baseType.getRealGenericTypes());
447
+ return expr;
448
+ }
449
+ }
450
+ return null;
451
+ }
452
+ static getRealTypes(method, declaredClass, baseType) {
453
+ let realTypes;
454
+ if (method.getDeclaringArkClass() === declaredClass) {
455
+ realTypes = baseType.getRealGenericTypes();
456
+ }
457
+ else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes()) {
458
+ realTypes = declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getRealTypes();
459
+ }
460
+ else if (declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.hasComponentDecorator()) {
461
+ realTypes = [new Type_1.ClassType(declaredClass === null || declaredClass === void 0 ? void 0 : declaredClass.getSignature())];
462
+ }
463
+ return realTypes;
464
+ }
465
+ static replaceMethodSignature(init, declared) {
466
+ const className = init.getDeclaringClassSignature().getClassName();
467
+ let classSignature;
468
+ if (declared.getDeclaringClassSignature().getClassName().endsWith('Interface')) {
469
+ classSignature = new ArkSignature_1.AliasClassSignature(className, declared.getDeclaringClassSignature());
470
+ }
471
+ let newSubSignature;
472
+ if (classSignature || newSubSignature) {
473
+ return new ArkSignature_1.MethodSignature(classSignature !== null && classSignature !== void 0 ? classSignature : declared.getDeclaringClassSignature(), newSubSignature !== null && newSubSignature !== void 0 ? newSubSignature : declared.getMethodSubSignature());
474
+ }
475
+ return declared;
476
+ }
477
+ static processForEach(arg, baseType, scene) {
478
+ const argType = arg.getType();
479
+ if (argType instanceof Type_1.FunctionType) {
480
+ const argMethodSignature = argType.getMethodSignature();
481
+ const argMethod = scene.getMethod(argMethodSignature);
482
+ if (argMethod != null && argMethod.getBody()) {
483
+ const body = argMethod.getBody();
484
+ const firstStmt = body.getCfg().getStartingStmt();
485
+ if ((firstStmt instanceof Stmt_1.ArkAssignStmt) && (firstStmt.getRightOp() instanceof Ref_1.ArkParameterRef)) {
486
+ const parameterRef = firstStmt.getRightOp();
487
+ parameterRef.setType(baseType.getBaseType());
488
+ const argMethodParams = argMethod.getSignature().getMethodSubSignature().getParameters();
489
+ const actualParam = argMethodParams[argMethodParams.length - 1];
490
+ actualParam.setType(baseType.getBaseType());
491
+ }
492
+ TypeInference_1.TypeInference.inferTypeInMethod(argMethod);
493
+ }
494
+ }
495
+ else {
496
+ logger.warn(`arg of forEach must be callable`);
497
+ }
498
+ }
499
+ static inferLocal(base, arkMethod) {
500
+ var _a, _b, _c;
501
+ const arkClass = arkMethod.getDeclaringArkClass();
502
+ if (base.getName() === TSConst_1.THIS_NAME) {
503
+ if (arkClass.isAnonymousClass()) {
504
+ const thisType = TypeInference_1.TypeInference.inferBaseType(arkClass.getSignature().getDeclaringClassName(), arkClass);
505
+ if (thisType instanceof Type_1.ClassType) {
506
+ base.setType(thisType);
507
+ }
508
+ }
509
+ else {
510
+ base.setType(new Type_1.ClassType(arkClass.getSignature(), arkClass.getGenericsTypes()));
511
+ }
512
+ return;
513
+ }
514
+ let baseType = base.getType();
515
+ if (baseType instanceof Type_1.UnclearReferenceType) {
516
+ baseType = TypeInference_1.TypeInference.inferUnclearRefName(baseType.getName(), arkClass);
517
+ }
518
+ else if (TypeInference_1.TypeInference.isUnclearType(baseType)) {
519
+ const declaringStmt = base.getDeclaringStmt();
520
+ if (!declaringStmt || !declaringStmt.getOriginalText() || ((_a = declaringStmt.getOriginalText()) === null || _a === void 0 ? void 0 : _a.startsWith(base.getName()))) {
521
+ baseType = (_c = (_b = ModelUtils_1.ModelUtils.findDeclaredLocal(base, arkMethod)) === null || _b === void 0 ? void 0 : _b.getType()) !== null && _c !== void 0 ? _c : TypeInference_1.TypeInference.inferBaseType(base.getName(), arkClass);
522
+ }
523
+ }
524
+ if (baseType instanceof Type_1.UnionType || (baseType && !TypeInference_1.TypeInference.isUnclearType(baseType))) {
525
+ base.setType(baseType);
526
+ }
527
+ }
528
+ static generateNewFieldSignature(ref, arkClass, baseType) {
529
+ if (baseType instanceof Type_1.UnionType) {
530
+ for (let type of baseType.flatType()) {
531
+ if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
532
+ continue;
533
+ }
534
+ let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, type);
535
+ if (!TypeInference_1.TypeInference.isUnclearType(newFieldSignature === null || newFieldSignature === void 0 ? void 0 : newFieldSignature.getType())) {
536
+ return newFieldSignature;
537
+ }
538
+ }
539
+ return null;
540
+ }
541
+ else if (baseType instanceof Type_1.AliasType) {
542
+ return this.generateNewFieldSignature(ref, arkClass, baseType.getOriginalType());
543
+ }
544
+ const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
545
+ const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
546
+ let propertyType = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[1];
547
+ if (propertyType && TypeInference_1.TypeInference.isUnclearType(propertyType)) {
548
+ const newType = TypeInference_1.TypeInference.inferUnclearedType(propertyType, arkClass);
549
+ if (newType) {
550
+ propertyType = newType;
551
+ }
552
+ }
553
+ let staticFlag;
554
+ let signature;
555
+ if (baseType instanceof Type_1.ClassType) {
556
+ const property = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[0];
557
+ if (property instanceof ArkField_1.ArkField) {
558
+ return property.getSignature();
559
+ }
560
+ staticFlag = baseType.getClassSignature().getClassName() === Const_1.DEFAULT_ARK_CLASS_NAME ||
561
+ (property instanceof ArkMethod_1.ArkMethod && property.isStatic());
562
+ signature = property instanceof ArkMethod_1.ArkMethod ? property.getSignature().getDeclaringClassSignature() : baseType.getClassSignature();
563
+ }
564
+ else if (baseType instanceof Type_1.AnnotationNamespaceType) {
565
+ staticFlag = true;
566
+ signature = baseType.getNamespaceSignature();
567
+ }
568
+ else {
569
+ return null;
570
+ }
571
+ return new ArkSignature_1.FieldSignature(fieldName, signature, propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
572
+ }
573
+ static inferAnonymousClass(anon, declaredSignature, set = new Set()) {
574
+ var _a;
575
+ if (!anon) {
576
+ return;
577
+ }
578
+ const key = anon.getSignature().toString();
579
+ if (set.has(key)) {
580
+ return;
581
+ }
582
+ else {
583
+ set.add(key);
584
+ }
585
+ const scene = anon.getDeclaringArkFile().getScene();
586
+ const declaredClass = scene.getClass(declaredSignature);
587
+ if (!declaredClass) {
588
+ return;
589
+ }
590
+ for (const anonField of anon.getFields()) {
591
+ const property = ModelUtils_1.ModelUtils.findPropertyInClass(anonField.getName(), declaredClass);
592
+ if (property instanceof ArkField_1.ArkField) {
593
+ this.assignAnonField(property, anonField, scene, set);
594
+ }
595
+ }
596
+ for (const anonMethod of anon.getMethods()) {
597
+ const methodSignature = (_a = declaredClass.getMethodWithName(anonMethod.getName())) === null || _a === void 0 ? void 0 : _a.matchMethodSignature(anonMethod.getSubSignature().getParameters());
598
+ if (methodSignature) {
599
+ anonMethod.setImplementationSignature(methodSignature);
600
+ }
601
+ }
602
+ }
603
+ static assignAnonField(property, anonField, scene, set) {
604
+ function deepInfer(anonType, declaredSignature) {
605
+ if (anonType instanceof Type_1.ClassType && anonType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
606
+ IRInference.inferAnonymousClass(scene.getClass(anonType.getClassSignature()), declaredSignature, set);
607
+ }
608
+ }
609
+ const type = property.getSignature().getType();
610
+ const lastStmt = anonField.getInitializer().at(-1);
611
+ if (lastStmt instanceof Stmt_1.ArkAssignStmt) {
612
+ const rightType = lastStmt.getRightOp().getType();
613
+ if (type instanceof Type_1.ClassType) {
614
+ deepInfer(rightType, type.getClassSignature());
615
+ }
616
+ else if (type instanceof Type_1.ArrayType && type.getBaseType() instanceof Type_1.ClassType &&
617
+ rightType instanceof Type_1.ArrayType) {
618
+ const baseType = rightType.getBaseType();
619
+ const classSignature = type.getBaseType().getClassSignature();
620
+ if (baseType instanceof Type_1.UnionType) {
621
+ baseType.getTypes().forEach(t => deepInfer(t, classSignature));
622
+ }
623
+ else {
624
+ deepInfer(rightType.getBaseType(), classSignature);
625
+ }
626
+ }
627
+ else if (type instanceof Type_1.FunctionType && rightType instanceof Type_1.FunctionType) {
628
+ TypeInference_1.TypeInference.inferFunctionType(rightType, type.getMethodSignature().getMethodSubSignature(), type.getRealGenericTypes());
629
+ }
630
+ const leftOp = lastStmt.getLeftOp();
631
+ if (leftOp instanceof Ref_1.AbstractFieldRef) {
632
+ leftOp.setFieldSignature(property.getSignature());
633
+ }
634
+ }
635
+ anonField.setSignature(property.getSignature());
636
+ }
637
+ static inferAliasTypeExpr(expr, arkMethod) {
638
+ const originalObject = expr.getOriginalObject();
639
+ let model;
640
+ if (originalObject instanceof Local_1.Local) {
641
+ model = ModelUtils_1.ModelUtils.findArkModelByRefName(originalObject.getName(), arkMethod.getDeclaringArkClass());
642
+ }
643
+ else if (originalObject instanceof TypeExpr_1.AbstractTypeExpr) {
644
+ originalObject.inferType(arkMethod);
645
+ model = originalObject;
646
+ }
647
+ else if (originalObject instanceof Type_1.Type) {
648
+ const type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
649
+ // If original Object is ClassType, AliasType or UnclearReferenceType with real generic types,
650
+ // the type after infer should be revert back to the object itself.
651
+ if (type instanceof Type_1.ClassType) {
652
+ const scene = arkMethod.getDeclaringArkFile().getScene();
653
+ model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getClassSignature(), scene);
654
+ }
655
+ else if (type instanceof Type_1.AliasType) {
656
+ const scene = arkMethod.getDeclaringArkFile().getScene();
657
+ model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getSignature(), scene);
658
+ }
659
+ else if (type) {
660
+ model = type;
661
+ }
662
+ if (expr.getRealGenericTypes() !== undefined && originalObject instanceof Type_1.UnclearReferenceType) {
663
+ expr.setRealGenericTypes(originalObject.getGenericTypes());
664
+ }
665
+ }
666
+ if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(model)) {
667
+ expr.setOriginalObject(model);
668
+ }
669
+ return expr;
670
+ }
671
+ static inferTypeQueryExpr(expr, arkMethod) {
672
+ var _a;
673
+ let gTypes = expr.getGenerateTypes();
674
+ if (gTypes) {
675
+ for (let i = 0; i < gTypes.length; i++) {
676
+ const newType = TypeInference_1.TypeInference.inferUnclearedType(gTypes[i], arkMethod.getDeclaringArkClass());
677
+ if (newType) {
678
+ gTypes[i] = newType;
679
+ }
680
+ }
681
+ }
682
+ const opValue = expr.getOpValue();
683
+ let opValueType;
684
+ if (opValue instanceof ArkBaseModel_1.ArkBaseModel) {
685
+ opValueType = (_a = ModelUtils_1.ModelUtils.parseArkBaseModel2Type(opValue)) !== null && _a !== void 0 ? _a : Type_1.UnknownType.getInstance();
686
+ }
687
+ else {
688
+ opValueType = opValue.getType();
689
+ }
690
+ if (!TypeInference_1.TypeInference.isUnclearType(opValueType)) {
691
+ return;
692
+ }
693
+ if (opValue instanceof Local_1.Local) {
694
+ const newOpValueType = TypeInference_1.TypeInference.inferUnclearRefName(opValue.getName(), arkMethod.getDeclaringArkClass());
695
+ const scene = arkMethod.getDeclaringArkFile().getScene();
696
+ if (newOpValueType instanceof Type_1.ClassType) {
697
+ const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getClassSignature(), scene);
698
+ if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
699
+ expr.setOpValue(newOpValue);
700
+ }
701
+ }
702
+ else if (newOpValueType instanceof Type_1.FunctionType) {
703
+ const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getMethodSignature(), scene);
704
+ if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
705
+ expr.setOpValue(newOpValue);
706
+ }
707
+ }
708
+ else {
709
+ this.inferLocal(opValue, arkMethod);
710
+ }
711
+ }
712
+ else if (opValue instanceof Ref_1.AbstractRef || opValue instanceof Expr_1.AbstractExpr) {
713
+ expr.setOpValue(opValue.inferType(arkMethod));
714
+ }
715
+ }
716
+ static inferKeyofTypeExpr(expr, arkMethod) {
717
+ const opType = expr.getOpType();
718
+ if (TypeInference_1.TypeInference.isUnclearType(opType)) {
719
+ if (opType instanceof TypeExpr_1.TypeQueryExpr) {
720
+ this.inferTypeQueryExpr(opType, arkMethod);
721
+ }
722
+ else {
723
+ const type = TypeInference_1.TypeInference.inferUnclearedType(opType, arkMethod.getDeclaringArkClass());
724
+ if (type) {
725
+ expr.setOpType(type);
726
+ }
727
+ }
728
+ }
729
+ }
730
+ }
731
+ exports.IRInference = IRInference;