arkanalyzer 1.0.20 → 1.0.21

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 (279) hide show
  1. package/lib/Config.d.ts +70 -70
  2. package/lib/Config.js +198 -198
  3. package/lib/Scene.d.ts +316 -316
  4. package/lib/Scene.js +1316 -1316
  5. package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +28 -28
  6. package/lib/callgraph/algorithm/AbstractAnalysis.js +144 -144
  7. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts +10 -10
  8. package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +69 -69
  9. package/lib/callgraph/algorithm/RapidTypeAnalysis.d.ts +15 -15
  10. package/lib/callgraph/algorithm/RapidTypeAnalysis.js +146 -146
  11. package/lib/callgraph/common/Statistics.d.ts +57 -57
  12. package/lib/callgraph/common/Statistics.js +228 -228
  13. package/lib/callgraph/model/CallGraph.d.ts +96 -96
  14. package/lib/callgraph/model/CallGraph.js +354 -354
  15. package/lib/callgraph/model/builder/CallGraphBuilder.d.ts +15 -15
  16. package/lib/callgraph/model/builder/CallGraphBuilder.js +106 -106
  17. package/lib/callgraph/pointerAnalysis/Context.d.ts +37 -37
  18. package/lib/callgraph/pointerAnalysis/Context.js +155 -155
  19. package/lib/callgraph/pointerAnalysis/DummyCallCreator.d.ts +22 -22
  20. package/lib/callgraph/pointerAnalysis/DummyCallCreator.js +104 -104
  21. package/lib/callgraph/pointerAnalysis/PTAUtils.d.ts +5 -5
  22. package/lib/callgraph/pointerAnalysis/PTAUtils.js +46 -46
  23. package/lib/callgraph/pointerAnalysis/Pag.d.ts +261 -261
  24. package/lib/callgraph/pointerAnalysis/Pag.js +930 -930
  25. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +157 -157
  26. package/lib/callgraph/pointerAnalysis/PagBuilder.js +1399 -1399
  27. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +72 -72
  28. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +573 -573
  29. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +15 -15
  30. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +81 -81
  31. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +80 -80
  32. package/lib/callgraph/pointerAnalysis/PtsDS.js +308 -308
  33. package/lib/core/base/Constant.d.ts +48 -48
  34. package/lib/core/base/Constant.js +103 -103
  35. package/lib/core/base/Decorator.d.ts +15 -15
  36. package/lib/core/base/Decorator.js +46 -46
  37. package/lib/core/base/DefUseChain.d.ts +8 -8
  38. package/lib/core/base/DefUseChain.js +25 -25
  39. package/lib/core/base/Expr.d.ts +340 -340
  40. package/lib/core/base/Expr.js +917 -917
  41. package/lib/core/base/Local.d.ts +104 -104
  42. package/lib/core/base/Local.js +176 -176
  43. package/lib/core/base/Position.d.ts +30 -30
  44. package/lib/core/base/Position.js +147 -147
  45. package/lib/core/base/Ref.d.ts +173 -173
  46. package/lib/core/base/Ref.js +374 -374
  47. package/lib/core/base/Stmt.d.ts +237 -237
  48. package/lib/core/base/Stmt.js +525 -525
  49. package/lib/core/base/Trap.d.ts +8 -8
  50. package/lib/core/base/Trap.js +30 -30
  51. package/lib/core/base/Type.d.ts +308 -308
  52. package/lib/core/base/Type.js +639 -639
  53. package/lib/core/base/TypeExpr.d.ts +71 -71
  54. package/lib/core/base/TypeExpr.js +155 -155
  55. package/lib/core/base/Value.d.ts +32 -32
  56. package/lib/core/base/Value.js +16 -16
  57. package/lib/core/common/ArkError.d.ts +14 -14
  58. package/lib/core/common/ArkError.js +28 -28
  59. package/lib/core/common/ArkIRTransformer.d.ts +67 -67
  60. package/lib/core/common/ArkIRTransformer.js +690 -690
  61. package/lib/core/common/ArkValueTransformer.d.ts +89 -89
  62. package/lib/core/common/ArkValueTransformer.js +1478 -1478
  63. package/lib/core/common/Builtin.d.ts +36 -36
  64. package/lib/core/common/Builtin.js +81 -81
  65. package/lib/core/common/Const.d.ts +21 -21
  66. package/lib/core/common/Const.js +43 -43
  67. package/lib/core/common/DummyMainCreater.d.ts +46 -46
  68. package/lib/core/common/DummyMainCreater.js +319 -319
  69. package/lib/core/common/EtsConst.d.ts +73 -73
  70. package/lib/core/common/EtsConst.js +1021 -1021
  71. package/lib/core/common/ExprUseReplacer.d.ts +21 -21
  72. package/lib/core/common/ExprUseReplacer.js +124 -124
  73. package/lib/core/common/IRInference.d.ts +36 -36
  74. package/lib/core/common/IRInference.d.ts.map +1 -1
  75. package/lib/core/common/IRInference.js +651 -648
  76. package/lib/core/common/IRUtils.d.ts +18 -18
  77. package/lib/core/common/IRUtils.js +141 -141
  78. package/lib/core/common/ModelUtils.d.ts +70 -70
  79. package/lib/core/common/ModelUtils.js +712 -712
  80. package/lib/core/common/RefUseReplacer.d.ts +13 -13
  81. package/lib/core/common/RefUseReplacer.js +52 -52
  82. package/lib/core/common/SdkUtils.d.ts +8 -8
  83. package/lib/core/common/SdkUtils.js +105 -105
  84. package/lib/core/common/StmtDefReplacer.d.ts +12 -12
  85. package/lib/core/common/StmtDefReplacer.js +41 -41
  86. package/lib/core/common/StmtUseReplacer.d.ts +16 -16
  87. package/lib/core/common/StmtUseReplacer.js +108 -108
  88. package/lib/core/common/TSConst.d.ts +18 -18
  89. package/lib/core/common/TSConst.js +36 -36
  90. package/lib/core/common/TypeInference.d.ts +102 -102
  91. package/lib/core/common/TypeInference.js +748 -748
  92. package/lib/core/common/ValueUtil.d.ts +12 -12
  93. package/lib/core/common/ValueUtil.js +54 -54
  94. package/lib/core/common/VisibleValue.d.ts +36 -36
  95. package/lib/core/common/VisibleValue.js +212 -212
  96. package/lib/core/dataflow/DataflowProblem.d.ts +20 -20
  97. package/lib/core/dataflow/DataflowProblem.js +20 -20
  98. package/lib/core/dataflow/DataflowResult.d.ts +7 -7
  99. package/lib/core/dataflow/DataflowResult.js +26 -26
  100. package/lib/core/dataflow/DataflowSolver.d.ts +43 -43
  101. package/lib/core/dataflow/DataflowSolver.js +307 -307
  102. package/lib/core/dataflow/Edge.d.ts +11 -11
  103. package/lib/core/dataflow/Edge.js +31 -31
  104. package/lib/core/dataflow/Fact.d.ts +6 -6
  105. package/lib/core/dataflow/Fact.js +24 -24
  106. package/lib/core/dataflow/GenericDataFlow.d.ts +142 -142
  107. package/lib/core/dataflow/GenericDataFlow.js +109 -109
  108. package/lib/core/dataflow/ReachingDef.d.ts +62 -62
  109. package/lib/core/dataflow/ReachingDef.js +168 -168
  110. package/lib/core/dataflow/UndefinedVariable.d.ts +45 -45
  111. package/lib/core/dataflow/UndefinedVariable.js +288 -288
  112. package/lib/core/dataflow/Util.d.ts +9 -9
  113. package/lib/core/dataflow/Util.js +64 -64
  114. package/lib/core/graph/BaseExplicitGraph.d.ts +58 -58
  115. package/lib/core/graph/BaseExplicitGraph.js +157 -157
  116. package/lib/core/graph/BaseImplicitGraph.d.ts +77 -77
  117. package/lib/core/graph/BaseImplicitGraph.js +78 -78
  118. package/lib/core/graph/BasicBlock.d.ts +104 -104
  119. package/lib/core/graph/BasicBlock.js +280 -280
  120. package/lib/core/graph/Cfg.d.ts +59 -59
  121. package/lib/core/graph/Cfg.js +282 -282
  122. package/lib/core/graph/DependsGraph.d.ts +35 -35
  123. package/lib/core/graph/DependsGraph.js +87 -87
  124. package/lib/core/graph/DominanceFinder.d.ts +15 -15
  125. package/lib/core/graph/DominanceFinder.js +121 -121
  126. package/lib/core/graph/DominanceTree.d.ts +12 -12
  127. package/lib/core/graph/DominanceTree.js +70 -70
  128. package/lib/core/graph/GraphTraits.d.ts +7 -7
  129. package/lib/core/graph/GraphTraits.js +16 -16
  130. package/lib/core/graph/Scc.d.ts +61 -61
  131. package/lib/core/graph/Scc.js +222 -222
  132. package/lib/core/graph/ViewTree.d.ts +114 -114
  133. package/lib/core/graph/ViewTree.js +16 -16
  134. package/lib/core/graph/builder/CfgBuilder.d.ts +176 -176
  135. package/lib/core/graph/builder/CfgBuilder.js +1139 -1139
  136. package/lib/core/graph/builder/ConditionBuilder.d.ts +15 -15
  137. package/lib/core/graph/builder/ConditionBuilder.js +252 -252
  138. package/lib/core/graph/builder/LoopBuilder.d.ts +20 -20
  139. package/lib/core/graph/builder/LoopBuilder.js +251 -251
  140. package/lib/core/graph/builder/SwitchBuilder.d.ts +11 -11
  141. package/lib/core/graph/builder/SwitchBuilder.js +152 -152
  142. package/lib/core/graph/builder/TrapBuilder.d.ts +16 -16
  143. package/lib/core/graph/builder/TrapBuilder.js +272 -272
  144. package/lib/core/graph/builder/ViewTreeBuilder.d.ts +203 -203
  145. package/lib/core/graph/builder/ViewTreeBuilder.js +1055 -1055
  146. package/lib/core/model/ArkBaseModel.d.ts +59 -59
  147. package/lib/core/model/ArkBaseModel.js +274 -274
  148. package/lib/core/model/ArkBody.d.ts +24 -24
  149. package/lib/core/model/ArkBody.js +65 -65
  150. package/lib/core/model/ArkClass.d.ts +206 -206
  151. package/lib/core/model/ArkClass.js +439 -439
  152. package/lib/core/model/ArkExport.d.ts +72 -72
  153. package/lib/core/model/ArkExport.js +147 -147
  154. package/lib/core/model/ArkField.d.ts +62 -62
  155. package/lib/core/model/ArkField.js +113 -113
  156. package/lib/core/model/ArkFile.d.ts +131 -131
  157. package/lib/core/model/ArkFile.js +267 -267
  158. package/lib/core/model/ArkImport.d.ts +44 -44
  159. package/lib/core/model/ArkImport.js +108 -108
  160. package/lib/core/model/ArkMetadata.d.ts +31 -31
  161. package/lib/core/model/ArkMetadata.js +55 -55
  162. package/lib/core/model/ArkMethod.d.ts +261 -261
  163. package/lib/core/model/ArkMethod.js +592 -592
  164. package/lib/core/model/ArkNamespace.d.ts +66 -66
  165. package/lib/core/model/ArkNamespace.js +209 -209
  166. package/lib/core/model/ArkSignature.d.ts +162 -162
  167. package/lib/core/model/ArkSignature.js +379 -379
  168. package/lib/core/model/builder/ArkClassBuilder.d.ts +12 -12
  169. package/lib/core/model/builder/ArkClassBuilder.js +454 -454
  170. package/lib/core/model/builder/ArkExportBuilder.d.ts +24 -24
  171. package/lib/core/model/builder/ArkExportBuilder.js +210 -210
  172. package/lib/core/model/builder/ArkFieldBuilder.d.ts +8 -8
  173. package/lib/core/model/builder/ArkFieldBuilder.js +193 -193
  174. package/lib/core/model/builder/ArkFileBuilder.d.ts +9 -9
  175. package/lib/core/model/builder/ArkFileBuilder.js +165 -165
  176. package/lib/core/model/builder/ArkImportBuilder.d.ts +4 -4
  177. package/lib/core/model/builder/ArkImportBuilder.js +128 -128
  178. package/lib/core/model/builder/ArkMethodBuilder.d.ts +63 -63
  179. package/lib/core/model/builder/ArkMethodBuilder.js +486 -486
  180. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts +5 -5
  181. package/lib/core/model/builder/ArkNamespaceBuilder.js +205 -205
  182. package/lib/core/model/builder/ArkSignatureBuilder.d.ts +8 -8
  183. package/lib/core/model/builder/ArkSignatureBuilder.js +40 -40
  184. package/lib/core/model/builder/BodyBuilder.d.ts +55 -30
  185. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -1
  186. package/lib/core/model/builder/BodyBuilder.js +542 -371
  187. package/lib/core/model/builder/builderUtils.d.ts +18 -18
  188. package/lib/core/model/builder/builderUtils.js +558 -558
  189. package/lib/index.d.ts +82 -80
  190. package/lib/index.d.ts.map +1 -1
  191. package/lib/index.js +201 -196
  192. package/lib/save/ArkStream.d.ts +23 -23
  193. package/lib/save/ArkStream.js +83 -83
  194. package/lib/save/DotPrinter.d.ts +43 -43
  195. package/lib/save/DotPrinter.js +170 -170
  196. package/lib/save/GraphPrinter.d.ts +16 -16
  197. package/lib/save/GraphPrinter.js +134 -134
  198. package/lib/save/JsonPrinter.d.ts +30 -30
  199. package/lib/save/JsonPrinter.js +580 -580
  200. package/lib/save/Printer.d.ts +12 -12
  201. package/lib/save/Printer.js +27 -27
  202. package/lib/save/PrinterBuilder.d.ts +53 -53
  203. package/lib/save/PrinterBuilder.js +145 -145
  204. package/lib/save/ViewTreePrinter.d.ts +14 -14
  205. package/lib/save/ViewTreePrinter.js +123 -123
  206. package/lib/save/arkir/ArkIRClassPrinter.d.ts +13 -13
  207. package/lib/save/arkir/ArkIRClassPrinter.js +92 -92
  208. package/lib/save/arkir/ArkIRFieldPrinter.d.ts +11 -11
  209. package/lib/save/arkir/ArkIRFieldPrinter.js +64 -64
  210. package/lib/save/arkir/ArkIRFilePrinter.d.ts +12 -12
  211. package/lib/save/arkir/ArkIRFilePrinter.js +54 -54
  212. package/lib/save/arkir/ArkIRMethodPrinter.d.ts +16 -16
  213. package/lib/save/arkir/ArkIRMethodPrinter.js +159 -159
  214. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +11 -11
  215. package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -66
  216. package/lib/save/base/BasePrinter.d.ts +23 -23
  217. package/lib/save/base/BasePrinter.js +70 -70
  218. package/lib/save/base/ExportPrinter.d.ts +8 -8
  219. package/lib/save/base/ExportPrinter.js +67 -67
  220. package/lib/save/base/ImportPrinter.d.ts +9 -9
  221. package/lib/save/base/ImportPrinter.js +92 -92
  222. package/lib/save/base/PrinterUtils.d.ts +24 -24
  223. package/lib/save/base/PrinterUtils.js +208 -208
  224. package/lib/save/serializeArkIR.d.ts +8 -8
  225. package/lib/save/serializeArkIR.js +294 -294
  226. package/lib/save/source/SourceBase.d.ts +22 -22
  227. package/lib/save/source/SourceBase.js +64 -64
  228. package/lib/save/source/SourceBody.d.ts +58 -58
  229. package/lib/save/source/SourceBody.js +296 -296
  230. package/lib/save/source/SourceClass.d.ts +25 -25
  231. package/lib/save/source/SourceClass.js +187 -187
  232. package/lib/save/source/SourceField.d.ts +13 -13
  233. package/lib/save/source/SourceField.js +73 -73
  234. package/lib/save/source/SourceFilePrinter.d.ts +12 -12
  235. package/lib/save/source/SourceFilePrinter.js +69 -69
  236. package/lib/save/source/SourceMethod.d.ts +22 -22
  237. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  238. package/lib/save/source/SourceMethod.js +196 -193
  239. package/lib/save/source/SourceNamespace.d.ts +11 -11
  240. package/lib/save/source/SourceNamespace.js +83 -83
  241. package/lib/save/source/SourceStmt.d.ts +178 -178
  242. package/lib/save/source/SourceStmt.js +838 -838
  243. package/lib/save/source/SourceTransformer.d.ts +46 -46
  244. package/lib/save/source/SourceTransformer.js +446 -446
  245. package/lib/transformer/FunctionTransformer.d.ts +2 -2
  246. package/lib/transformer/FunctionTransformer.js +17 -17
  247. package/lib/transformer/SceneTransformer.d.ts +2 -2
  248. package/lib/transformer/SceneTransformer.js +17 -17
  249. package/lib/transformer/StaticSingleAssignmentFormer.d.ts +12 -12
  250. package/lib/transformer/StaticSingleAssignmentFormer.js +259 -259
  251. package/lib/transformer/Transformer.d.ts +6 -6
  252. package/lib/transformer/Transformer.js +22 -22
  253. package/lib/utils/AstTreeUtils.d.ts +4 -4
  254. package/lib/utils/AstTreeUtils.js +26 -26
  255. package/lib/utils/CfgStructualAnalysis.d.ts +110 -110
  256. package/lib/utils/CfgStructualAnalysis.js +1277 -1277
  257. package/lib/utils/FileUtils.d.ts +18 -18
  258. package/lib/utils/FileUtils.js +135 -135
  259. package/lib/utils/SparseBitVector.d.ts +100 -100
  260. package/lib/utils/SparseBitVector.js +445 -445
  261. package/lib/utils/callGraphUtils.d.ts +30 -30
  262. package/lib/utils/callGraphUtils.js +205 -205
  263. package/lib/utils/crypto_utils.d.ts +5 -5
  264. package/lib/utils/crypto_utils.js +57 -57
  265. package/lib/utils/entryMethodUtils.d.ts +13 -13
  266. package/lib/utils/entryMethodUtils.js +110 -110
  267. package/lib/utils/getAllFiles.d.ts +9 -9
  268. package/lib/utils/getAllFiles.js +90 -90
  269. package/lib/utils/json5parser.d.ts +6 -6
  270. package/lib/utils/json5parser.js +146 -146
  271. package/lib/utils/logger.d.ts +18 -18
  272. package/lib/utils/logger.d.ts.map +1 -1
  273. package/lib/utils/logger.js +97 -90
  274. package/lib/utils/pathTransfer.d.ts +1 -1
  275. package/lib/utils/pathTransfer.js +25 -25
  276. package/node_modules/json5/lib/cli.js +0 -0
  277. package/node_modules/ohos-typescript/bin/tsc +0 -0
  278. package/node_modules/ohos-typescript/bin/tsserver +0 -0
  279. package/package.json +3 -3
