arkanalyzer 1.0.16 → 1.0.18

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 (113) hide show
  1. package/lib/callgraph/pointerAnalysis/Pag.d.ts +1 -1
  2. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  3. package/lib/callgraph/pointerAnalysis/Pag.js +9 -0
  4. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  5. package/lib/callgraph/pointerAnalysis/PagBuilder.js +6 -2
  6. package/lib/core/base/Decorator.d.ts +1 -0
  7. package/lib/core/base/Decorator.d.ts.map +1 -1
  8. package/lib/core/base/Decorator.js +4 -1
  9. package/lib/core/base/Type.d.ts +45 -3
  10. package/lib/core/base/Type.d.ts.map +1 -1
  11. package/lib/core/base/Type.js +84 -4
  12. package/lib/core/common/ArkIRTransformer.d.ts +1 -0
  13. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  14. package/lib/core/common/ArkIRTransformer.js +42 -23
  15. package/lib/core/common/ArkValueTransformer.d.ts +1 -0
  16. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  17. package/lib/core/common/ArkValueTransformer.js +45 -10
  18. package/lib/core/common/IRInference.d.ts.map +1 -1
  19. package/lib/core/common/IRInference.js +6 -0
  20. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  21. package/lib/core/common/ModelUtils.js +5 -1
  22. package/lib/core/common/TypeInference.d.ts +1 -0
  23. package/lib/core/common/TypeInference.d.ts.map +1 -1
  24. package/lib/core/common/TypeInference.js +27 -8
  25. package/lib/core/{common → graph/builder}/CfgBuilder.d.ts +34 -46
  26. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -0
  27. package/lib/core/graph/builder/CfgBuilder.js +1139 -0
  28. package/lib/core/graph/builder/ConditionBuilder.d.ts +16 -0
  29. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -0
  30. package/lib/core/graph/builder/ConditionBuilder.js +252 -0
  31. package/lib/core/graph/builder/LoopBuilder.d.ts +21 -0
  32. package/lib/core/graph/builder/LoopBuilder.d.ts.map +1 -0
  33. package/lib/core/graph/builder/LoopBuilder.js +251 -0
  34. package/lib/core/graph/builder/SwitchBuilder.d.ts +12 -0
  35. package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -0
  36. package/lib/core/graph/builder/SwitchBuilder.js +152 -0
  37. package/lib/core/graph/builder/TrapBuilder.d.ts +17 -0
  38. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -0
  39. package/lib/core/graph/builder/TrapBuilder.js +272 -0
  40. package/lib/core/model/ArkMethod.d.ts +1 -1
  41. package/lib/core/model/ArkMethod.js +1 -1
  42. package/lib/core/model/ArkSignature.d.ts +9 -1
  43. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  44. package/lib/core/model/ArkSignature.js +17 -1
  45. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  46. package/lib/core/model/builder/ArkClassBuilder.js +2 -1
  47. package/lib/core/model/builder/ArkMethodBuilder.js +1 -1
  48. package/lib/core/{common → model/builder}/BodyBuilder.d.ts +5 -5
  49. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -0
  50. package/lib/core/{common → model/builder}/BodyBuilder.js +12 -12
  51. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  52. package/lib/core/model/builder/builderUtils.js +31 -5
  53. package/lib/save/JsonPrinter.d.ts +1 -1
  54. package/lib/save/JsonPrinter.d.ts.map +1 -1
  55. package/lib/save/JsonPrinter.js +2 -2
  56. package/lib/save/PrinterBuilder.d.ts +22 -0
  57. package/lib/save/PrinterBuilder.d.ts.map +1 -1
  58. package/lib/save/PrinterBuilder.js +54 -1
  59. package/lib/save/arkir/ArkIRClassPrinter.d.ts +14 -0
  60. package/lib/save/arkir/ArkIRClassPrinter.d.ts.map +1 -0
  61. package/lib/save/arkir/ArkIRClassPrinter.js +92 -0
  62. package/lib/save/arkir/ArkIRFieldPrinter.d.ts +12 -0
  63. package/lib/save/arkir/ArkIRFieldPrinter.d.ts.map +1 -0
  64. package/lib/save/arkir/ArkIRFieldPrinter.js +64 -0
  65. package/lib/save/arkir/ArkIRFilePrinter.d.ts +13 -0
  66. package/lib/save/arkir/ArkIRFilePrinter.d.ts.map +1 -0
  67. package/lib/save/arkir/ArkIRFilePrinter.js +54 -0
  68. package/lib/save/arkir/ArkIRMethodPrinter.d.ts +17 -0
  69. package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -0
  70. package/lib/save/arkir/ArkIRMethodPrinter.js +159 -0
  71. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +12 -0
  72. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts.map +1 -0
  73. package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -0
  74. package/lib/save/base/BasePrinter.d.ts +24 -0
  75. package/lib/save/base/BasePrinter.d.ts.map +1 -0
  76. package/lib/save/base/BasePrinter.js +70 -0
  77. package/lib/save/base/ExportPrinter.d.ts +9 -0
  78. package/lib/save/base/ExportPrinter.d.ts.map +1 -0
  79. package/lib/save/base/ExportPrinter.js +67 -0
  80. package/lib/save/base/ImportPrinter.d.ts +10 -0
  81. package/lib/save/base/ImportPrinter.d.ts.map +1 -0
  82. package/lib/save/base/ImportPrinter.js +92 -0
  83. package/lib/save/{source/SourceUtils.d.ts → base/PrinterUtils.d.ts} +2 -2
  84. package/lib/save/{source/SourceUtils.d.ts.map → base/PrinterUtils.d.ts.map} +1 -1
  85. package/lib/save/{source/SourceUtils.js → base/PrinterUtils.js} +10 -10
  86. package/lib/save/source/SourceBase.d.ts +2 -11
  87. package/lib/save/source/SourceBase.d.ts.map +1 -1
  88. package/lib/save/source/SourceBase.js +3 -25
  89. package/lib/save/source/SourceBody.js +3 -3
  90. package/lib/save/source/SourceClass.d.ts +2 -1
  91. package/lib/save/source/SourceClass.d.ts.map +1 -1
  92. package/lib/save/source/SourceClass.js +18 -17
  93. package/lib/save/source/SourceFilePrinter.d.ts +1 -1
  94. package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
  95. package/lib/save/source/SourceFilePrinter.js +9 -10
  96. package/lib/save/source/SourceMethod.d.ts +1 -1
  97. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  98. package/lib/save/source/SourceMethod.js +37 -22
  99. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  100. package/lib/save/source/SourceNamespace.js +6 -6
  101. package/lib/save/source/SourceStmt.d.ts +1 -1
  102. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  103. package/lib/save/source/SourceStmt.js +29 -42
  104. package/lib/save/source/SourceTransformer.d.ts +3 -1
  105. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  106. package/lib/save/source/SourceTransformer.js +65 -29
  107. package/package.json +1 -1
  108. package/lib/core/common/BodyBuilder.d.ts.map +0 -1
  109. package/lib/core/common/CfgBuilder.d.ts.map +0 -1
  110. package/lib/core/common/CfgBuilder.js +0 -1886
  111. package/lib/save/source/SourceModule.d.ts +0 -16
  112. package/lib/save/source/SourceModule.d.ts.map +0 -1
  113. package/lib/save/source/SourceModule.js +0 -125
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.SwitchBuilder = void 0;
41
+ const BasicBlock_1 = require("../BasicBlock");
42
+ const logger_1 = __importStar(require("../../../utils/logger"));
43
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'SwitchBuilder');
44
+ /**
45
+ * Builder for switch statement in CFG
46
+ */
47
+ class SwitchBuilder {
48
+ buildSwitch(blockBuilderToCfgBlock, blockBuildersContainSwitch, valueAndStmtsOfSwitchAndCasesAll, arkIRTransformer, basicBlockSet) {
49
+ for (let i = 0; i < blockBuildersContainSwitch.length; i++) {
50
+ const blockBuilderContainSwitch = blockBuildersContainSwitch[i];
51
+ if (!blockBuilderToCfgBlock.has(blockBuilderContainSwitch)) {
52
+ logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
53
+ continue;
54
+ }
55
+ const blockContainSwitch = blockBuilderToCfgBlock.get(blockBuilderContainSwitch);
56
+ const valueAndStmtsOfSwitch = valueAndStmtsOfSwitchAndCasesAll[i][0];
57
+ const stmtsOfSwitch = valueAndStmtsOfSwitch.stmts;
58
+ stmtsOfSwitch.forEach((stmt) => {
59
+ blockContainSwitch.addStmt(stmt);
60
+ });
61
+ const stmtsCnt = blockBuilderContainSwitch.stmts.length;
62
+ const switchStmtBuilder = blockBuilderContainSwitch.stmts[stmtsCnt - 1];
63
+ const cases = switchStmtBuilder.cases;
64
+ let nonEmptyCaseCnt = 0;
65
+ for (const currCase of cases) {
66
+ if (currCase.stmt.block) { // there are stmts after this case
67
+ nonEmptyCaseCnt++;
68
+ }
69
+ }
70
+ if (nonEmptyCaseCnt === 0) {
71
+ continue;
72
+ }
73
+ const caseCnt = cases.length;
74
+ const caseIfBlocks = this.generateIfBlocksForCases(valueAndStmtsOfSwitchAndCasesAll[i], caseCnt, blockContainSwitch, basicBlockSet, arkIRTransformer);
75
+ this.linkIfBlockAndCaseBlock(blockContainSwitch, caseIfBlocks, switchStmtBuilder, blockBuilderToCfgBlock);
76
+ }
77
+ }
78
+ generateIfBlocksForCases(valueAndStmtsOfSwitchAndCases, caseCnt, blockContainSwitch, basicBlockSet, arkIRTransformer) {
79
+ const valueAndStmtsOfSwitch = valueAndStmtsOfSwitchAndCases[0];
80
+ const valueOfSwitch = valueAndStmtsOfSwitch.value;
81
+ const caseIfBlocks = [];
82
+ for (let j = 0; j < caseCnt; j++) {
83
+ let caseIfBlock;
84
+ if (j === 0) {
85
+ caseIfBlock = blockContainSwitch;
86
+ }
87
+ else {
88
+ caseIfBlock = new BasicBlock_1.BasicBlock();
89
+ basicBlockSet.add(caseIfBlock);
90
+ }
91
+ caseIfBlocks.push(caseIfBlock);
92
+ const caseValueAndStmts = valueAndStmtsOfSwitchAndCases[j + 1];
93
+ const caseValue = caseValueAndStmts.value;
94
+ const caseStmts = caseValueAndStmts.stmts;
95
+ caseStmts.forEach((stmt) => {
96
+ caseIfBlock.addStmt(stmt);
97
+ });
98
+ const caseIfStmts = arkIRTransformer.generateIfStmtForValues(valueOfSwitch, valueAndStmtsOfSwitch.valueOriginalPositions, caseValue, caseValueAndStmts.valueOriginalPositions);
99
+ caseIfStmts.forEach((stmt) => {
100
+ caseIfBlock.addStmt(stmt);
101
+ });
102
+ }
103
+ return caseIfBlocks;
104
+ }
105
+ linkIfBlockAndCaseBlock(blockContainSwitch, caseIfBlocks, switchStmtBuilder, blockBuilderToCfgBlock) {
106
+ const successorsOfBlockContainSwitch = Array.from(blockContainSwitch.getSuccessors());
107
+ const expectedSuccessorsOfCaseIfBlock = [];
108
+ const defaultStmtBuilder = switchStmtBuilder.default;
109
+ if (defaultStmtBuilder && defaultStmtBuilder.block) {
110
+ expectedSuccessorsOfCaseIfBlock.push(...successorsOfBlockContainSwitch.splice(-1, 1));
111
+ }
112
+ else {
113
+ const afterSwitchStmtBuilder = switchStmtBuilder.afterSwitch;
114
+ const afterSwitchBlockBuilder = afterSwitchStmtBuilder === null || afterSwitchStmtBuilder === void 0 ? void 0 : afterSwitchStmtBuilder.block;
115
+ if (!afterSwitchBlockBuilder || !blockBuilderToCfgBlock.has(afterSwitchBlockBuilder)) {
116
+ logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
117
+ return false;
118
+ }
119
+ expectedSuccessorsOfCaseIfBlock.push(blockBuilderToCfgBlock.get(afterSwitchBlockBuilder));
120
+ }
121
+ const caseCnt = switchStmtBuilder.cases.length;
122
+ for (let i = caseCnt - 1; i >= 0; i--) {
123
+ const currCase = switchStmtBuilder.cases[i];
124
+ if (currCase.stmt.block) {
125
+ expectedSuccessorsOfCaseIfBlock.push(...successorsOfBlockContainSwitch.splice(-1, 1));
126
+ }
127
+ else { // if there are no stmts after this case, reuse the successor of the next case
128
+ expectedSuccessorsOfCaseIfBlock.push(...expectedSuccessorsOfCaseIfBlock.slice(-1));
129
+ }
130
+ }
131
+ expectedSuccessorsOfCaseIfBlock.reverse();
132
+ blockContainSwitch.getSuccessors().forEach((successor) => {
133
+ successor.getPredecessors().splice(0, 1);
134
+ });
135
+ blockContainSwitch.getSuccessors().splice(0);
136
+ for (let j = 0; j < caseCnt; j++) {
137
+ const caseIfBlock = caseIfBlocks[j];
138
+ caseIfBlock.addSuccessorBlock(expectedSuccessorsOfCaseIfBlock[j]);
139
+ expectedSuccessorsOfCaseIfBlock[j].addPredecessorBlock(caseIfBlock);
140
+ if (j === caseCnt - 1) { // the false branch of last case should be default or block after switch statement
141
+ caseIfBlock.addSuccessorBlock(expectedSuccessorsOfCaseIfBlock[j + 1]);
142
+ expectedSuccessorsOfCaseIfBlock[j + 1].addPredecessorBlock(caseIfBlock);
143
+ }
144
+ else {
145
+ caseIfBlock.addSuccessorBlock(caseIfBlocks[j + 1]);
146
+ caseIfBlocks[j + 1].addPredecessorBlock(caseIfBlock);
147
+ }
148
+ }
149
+ return true;
150
+ }
151
+ }
152
+ exports.SwitchBuilder = SwitchBuilder;
@@ -0,0 +1,17 @@
1
+ import { BasicBlock } from '../BasicBlock';
2
+ import { ArkIRTransformer } from '../../common/ArkIRTransformer';
3
+ import { Trap } from '../../base/Trap';
4
+ import { BlockBuilder } from './CfgBuilder';
5
+ /**
6
+ * Builder for traps from try...catch
7
+ */
8
+ export declare class TrapBuilder {
9
+ buildTraps(blockBuilderToCfgBlock: Map<BlockBuilder, BasicBlock>, blockBuildersBeforeTry: Set<BlockBuilder>, arkIRTransformer: ArkIRTransformer, basicBlockSet: Set<BasicBlock>): Trap[];
10
+ private buildTrapsIfNoFinally;
11
+ private buildTrapsIfFinallyExist;
12
+ private getAllBlocksBFS;
13
+ private copyFinallyBlocks;
14
+ private copyBlocks;
15
+ private copyStmt;
16
+ }
17
+ //# sourceMappingURL=TrapBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrapBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/TrapBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAavC,OAAO,EAAE,YAAY,EAAuB,MAAM,cAAc,CAAC;AAKjE;;GAEG;AACH,qBAAa,WAAW;IACb,UAAU,CAAC,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,sBAAsB,EAAE,GAAG,CAAC,YAAY,CAAC,EAChG,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE;IA+C7F,OAAO,CAAC,qBAAqB;IA6C7B,OAAO,CAAC,wBAAwB;IAoChC,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,QAAQ;CAgBnB"}
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.TrapBuilder = void 0;
41
+ const BasicBlock_1 = require("../BasicBlock");
42
+ const Trap_1 = require("../../base/Trap");
43
+ const Ref_1 = require("../../base/Ref");
44
+ const Type_1 = require("../../base/Type");
45
+ const Position_1 = require("../../base/Position");
46
+ const Stmt_1 = require("../../base/Stmt");
47
+ const logger_1 = __importStar(require("../../../utils/logger"));
48
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'TrapBuilder');
49
+ /**
50
+ * Builder for traps from try...catch
51
+ */
52
+ class TrapBuilder {
53
+ buildTraps(blockBuilderToCfgBlock, blockBuildersBeforeTry, arkIRTransformer, basicBlockSet) {
54
+ var _a, _b, _c;
55
+ const traps = [];
56
+ for (const blockBuilderBeforeTry of blockBuildersBeforeTry) {
57
+ if (blockBuilderBeforeTry.nexts.length === 0) {
58
+ logger.error(`can't find try block.`);
59
+ continue;
60
+ }
61
+ const blockBuilderContainTry = blockBuilderBeforeTry.nexts[0];
62
+ const stmtsCnt = blockBuilderBeforeTry.stmts.length;
63
+ const tryStmtBuilder = blockBuilderBeforeTry.stmts[stmtsCnt - 1];
64
+ const finallyBlockBuilder = (_a = tryStmtBuilder.finallyStatement) === null || _a === void 0 ? void 0 : _a.block;
65
+ if (!finallyBlockBuilder) {
66
+ logger.error(`can't find finally block or dummy finally block.`);
67
+ continue;
68
+ }
69
+ const { bfsBlocks: tryBfsBlocks, tailBlocks: tryTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, blockBuilderContainTry, finallyBlockBuilder);
70
+ let catchBfsBlocks = [];
71
+ let catchTailBlocks = [];
72
+ const catchBlockBuilder = (_b = tryStmtBuilder.catchStatement) === null || _b === void 0 ? void 0 : _b.block;
73
+ if (catchBlockBuilder) {
74
+ ({ bfsBlocks: catchBfsBlocks, tailBlocks: catchTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, catchBlockBuilder));
75
+ }
76
+ const finallyStmts = finallyBlockBuilder.stmts;
77
+ const blockBuilderAfterFinally = (_c = tryStmtBuilder.afterFinal) === null || _c === void 0 ? void 0 : _c.block;
78
+ if (!blockBuilderAfterFinally) {
79
+ logger.error(`can't find block after try...catch.`);
80
+ continue;
81
+ }
82
+ if (finallyStmts.length === 1 && finallyStmts[0].code === 'dummyFinally') { // no finally block
83
+ const trapsIfNoFinally = this.buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, blockBuilderToCfgBlock);
84
+ if (trapsIfNoFinally) {
85
+ traps.push(...trapsIfNoFinally);
86
+ }
87
+ }
88
+ else {
89
+ const trapsIfFinallyExist = this.buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock);
90
+ traps.push(...trapsIfFinallyExist);
91
+ }
92
+ }
93
+ return traps;
94
+ }
95
+ buildTrapsIfNoFinally(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, blockBuilderToCfgBlock) {
96
+ if (catchBfsBlocks.length === 0) {
97
+ logger.error(`catch block expected.`);
98
+ return null;
99
+ }
100
+ if (!blockBuilderToCfgBlock.has(blockBuilderAfterFinally)) {
101
+ logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
102
+ return null;
103
+ }
104
+ let blockAfterFinally = blockBuilderToCfgBlock.get(blockBuilderAfterFinally);
105
+ if (!blockBuilderToCfgBlock.has(finallyBlockBuilder)) {
106
+ logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
107
+ return null;
108
+ }
109
+ const finallyBlock = blockBuilderToCfgBlock.get(finallyBlockBuilder);
110
+ let dummyFinallyIdxInPredecessors = -1;
111
+ for (let i = 0; i < blockAfterFinally.getPredecessors().length; i++) {
112
+ if (blockAfterFinally.getPredecessors()[i] === finallyBlock) {
113
+ dummyFinallyIdxInPredecessors = i;
114
+ break;
115
+ }
116
+ }
117
+ if (dummyFinallyIdxInPredecessors === -1) {
118
+ return null;
119
+ }
120
+ blockAfterFinally.getPredecessors().splice(dummyFinallyIdxInPredecessors, 1);
121
+ for (const tryTailBlock of tryTailBlocks) {
122
+ tryTailBlock.setSuccessorBlock(0, blockAfterFinally);
123
+ blockAfterFinally.addPredecessorBlock(tryTailBlock);
124
+ }
125
+ basicBlockSet.delete(finallyBlock);
126
+ for (const catchTailBlock of catchTailBlocks) {
127
+ catchTailBlock.addSuccessorBlock(blockAfterFinally);
128
+ blockAfterFinally.addPredecessorBlock(catchTailBlock);
129
+ }
130
+ for (const tryTailBlock of tryTailBlocks) {
131
+ tryTailBlock.addExceptionalSuccessorBlock(catchBfsBlocks[0]);
132
+ }
133
+ return [new Trap_1.Trap(tryBfsBlocks, catchBfsBlocks)];
134
+ }
135
+ buildTrapsIfFinallyExist(tryBfsBlocks, tryTailBlocks, catchBfsBlocks, catchTailBlocks, finallyBlockBuilder, blockBuilderAfterFinally, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock) {
136
+ const { bfsBlocks: finallyBfsBlocks, tailBlocks: finallyTailBlocks } = this.getAllBlocksBFS(blockBuilderToCfgBlock, finallyBlockBuilder, blockBuilderAfterFinally);
137
+ const copyFinallyBfsBlocks = this.copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock);
138
+ const traps = [];
139
+ if (catchBfsBlocks.length !== 0) {
140
+ for (const catchTailBlock of catchTailBlocks) {
141
+ catchTailBlock.addSuccessorBlock(finallyBfsBlocks[0]);
142
+ finallyBfsBlocks[0].addPredecessorBlock(catchTailBlock);
143
+ }
144
+ // try -> catch trap
145
+ for (const tryTailBlock of tryTailBlocks) {
146
+ tryTailBlock.addExceptionalSuccessorBlock(catchBfsBlocks[0]);
147
+ }
148
+ traps.push(new Trap_1.Trap(tryBfsBlocks, catchBfsBlocks));
149
+ // catch -> finally trap
150
+ for (const catchTailBlock of catchTailBlocks) {
151
+ catchTailBlock.addExceptionalSuccessorBlock(copyFinallyBfsBlocks[0]);
152
+ }
153
+ traps.push(new Trap_1.Trap(catchBfsBlocks, copyFinallyBfsBlocks));
154
+ }
155
+ else {
156
+ // try -> finally trap
157
+ for (const tryTailBlock of tryTailBlocks) {
158
+ tryTailBlock.addExceptionalSuccessorBlock(copyFinallyBfsBlocks[0]);
159
+ }
160
+ traps.push(new Trap_1.Trap(tryBfsBlocks, copyFinallyBfsBlocks));
161
+ }
162
+ return traps;
163
+ }
164
+ getAllBlocksBFS(blockBuilderToCfgBlock, startBlockBuilder, endBlockBuilder) {
165
+ const bfsBlocks = [];
166
+ const tailBlocks = [];
167
+ const queue = [];
168
+ const visitedBlockBuilders = new Set();
169
+ queue.push(startBlockBuilder);
170
+ while (queue.length !== 0) {
171
+ const currBlockBuilder = queue.splice(0, 1)[0];
172
+ if (visitedBlockBuilders.has(currBlockBuilder)) {
173
+ continue;
174
+ }
175
+ visitedBlockBuilders.add(currBlockBuilder);
176
+ if (!blockBuilderToCfgBlock.has(currBlockBuilder)) {
177
+ logger.error(`can't find basicBlock corresponding to the blockBuilder.`);
178
+ continue;
179
+ }
180
+ const currBlock = blockBuilderToCfgBlock.get(currBlockBuilder);
181
+ bfsBlocks.push(currBlock);
182
+ const childList = currBlockBuilder.nexts;
183
+ if (childList.length === 0 || (childList.length !== 0 && (childList[0] === endBlockBuilder))) {
184
+ if (childList[0] === endBlockBuilder) {
185
+ tailBlocks.push(currBlock);
186
+ continue;
187
+ }
188
+ }
189
+ if (childList.length !== 0) {
190
+ for (const child of childList) {
191
+ queue.push(child);
192
+ }
193
+ }
194
+ }
195
+ return { bfsBlocks, tailBlocks };
196
+ }
197
+ copyFinallyBlocks(finallyBfsBlocks, finallyTailBlocks, basicBlockSet, arkIRTransformer, blockBuilderToCfgBlock) {
198
+ var _a;
199
+ const copyFinallyBfsBlocks = this.copyBlocks(finallyBfsBlocks);
200
+ const caughtExceptionRef = new Ref_1.ArkCaughtExceptionRef(Type_1.UnknownType.getInstance());
201
+ const { value: exceptionValue, stmts: exceptionAssignStmts, } = arkIRTransformer.generateAssignStmtForValue(caughtExceptionRef, [Position_1.FullPosition.DEFAULT]);
202
+ copyFinallyBfsBlocks[0].addHead(exceptionAssignStmts);
203
+ const finallyPredecessorsCnt = copyFinallyBfsBlocks[0].getPredecessors().length;
204
+ copyFinallyBfsBlocks[0].getPredecessors().splice(0, finallyPredecessorsCnt);
205
+ const throwStmt = new Stmt_1.ArkThrowStmt(exceptionValue);
206
+ let copyFinallyTailBlocks = copyFinallyBfsBlocks.splice(copyFinallyBfsBlocks.length - finallyTailBlocks.length, finallyTailBlocks.length);
207
+ copyFinallyTailBlocks.forEach((copyFinallyTailBlock) => {
208
+ const successorsCnt = copyFinallyTailBlock.getSuccessors().length;
209
+ copyFinallyTailBlock.getSuccessors().splice(0, successorsCnt);
210
+ });
211
+ if (copyFinallyTailBlocks.length > 1) {
212
+ const newCopyFinallyTailBlock = new BasicBlock_1.BasicBlock();
213
+ copyFinallyTailBlocks.forEach((copyFinallyTailBlock) => {
214
+ copyFinallyTailBlock.addSuccessorBlock(newCopyFinallyTailBlock);
215
+ newCopyFinallyTailBlock.addPredecessorBlock(copyFinallyTailBlock);
216
+ });
217
+ copyFinallyTailBlocks = [newCopyFinallyTailBlock];
218
+ }
219
+ (_a = copyFinallyTailBlocks[0]) === null || _a === void 0 ? void 0 : _a.addStmt(throwStmt);
220
+ copyFinallyBfsBlocks.push(...copyFinallyTailBlocks);
221
+ copyFinallyBfsBlocks.forEach((copyFinallyBfsBlock) => {
222
+ basicBlockSet.add(copyFinallyBfsBlock);
223
+ });
224
+ return copyFinallyBfsBlocks;
225
+ }
226
+ copyBlocks(sourceBlocks) {
227
+ const sourceToTarget = new Map();
228
+ const targetBlocks = [];
229
+ for (const sourceBlock of sourceBlocks) {
230
+ const targetBlock = new BasicBlock_1.BasicBlock();
231
+ for (const stmt of sourceBlock.getStmts()) {
232
+ targetBlock.addStmt(this.copyStmt(stmt));
233
+ }
234
+ sourceToTarget.set(sourceBlock, targetBlock);
235
+ targetBlocks.push(targetBlock);
236
+ }
237
+ for (const sourceBlock of sourceBlocks) {
238
+ const targetBlock = sourceToTarget.get(sourceBlock);
239
+ for (const predecessor of sourceBlock.getPredecessors()) {
240
+ const targetPredecessor = sourceToTarget.get(predecessor);
241
+ targetBlock.addPredecessorBlock(targetPredecessor);
242
+ }
243
+ for (const successor of sourceBlock.getSuccessors()) {
244
+ const targetSuccessor = sourceToTarget.get(successor);
245
+ targetBlock.addSuccessorBlock(targetSuccessor);
246
+ }
247
+ }
248
+ return targetBlocks;
249
+ }
250
+ copyStmt(sourceStmt) {
251
+ if (sourceStmt instanceof Stmt_1.ArkAssignStmt) {
252
+ return new Stmt_1.ArkAssignStmt(sourceStmt.getLeftOp(), sourceStmt.getRightOp());
253
+ }
254
+ else if (sourceStmt instanceof Stmt_1.ArkInvokeStmt) {
255
+ return new Stmt_1.ArkInvokeStmt(sourceStmt.getInvokeExpr());
256
+ }
257
+ else if (sourceStmt instanceof Stmt_1.ArkIfStmt) {
258
+ return new Stmt_1.ArkIfStmt(sourceStmt.getConditionExpr());
259
+ }
260
+ else if (sourceStmt instanceof Stmt_1.ArkReturnStmt) {
261
+ return new Stmt_1.ArkReturnStmt(sourceStmt.getOp());
262
+ }
263
+ else if (sourceStmt instanceof Stmt_1.ArkReturnVoidStmt) {
264
+ return new Stmt_1.ArkReturnVoidStmt();
265
+ }
266
+ else if (sourceStmt instanceof Stmt_1.ArkThrowStmt) {
267
+ return new Stmt_1.ArkThrowStmt(sourceStmt.getOp());
268
+ }
269
+ return null;
270
+ }
271
+ }
272
+ exports.TrapBuilder = TrapBuilder;
@@ -7,7 +7,7 @@ import { ViewTree } from '../graph/ViewTree';
7
7
  import { ArkBody } from './ArkBody';
