arkanalyzer 1.0.7 → 1.0.8

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 (170) hide show
  1. package/config/arkanalyzer.json +8 -0
  2. package/docs/IR2ts-stmt.md +81 -0
  3. package/docs/IR2ts.md +82 -0
  4. package/lib/Config.d.ts +9 -1
  5. package/lib/Config.d.ts.map +1 -1
  6. package/lib/Config.js +24 -11
  7. package/lib/Scene.d.ts +49 -42
  8. package/lib/Scene.d.ts.map +1 -1
  9. package/lib/Scene.js +124 -93
  10. package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
  11. package/lib/callgraph/common/Statistics.js +1 -1
  12. package/lib/callgraph/model/CallGraph.d.ts +3 -2
  13. package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
  14. package/lib/callgraph/model/CallGraph.js +16 -6
  15. package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
  16. package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
  17. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  18. package/lib/callgraph/pointerAnalysis/Pag.js +93 -12
  19. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
  20. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  21. package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
  22. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
  23. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  24. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
  25. package/lib/core/base/Constant.d.ts +25 -5
  26. package/lib/core/base/Constant.d.ts.map +1 -1
  27. package/lib/core/base/Constant.js +46 -8
  28. package/lib/core/base/Expr.d.ts +45 -40
  29. package/lib/core/base/Expr.d.ts.map +1 -1
  30. package/lib/core/base/Expr.js +239 -153
  31. package/lib/core/base/Local.d.ts +2 -2
  32. package/lib/core/base/Local.d.ts.map +1 -1
  33. package/lib/core/base/Local.js +2 -2
  34. package/lib/core/base/Ref.d.ts +38 -37
  35. package/lib/core/base/Ref.d.ts.map +1 -1
  36. package/lib/core/base/Ref.js +102 -70
  37. package/lib/core/base/Stmt.d.ts +4 -0
  38. package/lib/core/base/Stmt.d.ts.map +1 -1
  39. package/lib/core/base/Stmt.js +12 -1
  40. package/lib/core/base/Type.d.ts +4 -0
  41. package/lib/core/base/Type.d.ts.map +1 -1
  42. package/lib/core/base/Type.js +41 -17
  43. package/lib/core/common/ArkError.d.ts +15 -0
  44. package/lib/core/common/ArkError.d.ts.map +1 -0
  45. package/lib/core/common/ArkError.js +28 -0
  46. package/lib/core/common/ArkIRTransformer.d.ts +7 -3
  47. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  48. package/lib/core/common/ArkIRTransformer.js +46 -20
  49. package/lib/core/common/Builtin.js +1 -1
  50. package/lib/core/common/CfgBuilder.d.ts +12 -0
  51. package/lib/core/common/CfgBuilder.d.ts.map +1 -1
  52. package/lib/core/common/CfgBuilder.js +289 -61
  53. package/lib/core/common/Const.d.ts +15 -10
  54. package/lib/core/common/Const.d.ts.map +1 -1
  55. package/lib/core/common/Const.js +18 -11
  56. package/lib/core/common/DummyMainCreater.d.ts +2 -1
  57. package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
  58. package/lib/core/common/DummyMainCreater.js +28 -15
  59. package/lib/core/common/EtsConst.d.ts +1 -0
  60. package/lib/core/common/EtsConst.d.ts.map +1 -1
  61. package/lib/core/common/EtsConst.js +2 -1
  62. package/lib/core/common/IRUtils.d.ts +7 -0
  63. package/lib/core/common/IRUtils.d.ts.map +1 -1
  64. package/lib/core/common/IRUtils.js +34 -2
  65. package/lib/core/common/ModelUtils.d.ts +1 -0
  66. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  67. package/lib/core/common/ModelUtils.js +32 -32
  68. package/lib/core/common/TSConst.d.ts +10 -3
  69. package/lib/core/common/TSConst.d.ts.map +1 -1
  70. package/lib/core/common/TSConst.js +11 -4
  71. package/lib/core/common/TypeInference.d.ts +8 -2
  72. package/lib/core/common/TypeInference.d.ts.map +1 -1
  73. package/lib/core/common/TypeInference.js +218 -87
  74. package/lib/core/common/ValueUtil.d.ts +0 -4
  75. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  76. package/lib/core/common/ValueUtil.js +8 -25
  77. package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
  78. package/lib/core/dataflow/DataflowSolver.js +2 -4
  79. package/lib/core/dataflow/TiantAnalysis.js +2 -1
  80. package/lib/core/dataflow/Util.d.ts +1 -1
  81. package/lib/core/dataflow/Util.d.ts.map +1 -1
  82. package/lib/core/dataflow/Util.js +8 -7
  83. package/lib/core/graph/BasicBlock.d.ts +41 -0
  84. package/lib/core/graph/BasicBlock.d.ts.map +1 -1
  85. package/lib/core/graph/BasicBlock.js +132 -1
  86. package/lib/core/graph/Cfg.d.ts +30 -1
  87. package/lib/core/graph/Cfg.d.ts.map +1 -1
  88. package/lib/core/graph/Cfg.js +129 -6
  89. package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
  90. package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
  91. package/lib/core/model/ArkBaseModel.d.ts +8 -0
  92. package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
  93. package/lib/core/model/ArkBaseModel.js +56 -4
  94. package/lib/core/model/ArkClass.d.ts +36 -30
  95. package/lib/core/model/ArkClass.d.ts.map +1 -1
  96. package/lib/core/model/ArkClass.js +79 -40
  97. package/lib/core/model/ArkExport.d.ts +3 -0
  98. package/lib/core/model/ArkExport.d.ts.map +1 -1
  99. package/lib/core/model/ArkExport.js +11 -1
  100. package/lib/core/model/ArkField.d.ts +2 -0
  101. package/lib/core/model/ArkField.d.ts.map +1 -1
  102. package/lib/core/model/ArkField.js +4 -1
  103. package/lib/core/model/ArkFile.d.ts +4 -0
  104. package/lib/core/model/ArkFile.d.ts.map +1 -1
  105. package/lib/core/model/ArkFile.js +20 -0
  106. package/lib/core/model/ArkImport.d.ts +2 -0
  107. package/lib/core/model/ArkImport.d.ts.map +1 -1
  108. package/lib/core/model/ArkImport.js +3 -0
  109. package/lib/core/model/ArkMetadata.d.ts +20 -0
  110. package/lib/core/model/ArkMetadata.d.ts.map +1 -0
  111. package/lib/core/model/ArkMetadata.js +44 -0
  112. package/lib/core/model/ArkMethod.d.ts +156 -53
  113. package/lib/core/model/ArkMethod.d.ts.map +1 -1
  114. package/lib/core/model/ArkMethod.js +309 -54
  115. package/lib/core/model/ArkNamespace.d.ts +4 -0
  116. package/lib/core/model/ArkNamespace.d.ts.map +1 -1
  117. package/lib/core/model/ArkNamespace.js +13 -0
  118. package/lib/core/model/ArkSignature.d.ts +11 -5
  119. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  120. package/lib/core/model/ArkSignature.js +38 -18
  121. package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
  122. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  123. package/lib/core/model/builder/ArkClassBuilder.js +9 -34
  124. package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
  125. package/lib/core/model/builder/ArkExportBuilder.js +6 -1
  126. package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  127. package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
  128. package/lib/core/model/builder/ArkFileBuilder.js +1 -1
  129. package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
  130. package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
  131. package/lib/core/model/builder/ArkImportBuilder.js +12 -5
  132. package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
  133. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  134. package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
  135. package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  136. package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
  137. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  138. package/lib/core/model/builder/builderUtils.js +25 -2
  139. package/lib/save/source/SourceClass.d.ts.map +1 -1
  140. package/lib/save/source/SourceClass.js +4 -0
  141. package/lib/save/source/SourceField.d.ts.map +1 -1
  142. package/lib/save/source/SourceField.js +4 -0
  143. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  144. package/lib/save/source/SourceMethod.js +7 -0
  145. package/lib/save/source/SourceModule.d.ts.map +1 -1
  146. package/lib/save/source/SourceModule.js +14 -9
  147. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  148. package/lib/save/source/SourceNamespace.js +4 -0
  149. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  150. package/lib/save/source/SourceStmt.js +15 -3
  151. package/lib/save/source/SourceTransformer.d.ts +6 -0
  152. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  153. package/lib/save/source/SourceTransformer.js +72 -41
  154. package/lib/save/source/SourceUtils.d.ts.map +1 -1
  155. package/lib/save/source/SourceUtils.js +3 -2
  156. package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
  157. package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
  158. package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
  159. package/lib/utils/CfgStructualAnalysis.js +42 -8
  160. package/lib/utils/callGraphUtils.d.ts.map +1 -1
  161. package/lib/utils/callGraphUtils.js +7 -10
  162. package/lib/utils/crypto_utils.d.ts +6 -0
  163. package/lib/utils/crypto_utils.d.ts.map +1 -0
  164. package/lib/utils/crypto_utils.js +57 -0
  165. package/lib/utils/entryMethodUtils.js +23 -23
  166. package/lib/utils/getAllFiles.d.ts +1 -1
  167. package/lib/utils/getAllFiles.d.ts.map +1 -1
  168. package/lib/utils/getAllFiles.js +4 -5
  169. package/lib/utils/logger.js +2 -2
  170. package/package.json +3 -2