@@ -1,648 +1,651 @@
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
+ 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
+ const argMethodParams = argMethod.getSignature().getMethodSubSignature().getParameters();
418
+ const actualParam = argMethodParams[argMethodParams.length - 1];
419
+ actualParam.setType(baseType.getBaseType());
420
+ }
421
+ TypeInference_1.TypeInference.inferTypeInMethod(argMethod);
422
+ }
423
+ }
424
+ else {
425
+ logger.warn(`arg of forEach must be callable`);
426
+ }
427
+ }
428
+ static inferLocal(base, arkMethod) {
429
+ var _a, _b, _c;
430
+ const arkClass = arkMethod.getDeclaringArkClass();
431
+ if (base.getName() === TSConst_1.THIS_NAME) {
432
+ if (!arkClass.isAnonymousClass()) {
433
+ base.setType(new Type_1.ClassType(arkClass.getSignature(), arkClass.getGenericsTypes()));
434
+ }
435
+ return;
436
+ }
437
+ let baseType = base.getType();
438
+ if (baseType instanceof Type_1.UnclearReferenceType) {
439
+ baseType = TypeInference_1.TypeInference.inferUnclearRefName(baseType.getName(), arkClass);
440
+ }
441
+ else if (TypeInference_1.TypeInference.isUnclearType(baseType)) {
442
+ const declaringStmt = base.getDeclaringStmt();
443
+ if (!declaringStmt || !declaringStmt.getOriginalText() || ((_a = declaringStmt.getOriginalText()) === null || _a === void 0 ? void 0 : _a.startsWith(base.getName()))) {
444
+ 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);
445
+ }
446
+ }
447
+ if (baseType && !TypeInference_1.TypeInference.isUnclearType(baseType)) {
448
+ base.setType(baseType);
449
+ }
450
+ }
451
+ static generateNewFieldSignature(ref, arkClass, baseType) {
452
+ if (baseType instanceof Type_1.UnionType) {
453
+ for (let type of baseType.flatType()) {
454
+ if (type instanceof Type_1.UndefinedType || type instanceof Type_1.NullType) {
455
+ continue;
456
+ }
457
+ let newFieldSignature = this.generateNewFieldSignature(ref, arkClass, type);
458
+ if (!TypeInference_1.TypeInference.isUnclearType(newFieldSignature === null || newFieldSignature === void 0 ? void 0 : newFieldSignature.getType())) {
459
+ return newFieldSignature;
460
+ }
461
+ }
462
+ return null;
463
+ }
464
+ else if (baseType instanceof Type_1.AliasType) {
465
+ return this.generateNewFieldSignature(ref, arkClass, baseType.getOriginalType());
466
+ }
467
+ const fieldName = ref.getFieldName().replace(/[\"|\']/g, '');
468
+ const propertyAndType = TypeInference_1.TypeInference.inferFieldType(baseType, fieldName, arkClass);
469
+ let propertyType = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[1];
470
+ if (propertyType && TypeInference_1.TypeInference.isUnclearType(propertyType)) {
471
+ const newType = TypeInference_1.TypeInference.inferUnclearedType(propertyType, arkClass);
472
+ if (newType) {
473
+ propertyType = newType;
474
+ }
475
+ }
476
+ let staticFlag;
477
+ let signature;
478
+ if (baseType instanceof Type_1.ClassType) {
479
+ const property = propertyAndType === null || propertyAndType === void 0 ? void 0 : propertyAndType[0];
480
+ if (property instanceof ArkField_1.ArkField) {
481
+ return property.getSignature();
482
+ }
483
+ staticFlag = baseType.getClassSignature().getClassName() === Const_1.DEFAULT_ARK_CLASS_NAME ||
484
+ (property instanceof ArkMethod_1.ArkMethod && property.isStatic());
485
+ signature = property instanceof ArkMethod_1.ArkMethod ? property.getSignature().getDeclaringClassSignature() : baseType.getClassSignature();
486
+ }
487
+ else if (baseType instanceof Type_1.AnnotationNamespaceType) {
488
+ staticFlag = true;
489
+ signature = baseType.getNamespaceSignature();
490
+ }
491
+ else {
492
+ return null;
493
+ }
494
+ return new ArkSignature_1.FieldSignature(fieldName, signature, propertyType !== null && propertyType !== void 0 ? propertyType : ref.getType(), staticFlag);
495
+ }
496
+ static inferAnonymousClass(anon, declaredSignature, set = new Set()) {
497
+ var _a;
498
+ if (!anon) {
499
+ return;
500
+ }
501
+ const key = anon.getSignature().toString();
502
+ if (set.has(key)) {
503
+ return;
504
+ }
505
+ else {
506
+ set.add(key);
507
+ }
508
+ const scene = anon.getDeclaringArkFile().getScene();
509
+ const declaredClass = scene.getClass(declaredSignature);
510
+ if (!declaredClass) {
511
+ return;
512
+ }
513
+ for (const anonField of anon.getFields()) {
514
+ const property = ModelUtils_1.ModelUtils.findPropertyInClass(anonField.getName(), declaredClass);
515
+ if (property instanceof ArkField_1.ArkField) {
516
+ this.assignAnonField(property, anonField, scene, set);
517
+ }
518
+ }
519
+ for (const anonMethod of anon.getMethods()) {
520
+ const methodSignature = (_a = declaredClass.getMethodWithName(anonMethod.getName())) === null || _a === void 0 ? void 0 : _a.matchMethodSignature(anonMethod.getSubSignature().getParameters());
521
+ if (methodSignature) {
522
+ anonMethod.setImplementationSignature(methodSignature);
523
+ }
524
+ }
525
+ }
526
+ static assignAnonField(property, anonField, scene, set) {
527
+ function deepInfer(anonType, declaredSignature) {
528
+ if (anonType instanceof Type_1.ClassType && anonType.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
529
+ IRInference.inferAnonymousClass(scene.getClass(anonType.getClassSignature()), declaredSignature, set);
530
+ }
531
+ }
532
+ const type = property.getSignature().getType();
533
+ const lastStmt = anonField.getInitializer().at(-1);
534
+ if (lastStmt instanceof Stmt_1.ArkAssignStmt) {
535
+ const rightType = lastStmt.getRightOp().getType();
536
+ if (type instanceof Type_1.ClassType) {
537
+ deepInfer(rightType, type.getClassSignature());
538
+ }
539
+ else if (type instanceof Type_1.ArrayType && type.getBaseType() instanceof Type_1.ClassType &&
540
+ rightType instanceof Type_1.ArrayType) {
541
+ const baseType = rightType.getBaseType();
542
+ const classSignature = type.getBaseType().getClassSignature();
543
+ if (baseType instanceof Type_1.UnionType) {
544
+ baseType.getTypes().forEach(t => deepInfer(t, classSignature));
545
+ }
546
+ else {
547
+ deepInfer(rightType.getBaseType(), classSignature);
548
+ }
549
+ }
550
+ const leftOp = lastStmt.getLeftOp();
551
+ if (leftOp instanceof Ref_1.AbstractFieldRef) {
552
+ leftOp.setFieldSignature(property.getSignature());
553
+ }
554
+ }
555
+ anonField.setSignature(property.getSignature());
556
+ }
557
+ static inferAliasTypeExpr(expr, arkMethod) {
558
+ const originalObject = expr.getOriginalObject();
559
+ let model;
560
+ if (originalObject instanceof Local_1.Local) {
561
+ model = ModelUtils_1.ModelUtils.findArkModelByRefName(originalObject.getName(), arkMethod.getDeclaringArkClass());
562
+ }
563
+ else if (originalObject instanceof TypeExpr_1.AbstractTypeExpr) {
564
+ originalObject.inferType(arkMethod);
565
+ model = originalObject;
566
+ }
567
+ else if (originalObject instanceof Type_1.Type) {
568
+ const type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
569
+ // If original Object is ClassType, AliasType or UnclearReferenceType with real generic types,
570
+ // the type after infer should be revert back to the object itself.
571
+ if (type instanceof Type_1.ClassType) {
572
+ const scene = arkMethod.getDeclaringArkFile().getScene();
573
+ model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getClassSignature(), scene);
574
+ }
575
+ else if (type instanceof Type_1.AliasType) {
576
+ const scene = arkMethod.getDeclaringArkFile().getScene();
577
+ model = ModelUtils_1.ModelUtils.findArkModelBySignature(type.getSignature(), scene);
578
+ }
579
+ else if (type) {
580
+ model = type;
581
+ }
582
+ if (expr.getRealGenericTypes() !== undefined && originalObject instanceof Type_1.UnclearReferenceType) {
583
+ expr.setRealGenericTypes(originalObject.getGenericTypes());
584
+ }
585
+ }
586
+ if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(model)) {
587
+ expr.setOriginalObject(model);
588
+ }
589
+ return expr;
590
+ }
591
+ static inferTypeQueryExpr(expr, arkMethod) {
592
+ var _a;
593
+ let gTypes = expr.getGenerateTypes();
594
+ if (gTypes) {
595
+ for (let i = 0; i < gTypes.length; i++) {
596
+ const newType = TypeInference_1.TypeInference.inferUnclearedType(gTypes[i], arkMethod.getDeclaringArkClass());
597
+ if (newType) {
598
+ gTypes[i] = newType;
599
+ }
600
+ }
601
+ }
602
+ const opValue = expr.getOpValue();
603
+ let opValueType;
604
+ if (opValue instanceof ArkBaseModel_1.ArkBaseModel) {
605
+ opValueType = (_a = ModelUtils_1.ModelUtils.parseArkBaseModel2Type(opValue)) !== null && _a !== void 0 ? _a : Type_1.UnknownType.getInstance();
606
+ }
607
+ else {
608
+ opValueType = opValue.getType();
609
+ }
610
+ if (!TypeInference_1.TypeInference.isUnclearType(opValueType)) {
611
+ return;
612
+ }
613
+ if (opValue instanceof Local_1.Local) {
614
+ const newOpValueType = TypeInference_1.TypeInference.inferUnclearRefName(opValue.getName(), arkMethod.getDeclaringArkClass());
615
+ const scene = arkMethod.getDeclaringArkFile().getScene();
616
+ if (newOpValueType instanceof Type_1.ClassType) {
617
+ const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getClassSignature(), scene);
618
+ if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
619
+ expr.setOpValue(newOpValue);
620
+ }
621
+ }
622
+ else if (newOpValueType instanceof Type_1.FunctionType) {
623
+ const newOpValue = ModelUtils_1.ModelUtils.findArkModelBySignature(newOpValueType.getMethodSignature(), scene);
624
+ if (newOpValue instanceof ArkBaseModel_1.ArkBaseModel) {
625
+ expr.setOpValue(newOpValue);
626
+ }
627
+ }
628
+ else {
629
+ this.inferLocal(opValue, arkMethod);
630
+ }
631
+ }
632
+ else if (opValue instanceof Ref_1.AbstractRef || opValue instanceof Expr_1.AbstractExpr) {
633
+ expr.setOpValue(opValue.inferType(arkMethod));
634
+ }
635
+ }
636
+ static inferKeyofTypeExpr(expr, arkMethod) {
637
+ const opType = expr.getOpType();
638
+ if (TypeInference_1.TypeInference.isUnclearType(opType)) {
639
+ if (opType instanceof TypeExpr_1.TypeQueryExpr) {
640
+ this.inferTypeQueryExpr(opType, arkMethod);
641
+ }
642
+ else {
643
+ const type = TypeInference_1.TypeInference.inferUnclearedType(opType, arkMethod.getDeclaringArkClass());
644
+ if (type) {
645
+ expr.setOpType(type);
646
+ }
647
+ }
648
+ }
649
+ }
650
+ }
651
+ exports.IRInference = IRInference;