8
8
  import { ArkClass } from './ArkClass';
9
9
  import { MethodSignature } from './ArkSignature';
10
- import { BodyBuilder } from '../common/BodyBuilder';
10
+ import { BodyBuilder } from './builder/BodyBuilder';
11
11
  import { ArkExport, ExportType } from './ArkExport';
12
12
  import { LineCol } from '../base/Position';
13
13
  import { ArkBaseModel } from './ArkBaseModel';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
6
6
  * You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  import { ClassType, Type } from '../base/Type';
2
2
  import { MethodParameter } from './builder/ArkMethodBuilder';
3
- export type Signature = FileSignature | NamespaceSignature | ClassSignature | MethodSignature | FieldSignature | LocalSignature;
3
+ export type Signature = FileSignature | NamespaceSignature | ClassSignature | MethodSignature | FieldSignature | LocalSignature | AliasTypeSignature;
4
4
  export interface ArkSignature {
5
5
  getSignature(): Signature;
6
6
  }
@@ -146,6 +146,14 @@ export declare class LocalSignature {
146
146
  getDeclaringMethodSignature(): MethodSignature;
147
147
  toString(): string;
148
148
  }
149
+ export declare class AliasTypeSignature {
150
+ private name;
151
+ private declaringMethodSignature;
152
+ constructor(name: string, declaringMethodSignature: MethodSignature);
153
+ getName(): string;
154
+ getDeclaringMethodSignature(): MethodSignature;
155
+ toString(): string;
156
+ }
149
157
  export declare function fieldSignatureCompare(leftSig: FieldSignature, rightSig: FieldSignature): boolean;