@@ -1,4 +1,5 @@
1
1
  import { Stmt } from '../base/Stmt';
2
+ import { ArkError } from '../common/ArkError';
2
3
  /**
3
4
  * @category core/graph
4
5
  * A `BasicBlock` is composed of:
@@ -21,6 +22,44 @@ export declare class BasicBlock {
21
22
  */
22
23
  getStmts(): Stmt[];
23
24
  addStmt(stmt: Stmt): void;
25
+ /**
26
+ * Adds the given stmt at the beginning of the basic block.
27
+ * @param stmt
28
+ */
29
+ addHead(stmt: Stmt | Stmt[]): void;
30
+ /**
31
+ * Adds the given stmt at the end of the basic block.
32
+ * @param stmt
33
+ */
34
+ addTail(stmt: Stmt | Stmt[]): void;
35
+ /**
36
+ * Inserts toInsert in the basic block after point.
37
+ * @param toInsert
38
+ * @param point
39
+ * @returns The number of successfully inserted statements
40
+ */
41
+ insertAfter(toInsert: Stmt | Stmt[], point: Stmt): number;
42
+ /**
43
+ * Inserts toInsert in the basic block befor point.
44
+ * @param toInsert
45
+ * @param point
46
+ * @returns The number of successfully inserted statements
47
+ */
48
+ insertBefore(toInsert: Stmt | Stmt[], point: Stmt): number;
49
+ /**
50
+ * Removes the given stmt from this basic block.
51
+ * @param stmt
52
+ * @returns
53
+ */
54
+ remove(stmt: Stmt): void;
55
+ /**
56
+ * Removes the first stmt from this basic block.
57
+ */
58
+ removeHead(): void;
59
+ /**
60
+ * Removes the last stmt from this basic block.
61
+ */
62
+ removeTail(): void;
24
63
  getHead(): Stmt | null;
25
64
  getTail(): Stmt | null;
26
65
  /**
@@ -53,5 +92,7 @@ export declare class BasicBlock {
53
92
  addStmtToFirst(stmt: Stmt): void;
54
93
  addSuccessorBlock(block: BasicBlock): void;
55
94
  toString(): string;
95
+ validate(): ArkError;
96
+ private insertPos;
56
97
  }
57
98
  //# sourceMappingURL=BasicBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BasicBlock.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BasicBlock.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC;;;;;;;GAOG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAoB;;IAKpC,KAAK,IAAI,MAAM;IAIf,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B;;;OAGG;IACI,QAAQ,IAAI,IAAI,EAAE;IAIlB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,OAAO,IAAI,IAAI,GAAG,IAAI;IAOtB,OAAO,IAAI,IAAI,GAAG,IAAI;IAQ7B;;;;;;;;;;;;;;;;;OAiBG;IACI,aAAa,IAAI,UAAU,EAAE;IAIpC;;;OAGG;IACI,eAAe,IAAI,UAAU,EAAE;IAI/B,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI5C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAQ5D,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAS1D,cAAc,CAAC,IAAI,EAAE,IAAI;IAKzB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI1C,QAAQ,IAAI,MAAM;CAO5B"}
1
+ {"version":3,"file":"BasicBlock.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BasicBlock.ts"],"names":[],"mappings":"AAeA,OAAO,EAA8D,IAAI,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAI5D;;;;;;;GAOG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAoB;;IAIpC,KAAK,IAAI,MAAM;IAIf,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B;;;OAGG;IACI,QAAQ,IAAI,IAAI,EAAE;IAIlB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIhC;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAQzC;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAQzC;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM;IAQhE;;;;;OAKG;IACI,YAAY,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM;IAQjE;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQ/B;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACI,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI,GAAG,IAAI;IAOtB,OAAO,IAAI,IAAI,GAAG,IAAI;IAQ7B;;;;;;;;;;;;;;;;;OAiBG;IACI,aAAa,IAAI,UAAU,EAAE;IAIpC;;;OAGG;IACI,eAAe,IAAI,UAAU,EAAE;IAI/B,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI5C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAQ5D,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO;IAS1D,cAAc,CAAC,IAAI,EAAE,IAAI;IAKzB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI1C,QAAQ,IAAI,MAAM;IAQlB,QAAQ,IAAI,QAAQ;IA4B3B,OAAO,CAAC,SAAS;CAQpB"}
@@ -13,8 +13,35 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
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
+ };
16
39
  Object.defineProperty(exports, "__esModule", { value: true });
17
40
  exports.BasicBlock = void 0;
41
+ const Stmt_1 = require("../base/Stmt");
42
+ const ArkError_1 = require("../common/ArkError");
43
+ const logger_1 = __importStar(require("../../utils/logger"));
44
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'BasicBlock');
18
45
  /**
19
46
  * @category core/graph
20
47
  * A `BasicBlock` is composed of:
@@ -46,6 +73,80 @@ class BasicBlock {
46
73
  addStmt(stmt) {
47
74
  this.stmts.push(stmt);
48
75
  }
76
+ /**
77
+ * Adds the given stmt at the beginning of the basic block.
78
+ * @param stmt
79
+ */
80
+ addHead(stmt) {
81
+ if (stmt instanceof Stmt_1.Stmt) {
82
+ this.stmts.unshift(stmt);
83
+ }
84
+ else {
85
+ this.stmts.unshift(...stmt);
86
+ }
87
+ }
88
+ /**
89
+ * Adds the given stmt at the end of the basic block.
90
+ * @param stmt
91
+ */
92
+ addTail(stmt) {
93
+ if (stmt instanceof Stmt_1.Stmt) {
94
+ this.stmts.push(stmt);
95
+ }
96
+ else {
97
+ this.stmts.push(...stmt);
98
+ }
99
+ }
100
+ /**
101
+ * Inserts toInsert in the basic block after point.
102
+ * @param toInsert
103
+ * @param point
104
+ * @returns The number of successfully inserted statements
105
+ */
106
+ insertAfter(toInsert, point) {
107
+ let index = this.stmts.indexOf(point);
108
+ if (index < 0) {
109
+ return 0;
110
+ }
111
+ return this.insertPos(index + 1, toInsert);
112
+ }
113
+ /**
114
+ * Inserts toInsert in the basic block befor point.
115
+ * @param toInsert
116
+ * @param point
117
+ * @returns The number of successfully inserted statements
118
+ */
119
+ insertBefore(toInsert, point) {
120
+ let index = this.stmts.indexOf(point);
121
+ if (index < 0) {
122
+ return 0;
123
+ }
124
+ return this.insertPos(index, toInsert);
125
+ }
126
+ /**
127
+ * Removes the given stmt from this basic block.
128
+ * @param stmt
129
+ * @returns
130
+ */
131
+ remove(stmt) {
132
+ let index = this.stmts.indexOf(stmt);
133
+ if (index < 0) {
134
+ return;
135
+ }
136
+ this.stmts.splice(index, 1);
137
+ }
138
+ /**
139
+ * Removes the first stmt from this basic block.
140
+ */
141
+ removeHead() {
142
+ this.stmts.splice(0, 1);
143
+ }
144
+ /**
145
+ * Removes the last stmt from this basic block.
146
+ */
147
+ removeTail() {
148
+ this.stmts.splice(this.stmts.length - 1, 1);
149
+ }
49
150
  getHead() {
50
151
  if (this.stmts.length === 0) {
51
152
  return null;
@@ -106,7 +207,7 @@ class BasicBlock {
106
207
  }
107
208
  // Temp just for SSA
108
209
  addStmtToFirst(stmt) {
109
- this.stmts.splice(0, 0, stmt);
210
+ this.addHead(stmt);
110
211
  }
111
212
  // Temp just for SSA
112
213
  addSuccessorBlock(block) {
@@ -119,5 +220,35 @@ class BasicBlock {
119
220
  }
120
221
  return strs.join('');
121
222
  }
223
+ validate() {
224
+ let branchStmts = [];
225
+ for (const stmt of this.stmts) {
226
+ if (stmt instanceof Stmt_1.ArkIfStmt ||
227
+ stmt instanceof Stmt_1.ArkReturnStmt ||
228
+ stmt instanceof Stmt_1.ArkReturnVoidStmt ||
229
+ stmt instanceof Stmt_1.ArkSwitchStmt) {
230
+ branchStmts.push(stmt);
231
+ }
232
+ }
233
+ if (branchStmts.length > 1) {
234
+ let errMsg = `More than one branch or return stmts in the block: ${branchStmts.map((value) => value.toString()).join('\n')}`;
235
+ logger.error(errMsg);
236
+ return { errCode: ArkError_1.ArkErrorCode.BB_MORE_THAN_ONE_BRANCH_RET_STMT, errMsg: errMsg };
237
+ }
238
+ if (branchStmts.length === 1 && branchStmts[0] !== this.stmts[this.stmts.length - 1]) {
239
+ let errMsg = `${branchStmts[0].toString()} not at the end of block.`;
240
+ logger.error(errMsg);
241
+ return { errCode: ArkError_1.ArkErrorCode.BB_BRANCH_RET_STMT_NOT_AT_END, errMsg: errMsg };
242
+ }
243
+ return { errCode: ArkError_1.ArkErrorCode.OK };
244
+ }
245
+ insertPos(index, toInsert) {
246
+ if (toInsert instanceof Stmt_1.Stmt) {
247
+ this.stmts.splice(index, 0, toInsert);
248
+ return 1;
249
+ }
250
+ this.stmts.splice(index, 0, ...toInsert);
251
+ return toInsert.length;
252
+ }
122
253
  }
123
254
  exports.BasicBlock = BasicBlock;
@@ -1,5 +1,6 @@
1
1
  import { DefUseChain } from '../base/DefUseChain';
2
2
  import { Stmt } from '../base/Stmt';
3
+ import { ArkError } from '../common/ArkError';
3
4
  import { ArkMethod } from '../model/ArkMethod';
4
5
  import { BasicBlock } from './BasicBlock';
5
6
  /**
@@ -13,7 +14,32 @@ export declare class Cfg {
13
14
  private declaringMethod;
14
15
  constructor();
15
16
  getStmts(): Stmt[];
16
- insertBefore(beforeStmt: Stmt, newStmt: Stmt): void;
17
+ /**
18
+ * Inserts toInsert in the basic block in CFG after point.
19
+ * @param toInsert
20
+ * @param point
21
+ * @returns The number of successfully inserted statements
22
+ */
23
+ insertAfter(toInsert: Stmt | Stmt[], point: Stmt): number;
24
+ /**
25
+ * Inserts toInsert in the basic block in CFG befor point.
26
+ * @param toInsert
27
+ * @param point
28
+ * @returns The number of successfully inserted statements
29
+ */
30
+ insertBefore(toInsert: Stmt | Stmt[], point: Stmt): number;
31
+ /**
32
+ * Removes the given stmt from the basic block in CFG.
33
+ * @param stmt
34
+ * @returns
35
+ */
36
+ remove(stmt: Stmt): void;
37
+ /**
38
+ * Update stmtToBlock Map
39
+ * @param block
40
+ * @param changed
41
+ */
42
+ updateStmt2BlockMap(block: BasicBlock, changed?: Stmt | Stmt[]): void;
17
43
  addBlock(block: BasicBlock): void;
18
44
  getBlocks(): Set<BasicBlock>;
19
45
  getStartingBlock(): BasicBlock | undefined;
@@ -25,5 +51,8 @@ export declare class Cfg {
25
51
  toString(): string;
26
52
  buildDefUseStmt(): void;
27
53
  buildDefUseChain(): void;
54
+ getUnreachableBlocks(): Set<BasicBlock>;
55
+ validate(): ArkError;
56
+ private dfsPostOrder;
28
57
  }
29
58
  //# sourceMappingURL=Cfg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cfg.d.ts","sourceRoot":"","sources":["../../../src/core/graph/Cfg.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,qBAAa,GAAG;IACZ,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAA8B;;IAM9C,QAAQ,IAAI,IAAI,EAAE;IASlB,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,IAAI;IAQnD,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASjC,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC;IAK5B,gBAAgB,IAAI,UAAU,GAAG,SAAS;IAI1C,eAAe,IAAI,IAAI;IAIvB,eAAe,CAAC,eAAe,EAAE,IAAI,GAAG,IAAI;IAI5C,kBAAkB,IAAI,SAAS;IAI/B,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAIpC,eAAe,IAAI,WAAW,EAAE;IAKhC,QAAQ,IAAI,MAAM;IAIlB,eAAe;IAiBf,gBAAgB;CAyD1B"}
1
+ {"version":3,"file":"Cfg.d.ts","sourceRoot":"","sources":["../../../src/core/graph/Cfg.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;GAEG;AACH,qBAAa,GAAG;IACZ,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAA8B;;IAI9C,QAAQ,IAAI,IAAI,EAAE;IAQzB;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM;IAUhE;;;;;OAKG;IACI,YAAY,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM;IAUjE;;;;OAIG;IACI,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAS/B;;;;OAIG;IACI,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAerE,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQjC,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC;IAI5B,gBAAgB,IAAI,UAAU,GAAG,SAAS;IAI1C,eAAe,IAAI,IAAI;IAIvB,eAAe,CAAC,eAAe,EAAE,IAAI,GAAG,IAAI;IAI5C,kBAAkB,IAAI,SAAS;IAI/B,kBAAkB,CAAC,MAAM,EAAE,SAAS;IAIpC,eAAe,IAAI,WAAW,EAAE;IAKhC,QAAQ,IAAI,MAAM;IAIlB,eAAe;IAiBf,gBAAgB;IA0DhB,oBAAoB,IAAI,GAAG,CAAC,UAAU,CAAC;IAevC,QAAQ,IAAI,QAAQ;IAoB3B,OAAO,CAAC,YAAY;CAevB"}
@@ -13,11 +13,38 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
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
+ };
16
39
  Object.defineProperty(exports, "__esModule", { value: true });
17
40
  exports.Cfg = void 0;
18
41
  const DefUseChain_1 = require("../base/DefUseChain");
19
42
  const Local_1 = require("../base/Local");
43
+ const Stmt_1 = require("../base/Stmt");
44
+ const ArkError_1 = require("../common/ArkError");
20
45
  const ArkMethod_1 = require("../model/ArkMethod");
46
+ const logger_1 = __importStar(require("../../utils/logger"));
47
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'BasicBlock');
21
48
  /**
22
49
  * @category core/graph
23
50
  */