150
158
  export declare function methodSignatureCompare(leftSig: MethodSignature, rightSig: MethodSignature): boolean;
151
159
  export declare function methodSubSignatureCompare(leftSig: MethodSubSignature, rightSig: MethodSubSignature): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ArkSignature.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkSignature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArkSignature.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkSignature.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.genSignature4ImportClause = exports.fileSignatureCompare = exports.classSignatureCompare = exports.methodSubSignatureCompare = exports.methodSignatureCompare = exports.fieldSignatureCompare = exports.LocalSignature = exports.MethodSignature = exports.MethodSubSignature = exports.FieldSignature = exports.AliasClassSignature = exports.ClassSignature = exports.NamespaceSignature = exports.FileSignature = void 0;
20
+ exports.genSignature4ImportClause = exports.fileSignatureCompare = exports.classSignatureCompare = exports.methodSubSignatureCompare = exports.methodSignatureCompare = exports.fieldSignatureCompare = exports.AliasTypeSignature = exports.LocalSignature = exports.MethodSignature = exports.MethodSubSignature = exports.FieldSignature = exports.AliasClassSignature = exports.ClassSignature = exports.NamespaceSignature = exports.FileSignature = void 0;
21
21
  const path_1 = __importDefault(require("path"));
22
22
  const pathTransfer_1 = require("../../utils/pathTransfer");