@@ -35,12 +62,66 @@ class Cfg {
35
62
  }
36
63
  return stmts;
37
64
  }
38
- // TODO
39
- insertBefore(beforeStmt, newStmt) {
40
- const block = this.stmtToBlock.get(beforeStmt);
41
- // Simplify edition just for SSA
42
- block.addStmtToFirst(newStmt);
43
- this.stmtToBlock.set(newStmt, block);
65
+ /**
66
+ * Inserts toInsert in the basic block in CFG after point.
67
+ * @param toInsert
68
+ * @param point
69
+ * @returns The number of successfully inserted statements
70
+ */
71
+ insertAfter(toInsert, point) {
72
+ const block = this.stmtToBlock.get(point);
73
+ if (!block) {
74
+ return 0;
75
+ }
76
+ this.updateStmt2BlockMap(block, toInsert);
77
+ return block.insertAfter(toInsert, point);
78
+ }
79
+ /**
80
+ * Inserts toInsert in the basic block in CFG befor point.
81
+ * @param toInsert
82
+ * @param point
83
+ * @returns The number of successfully inserted statements
84
+ */
85
+ insertBefore(toInsert, point) {
86
+ const block = this.stmtToBlock.get(point);
87
+ if (!block) {
88
+ return 0;
89
+ }
90
+ this.updateStmt2BlockMap(block, toInsert);
91
+ return block.insertBefore(toInsert, point);
92
+ }
93
+ /**
94
+ * Removes the given stmt from the basic block in CFG.
95
+ * @param stmt
96
+ * @returns
97
+ */
98
+ remove(stmt) {
99
+ const block = this.stmtToBlock.get(stmt);
100
+ if (!block) {
101
+ return;
102
+ }
103
+ this.stmtToBlock.delete(stmt);
104
+ block.remove(stmt);
105
+ }
106
+ /**
107
+ * Update stmtToBlock Map
108
+ * @param block
109
+ * @param changed
110
+ */
111
+ updateStmt2BlockMap(block, changed) {
112
+ if (!changed) {
113
+ for (const stmt of block.getStmts()) {
114
+ this.stmtToBlock.set(stmt, block);
115
+ }
116
+ }
117
+ else if (changed instanceof Stmt_1.Stmt) {
118
+ this.stmtToBlock.set(changed, block);
119
+ }
120
+ else {
121
+ for (const insert of changed) {
122
+ this.stmtToBlock.set(insert, block);
123
+ }
124
+ }
44
125
  }
45
126
  // TODO: 添加block之间的边
46
127
  addBlock(block) {
@@ -147,5 +228,47 @@ class Cfg {
147
228
  }
148
229
  }
149
230
  }
231
+ getUnreachableBlocks() {
232
+ let unreachable = new Set();
233
+ let startBB = this.getStartingBlock();
234
+ if (!startBB) {
235
+ return unreachable;
236
+ }
237
+ let postOrder = this.dfsPostOrder(startBB);
238
+ for (const bb of this.blocks) {
239
+ if (!postOrder.has(bb)) {
240
+ unreachable.add(bb);
241
+ }
242
+ }
243
+ return unreachable;
244
+ }
245
+ validate() {
246
+ let startBB = this.getStartingBlock();
247
+ if (!startBB) {
248
+ let errMsg = `Not found starting block}`;
249
+ logger.error(errMsg);
250
+ return { errCode: ArkError_1.ArkErrorCode.CFG_NOT_FOUND_START_BLOCK, errMsg: errMsg };
251
+ }
252
+ let unreachable = this.getUnreachableBlocks();
253
+ if (unreachable.size !== 0) {
254
+ let errMsg = `Unreachable blocks: ${Array.from(unreachable)
255
+ .map((value) => value.toString())
256
+ .join('\n')}`;
257
+ logger.error(errMsg);
258
+ return { errCode: ArkError_1.ArkErrorCode.CFG_HAS_UNREACHABLE_BLOCK, errMsg: errMsg };
259
+ }
260
+ return { errCode: ArkError_1.ArkErrorCode.OK };
261
+ }
262
+ dfsPostOrder(node, visitor = new Set(), postOrder = new Set()) {
263
+ visitor.add(node);
264
+ for (const succ of node.getSuccessors()) {
265
+ if (visitor.has(succ)) {
266
+ continue;
267
+ }
268
+ this.dfsPostOrder(succ, visitor, postOrder);
269
+ }
270
+ postOrder.add(node);
271
+ return postOrder;
272
+ }
150
273
  }