23
23
  const Type_1 = require("../base/Type");
@@ -307,6 +307,22 @@ class LocalSignature {
307
307
  }
308
308
  }
309
309
  exports.LocalSignature = LocalSignature;
310
+ class AliasTypeSignature {
311
+ constructor(name, declaringMethodSignature) {
312
+ this.name = name;
313
+ this.declaringMethodSignature = declaringMethodSignature;
314
+ }
315
+ getName() {
316
+ return this.name;
317
+ }
318
+ getDeclaringMethodSignature() {
319
+ return this.declaringMethodSignature;
320
+ }
321
+ toString() {
322
+ return this.declaringMethodSignature.toString() + '#' + this.name;
323
+ }
324
+ }
325
+ exports.AliasTypeSignature = AliasTypeSignature;
310
326
  //TODO, reconstruct
311
327
  function fieldSignatureCompare(leftSig, rightSig) {
312
328
  if (leftSig.getDeclaringSignature().toString() === rightSig.getDeclaringSignature().toString() &&
@@ -1 +1 @@
1
- {"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AA8BtD,MAAM,MAAM,aAAa,GACrB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,uBAAuB,CAAC;AAU/B,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,QAG/G;AAED,wBAAgB,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAClD,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,QAI3G;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,EAC3B,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,QAOxF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EACvD,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QAYpG;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EACjE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QAazG;AAgBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QA2BhI"}
1
+ {"version":3,"file":"ArkClassBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkClassBuilder.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AA8BtD,MAAM,MAAM,aAAa,GACrB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,uBAAuB,CAAC;AAU/B,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,QAI/G;AAED,wBAAgB,oCAAoC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAClD,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,QAI3G;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,EAC3B,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,QAOxF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EACvD,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QAYpG;AAED,wBAAgB,mCAAmC,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EACjE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QAazG;AAgBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,SAAS,QA2BhI"}
@@ -57,11 +57,12 @@ const ArkSignature_1 = require("../ArkSignature");
57
57
  const ArkSignatureBuilder_1 = require("./ArkSignatureBuilder");
58
58
  const Position_1 = require("../../base/Position");
59
59
  const Type_1 = require("../../base/Type");
60
- const BodyBuilder_1 = require("../../common/BodyBuilder");
60
+ const BodyBuilder_1 = require("./BodyBuilder");
61
61
  const Expr_1 = require("../../base/Expr");
62
62
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkClassBuilder');
63
63
  function buildDefaultArkClassFromArkFile(arkFile, defaultClass, astRoot) {
64
64
  defaultClass.setDeclaringArkFile(arkFile);
65
+ defaultClass.setCategory(ArkClass_1.ClassCategory.CLASS);
65
66
  buildDefaultArkClass(defaultClass, astRoot);
66
67
  }
67
68
  exports.buildDefaultArkClassFromArkFile = buildDefaultArkClassFromArkFile;
@@ -42,7 +42,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
42
42
  Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.checkAndUpdateMethod = exports.isMethodImplementation = exports.addInitInConstructor = exports.buildInitMethod = exports.buildDefaultConstructor = exports.MethodParameter = exports.ArrayBindingPatternParameter = exports.ObjectBindingPatternParameter = exports.buildArkMethodFromArkClass = exports.buildDefaultArkMethodFromArkClass = void 0;
44
44
  const Type_1 = require("../../base/Type");
45
- const BodyBuilder_1 = require("../../common/BodyBuilder");
45
+ const BodyBuilder_1 = require("./BodyBuilder");
46
46
  const ViewTreeBuilder_1 = require("../../graph/builder/ViewTreeBuilder");
47
47
  const ArkClass_1 = require("../ArkClass");
48
48
  const ArkMethod_1 = require("../ArkMethod");
@@ -1,9 +1,9 @@
1
- import { ArkBody } from '../model/ArkBody';
2
- import { ArkMethod } from '../model/ArkMethod';
3
- import { MethodSignature } from '../model/ArkSignature';
4
- import { CfgBuilder } from './CfgBuilder';
1
+ import { ArkBody } from '../ArkBody';
2
+ import { ArkMethod } from '../ArkMethod';
3
+ import { MethodSignature } from '../ArkSignature';
4
+ import { CfgBuilder } from '../../graph/builder/CfgBuilder';
5
5
  import * as ts from 'ohos-typescript';
6
- import { GlobalRef } from '../base/Ref';
6
+ import { GlobalRef } from '../../base/Ref';
7
7
  export declare class BodyBuilder {
8
8
  private cfgBuilder;
9
9
  private globals?;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BodyBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/BodyBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAkB,eAAe,EAAsB,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAuD,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAchG,qBAAa,WAAW;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAyB;gBAE7B,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU;IAIpH,KAAK,IAAI,OAAO,GAAG,IAAI;IAcvB,aAAa,IAAI,UAAU;IAI3B,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,SAAS;IAIhD,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI;IAIjD,sBAAsB,IAAI,IAAI;IAsDrC,OAAO,CAAC,6BAA6B;IASrC,OAAO,CAAC,sCAAsC;IA4B9C,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,8BAA8B;IAkBtC,OAAO,CAAC,6BAA6B;IA2BrC,OAAO,CAAC,2BAA2B;IAUnC,OAAO,CAAC,4BAA4B;IAoBpC,OAAO,CAAC,2BAA2B;IAwBnC,OAAO,CAAC,oCAAoC;IA2B5C,OAAO,CAAC,8BAA8B;IAgBtC,OAAO,CAAC,qCAAqC;IA8B7C,OAAO,CAAC,2BAA2B;CAyCtC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
6
6
  * You may obtain a copy of the License at
@@ -15,16 +15,16 @@
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.BodyBuilder = void 0;
18
- const ArkBody_1 = require("../model/ArkBody");
19
- const ArkSignature_1 = require("../model/ArkSignature");
20
- const CfgBuilder_1 = require("./CfgBuilder");
21
- const Local_1 = require("../base/Local");
22
- const ArkMethodBuilder_1 = require("../model/builder/ArkMethodBuilder");
23
- const Const_1 = require("./Const");
24
- const Ref_1 = require("../base/Ref");
25
- const Stmt_1 = require("../base/Stmt");
26
- const Type_1 = require("../base/Type");
27
- const Expr_1 = require("../base/Expr");
18
+ const ArkBody_1 = require("../ArkBody");
19
+ const ArkSignature_1 = require("../ArkSignature");
20
+ const CfgBuilder_1 = require("../../graph/builder/CfgBuilder");
21
+ const Local_1 = require("../../base/Local");
22
+ const ArkMethodBuilder_1 = require("./ArkMethodBuilder");
23
+ const Const_1 = require("../../common/Const");
24
+ const Ref_1 = require("../../base/Ref");
25
+ const Stmt_1 = require("../../base/Stmt");
26
+ const Type_1 = require("../../base/Type");
27
+ const Expr_1 = require("../../base/Expr");
28
28
  class BodyBuilder {
29
29
  constructor(methodSignature, sourceAstNode, declaringMethod, sourceFile) {
30
30
  this.cfgBuilder = new CfgBuilder_1.CfgBuilder(sourceAstNode, methodSignature.getMethodSubSignature().getMethodName(), declaringMethod, sourceFile);
@@ -32,7 +32,7 @@ class BodyBuilder {
32
32
  build() {
33
33
  this.cfgBuilder.buildCfgBuilder();
34
34
  if (!this.cfgBuilder.isBodyEmpty()) {
35
- const { cfg, locals, globals, aliasTypeMap, traps } = this.cfgBuilder.buildCfgAndOriginalCfg();
35
+ const { cfg, locals, globals, aliasTypeMap, traps } = this.cfgBuilder.buildCfg();
36
36
  if (globals !== null) {
37
37
  this.setGlobals(globals);
38
38
  }