151
274
  exports.Cfg = Cfg;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewTreeBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ViewTreeBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewTreeBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ViewTreeBuilder.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,7 @@ const EtsConst_1 = require("../../common/EtsConst");
49
49
  const ArkClass_1 = require("../../model/ArkClass");
50
50
  const logger_1 = __importStar(require("../../../utils/logger"));
51
51
  const ModelUtils_1 = require("../../common/ModelUtils");
52
+ const Const_1 = require("../../common/Const");
52
53
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ViewTreeBuilder');
53
54
  const COMPONENT_CREATE_FUNCTIONS = new Set([EtsConst_1.COMPONENT_CREATE_FUNCTION, EtsConst_1.COMPONENT_BRANCH_FUNCTION]);
54
55
  function backtraceLocalInitValue(value) {
@@ -58,7 +59,7 @@ function backtraceLocalInitValue(value) {
58
59
  if (rightOp instanceof Local_1.Local) {
59
60
  return backtraceLocalInitValue(rightOp);
60
61
  }
61
- else if (rightOp instanceof Ref_1.ArkInstanceFieldRef && rightOp.getBase().getName().startsWith('$temp')) {
62
+ else if (rightOp instanceof Ref_1.ArkInstanceFieldRef && rightOp.getBase().getName().startsWith(Const_1.TEMP_LOCAL_PREFIX)) {
62
63
  return backtraceLocalInitValue(rightOp.getBase());
63
64
  }
64
65
  return rightOp;
@@ -970,7 +971,7 @@ class ViewTreeImpl extends TreeNodeStack {
970
971
  return component;
971
972
  }
972
973
  let name = expr.getBase().getName();
973
- if (name.startsWith('$temp')) {
974
+ if (name.startsWith(Const_1.TEMP_LOCAL_PREFIX)) {
974
975
  let initValue = backtraceLocalInitValue(expr.getBase());
975
976
  if (initValue instanceof Ref_1.ArkThisRef) {
976
977
  name = 'this';
@@ -1,5 +1,7 @@
1
1
  import ts from 'ohos-typescript';
2
2
  import { Decorator } from '../base/Decorator';
3
+ import { ArkError } from '../common/ArkError';
4
+ import { ArkMetadata, ArkMetadataKind, ArkMetadataType } from './ArkMetadata';
3
5
  export declare enum ModifierType {
4
6
  PRIVATE = 1,
5
7
  PROTECTED = 2,
@@ -17,11 +19,15 @@ export declare enum ModifierType {
17
19
  OVERRIDE = 8192,
18
20
  DECLARE = 16384
19
21
  }
22
+ export declare const MODIFIER_TYPE_MASK = 65535;
20
23
  export declare function modifierKind2Enum(kind: ts.SyntaxKind): ModifierType;
21
24
  export declare function modifiers2stringArray(modifiers: number): string[];
22
25
  export declare abstract class ArkBaseModel {
23
26
  protected modifiers?: number;
24
27
  protected decorators?: Set<Decorator>;
28
+ protected metadata?: ArkMetadata;
29
+ getMetadata(kind: ArkMetadataKind): ArkMetadataType | undefined;
30
+ setMetadata(kind: ArkMetadataKind, value: ArkMetadataType): void;
25
31
  getModifiers(): number;
26
32
  setModifiers(modifiers: number): void;
27
33
  addModifier(modifier: ModifierType | number): void;
@@ -47,5 +53,7 @@ export declare abstract class ArkBaseModel {
47
53
  hasEntryDecorator(): boolean;
48
54
  hasComponentDecorator(): boolean;
49
55
  hasDecorator(kind: string | Set<string>): boolean;
56
+ protected validateFields(fields: string[]): ArkError;
57
+ abstract validate(): ArkError;
50
58
  }
51
59
  //# sourceMappingURL=ArkBaseModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArkBaseModel.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkBaseModel.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAqB9C,oBAAY,YAAY;IACpB,OAAO,IAAI;IACX,SAAS,IAAS;IAClB,MAAM,IAAS;IACf,MAAM,IAAS;IACf,MAAM,KAAS;IACf,QAAQ,KAAS;IACjB,KAAK,KAAS;IACd,KAAK,MAAS;IACd,QAAQ,MAAS;IACjB,OAAO,MAAS;IAChB,EAAE,OAAU;IACZ,QAAQ,OAAU;IAClB,GAAG,OAAU;IACb,QAAQ,OAAU;IAClB,OAAO,QAAU;CACpB;AAwCD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,YAAY,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAED,8BAAsB,YAAY;IAC9B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,YAAY,IAAI,MAAM;IAOtB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMrC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IAIlD,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAO5C,QAAQ,IAAI,OAAO;IAInB,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,OAAO;IAI1B,gDAAgD;IACzC,UAAU,IAAI,OAAO;IAIrB,SAAS,IAAI,OAAO;IAIpB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAQrD,aAAa,IAAI,SAAS,EAAE;IAO5B,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI;IAM/C,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQnC,mBAAmB,IAAI,OAAO;IAI9B,kBAAkB,IAAI,SAAS,EAAE;IASjC,wBAAwB,IAAI,OAAO;IAInC,iBAAiB,IAAI,OAAO;IAI5B,qBAAqB,IAAI,OAAO;IAIhC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO;CAW3D"}
1
+ {"version":3,"file":"ArkBaseModel.d.ts","sourceRoot":"","sources":["../../../src/core/model/ArkBaseModel.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAqB9E,oBAAY,YAAY;IACpB,OAAO,IAAI;IACX,SAAS,IAAS;IAClB,MAAM,IAAS;IACf,MAAM,IAAS;IACf,MAAM,KAAS;IACf,QAAQ,KAAS;IACjB,KAAK,KAAS;IACd,KAAK,MAAS;IACd,QAAQ,MAAS;IACjB,OAAO,MAAS;IAChB,EAAE,OAAU;IACZ,QAAQ,OAAU;IAClB,GAAG,OAAU;IACb,QAAQ,OAAU;IAClB,OAAO,QAAU;CACpB;AAED,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAsCzC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,YAAY,CAEnE;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAED,8BAAsB,YAAY;IAC9B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAE1B,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,GAAG,SAAS;IAI/D,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI;IAOhE,YAAY,IAAI,MAAM;IAOtB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMrC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI;IAIlD,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAO5C,QAAQ,IAAI,OAAO;IAInB,WAAW,IAAI,OAAO;IAItB,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,OAAO;IAI1B,gDAAgD;IACzC,UAAU,IAAI,OAAO;IAIrB,SAAS,IAAI,OAAO;IAIpB,gBAAgB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO;IAQrD,aAAa,IAAI,SAAS,EAAE;IAO5B,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI;IAM/C,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAOxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQnC,mBAAmB,IAAI,OAAO;IAI9B,kBAAkB,IAAI,SAAS,EAAE;IASjC,wBAAwB,IAAI,OAAO;IAInC,iBAAiB,IAAI,OAAO;IAI5B,qBAAqB,IAAI,OAAO;IAIhC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO;IAYxD,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ;aAepC,QAAQ,IAAI,QAAQ;CACvC"}
@@ -13,13 +13,40 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
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
+ };
16
39
  var __importDefault = (this && this.__importDefault) || function (mod) {
17
40
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
41
  };
19
42
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.ArkBaseModel = exports.modifiers2stringArray = exports.modifierKind2Enum = exports.ModifierType = void 0;
43
+ exports.ArkBaseModel = exports.modifiers2stringArray = exports.modifierKind2Enum = exports.MODIFIER_TYPE_MASK = exports.ModifierType = void 0;
21
44
  const ohos_typescript_1 = __importDefault(require("ohos-typescript"));
22
45
  const EtsConst_1 = require("../common/EtsConst");
46
+ const ArkError_1 = require("../common/ArkError");
47
+ const logger_1 = __importStar(require("../../utils/logger"));
48
+ const ArkMetadata_1 = require("./ArkMetadata");
49
+ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ArkBaseModel');
23
50
  const COMPONENT_MEMBER_DECORATORS = new Set([
24
51
  'State',
25
52
  'Prop',
@@ -54,8 +81,8 @@ var ModifierType;
54
81
  ModifierType[ModifierType["OUT"] = 4096] = "OUT";
55
82
  ModifierType[ModifierType["OVERRIDE"] = 8192] = "OVERRIDE";
56
83
  ModifierType[ModifierType["DECLARE"] = 16384] = "DECLARE";
57
- })(ModifierType || (exports.ModifierType = ModifierType = {}));
58
- const MODIFIER_TYPE_MASK = 0xFFFF;
84
+ })(ModifierType = exports.ModifierType || (exports.ModifierType = {}));
85
+ exports.MODIFIER_TYPE_MASK = 0xffff;
59
86
  const MODIFIER_TYPE_STRINGS = [
60
87
  'private',
61
88
  'protected',
@@ -106,6 +133,17 @@ function modifiers2stringArray(modifiers) {
106
133
  }
107
134
  exports.modifiers2stringArray = modifiers2stringArray;
108
135
  class ArkBaseModel {
136
+ getMetadata(kind) {
137
+ var _a;
138
+ return (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.getMetadata(kind);
139
+ }
140
+ setMetadata(kind, value) {
141
+ var _a;
142
+ if (!this.metadata) {
143
+ this.metadata = new ArkMetadata_1.ArkMetadata();
144
+ }
145
+ return (_a = this.metadata) === null || _a === void 0 ? void 0 : _a.setMetadata(kind, value);
146
+ }
109
147
  getModifiers() {
110
148
  if (!this.modifiers) {
111
149
  return 0;
@@ -124,7 +162,7 @@ class ArkBaseModel {
124
162
  if (!this.modifiers) {
125
163
  return;
126
164
  }
127
- this.modifiers &= MODIFIER_TYPE_MASK ^ modifier;
165
+ this.modifiers &= exports.MODIFIER_TYPE_MASK ^ modifier;
128
166
  }
129
167
  isStatic() {
130
168
  return this.containsModifier(ModifierType.STATIC);
@@ -215,5 +253,19 @@ class ArkBaseModel {
215
253
  return value.getKind() === kind;
216
254
  }).length !== 0);
217
255
  }
256
+ validateFields(fields) {
257
+ let errs = [];
258
+ for (const field of fields) {
259
+ let value = Reflect.get(this, field);
260
+ if (!value) {
261
+ errs.push(field);
262
+ }
263
+ }
264
+ if (errs.length === 0) {
265
+ return { errCode: ArkError_1.ArkErrorCode.OK };
266
+ }
267
+ logger.error(`class fields: ${errs.join(',')} is undefined.`);
268
+ return { errCode: ArkError_1.ArkErrorCode.CLASS_INSTANCE_FIELD_UNDEFINDED, errMsg: `${errs.join(',')} is undefined.` };
269
+ }
218
270
  }
219
271
  exports.ArkBaseModel = ArkBaseModel;