arkanalyzer 1.0.81 → 1.0.83
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.
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts +1 -0
- package/lib/callgraph/algorithm/AbstractAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/AbstractAnalysis.js +8 -0
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.d.ts.map +1 -1
- package/lib/callgraph/algorithm/ClassHierarchyAnalysis.js +20 -16
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +5 -2
- package/lib/core/common/ArkValueTransformer.d.ts +1 -0
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +32 -4
- package/lib/core/common/Const.d.ts +12 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +15 -2
- package/lib/core/common/DummyMainCreater.d.ts +32 -2
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +235 -97
- package/lib/core/common/EtsConst.d.ts +1 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +3 -2
- package/lib/core/common/IRInference.d.ts +0 -7
- package/lib/core/common/IRInference.d.ts.map +1 -1
- package/lib/core/common/IRInference.js +11 -27
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +8 -15
- package/lib/core/graph/BasicBlock.d.ts +1 -1
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +4 -1
- package/lib/core/graph/builder/CfgBuilder.d.ts +1 -0
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +5 -1
- package/lib/core/graph/builder/ConditionBuilder.d.ts +1 -0
- package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ConditionBuilder.js +40 -24
- package/lib/core/inference/ModelInference.d.ts.map +1 -1
- package/lib/core/inference/ModelInference.js +31 -5
- package/lib/core/inference/ValueInference.d.ts +1 -36
- package/lib/core/inference/ValueInference.d.ts.map +1 -1
- package/lib/core/inference/ValueInference.js +1 -174
- package/lib/core/inference/abc/AbcInference.d.ts +7 -0
- package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
- package/lib/core/inference/abc/AbcInference.js +28 -2
- package/lib/core/inference/arkts/ArkTsInference.d.ts +43 -1
- package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
- package/lib/core/inference/arkts/ArkTsInference.js +189 -2
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +2 -5
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +6 -5
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -1
- package/lib/save/base/BasePrinter.d.ts.map +1 -1
- package/lib/save/base/BasePrinter.js +6 -5
- package/lib/save/source/SourceStmt.d.ts +2 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +51 -8
- package/lib/utils/IntMap.d.ts +48 -0
- package/lib/utils/IntMap.d.ts.map +1 -0
- package/lib/utils/IntMap.js +134 -0
- package/lib/utils/IntWorkList.d.ts +35 -0
- package/lib/utils/IntWorkList.d.ts.map +1 -0
- package/lib/utils/IntWorkList.js +97 -0
- package/lib/utils/PackedSparseMap.d.ts +26 -0
- package/lib/utils/PackedSparseMap.d.ts.map +1 -0
- package/lib/utils/PackedSparseMap.js +140 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +20 -11
- package/lib/utils/logger.d.ts +1 -0
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +1 -0
- package/package.json +2 -2
|
@@ -217,21 +217,14 @@ class ModelUtils {
|
|
|
217
217
|
return null;
|
|
218
218
|
}
|
|
219
219
|
static findSymbolInFileWithName(symbolName, arkClass, onlyType = false) {
|
|
220
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u
|
|
221
|
-
// find symbol from enum value
|
|
222
|
-
if (arkClass.getCategory() === ArkClass_1.ClassCategory.ENUM) {
|
|
223
|
-
const field = arkClass.getStaticFieldWithName(symbolName);
|
|
224
|
-
if (field) {
|
|
225
|
-
return new Local_1.Local(symbolName, (_a = TypeInference_1.TypeInference.getEnumValueType(field)) !== null && _a !== void 0 ? _a : field.getType());
|
|
226
|
-
}
|
|
227
|
-
}
|
|
220
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
228
221
|
// look up symbol from inner to outer
|
|
229
222
|
let currNamespace = arkClass.getDeclaringArkNamespace();
|
|
230
223
|
let result;
|
|
231
224
|
while (currNamespace) {
|
|
232
|
-
result = (
|
|
225
|
+
result = (_e = (_a = currNamespace.getClassWithName(symbolName)) !== null && _a !== void 0 ? _a : (_d = (_c = (_b = currNamespace.getDefaultClass()) === null || _b === void 0 ? void 0 : _b.getDefaultArkMethod()) === null || _c === void 0 ? void 0 : _c.getBody()) === null || _d === void 0 ? void 0 : _d.getAliasTypeByName(symbolName)) !== null && _e !== void 0 ? _e : (_j = (_h = (_g = (_f = currNamespace.getDefaultClass()) === null || _f === void 0 ? void 0 : _f.getDefaultArkMethod()) === null || _g === void 0 ? void 0 : _g.getBody()) === null || _h === void 0 ? void 0 : _h.getLocals()) === null || _j === void 0 ? void 0 : _j.get(symbolName);
|
|
233
226
|
if (!result && !onlyType) {
|
|
234
|
-
result = (
|
|
227
|
+
result = (_l = (_k = (currNamespace.getName() === symbolName ? currNamespace : null)) !== null && _k !== void 0 ? _k : currNamespace.getNamespaceWithName(symbolName)) !== null && _l !== void 0 ? _l : currNamespace.getDefaultClass().getMethodWithName(symbolName);
|
|
235
228
|
}
|
|
236
229
|
if (result) {
|
|
237
230
|
return result;
|
|
@@ -240,9 +233,9 @@ class ModelUtils {
|
|
|
240
233
|
}
|
|
241
234
|
const file = arkClass.getDeclaringArkFile();
|
|
242
235
|
result =
|
|
243
|
-
(
|
|
236
|
+
(_q = (_m = file.getClassWithName(symbolName)) !== null && _m !== void 0 ? _m : (_p = (_o = file.getDefaultClass().getDefaultArkMethod()) === null || _o === void 0 ? void 0 : _o.getBody()) === null || _p === void 0 ? void 0 : _p.getAliasTypeByName(symbolName)) !== null && _q !== void 0 ? _q : (_t = (_s = (_r = file.getDefaultClass()) === null || _r === void 0 ? void 0 : _r.getDefaultArkMethod()) === null || _s === void 0 ? void 0 : _s.getBody()) === null || _t === void 0 ? void 0 : _t.getLocals().get(symbolName);
|
|
244
237
|
if (!result && !onlyType) {
|
|
245
|
-
result = (
|
|
238
|
+
result = (_u = file.getNamespaceWithName(symbolName)) !== null && _u !== void 0 ? _u : file.getDefaultClass().getMethodWithName(symbolName);
|
|
246
239
|
}
|
|
247
240
|
return result || null;
|
|
248
241
|
}
|
|
@@ -380,8 +373,8 @@ class ModelUtils {
|
|
|
380
373
|
return ((_k = (_j = (_h = (_g = (_e = (_d = (_c = (_b = (_a = namespace.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.getBody()) === null || _c === void 0 ? void 0 : _c.getLocals()) === null || _d === void 0 ? void 0 : _d.get(name)) !== null && _e !== void 0 ? _e : (_f = namespace.getDefaultClass()) === null || _f === void 0 ? void 0 : _f.getMethodWithName(name)) !== null && _g !== void 0 ? _g : findArkExport(namespace.getExportInfoBy(name))) !== null && _h !== void 0 ? _h : namespace.getClassWithName(name)) !== null && _j !== void 0 ? _j : namespace.getNamespaceWithName(name)) !== null && _k !== void 0 ? _k : (_o = (_m = (_l = namespace.getDefaultClass()) === null || _l === void 0 ? void 0 : _l.getDefaultArkMethod()) === null || _m === void 0 ? void 0 : _m.getBody()) === null || _o === void 0 ? void 0 : _o.getAliasTypeByName(name));
|
|
381
374
|
}
|
|
382
375
|
static findPropertyInClass(name, arkClass) {
|
|
383
|
-
var _a, _b, _c, _d;
|
|
384
|
-
let property = (_d = (_c = (_b = (_a = arkClass.getMethodWithName(name)) !== null && _a !== void 0 ? _a : arkClass.
|
|
376
|
+
var _a, _b, _c, _d, _e;
|
|
377
|
+
let property = (_e = (_d = (_c = (_b = (_a = arkClass.getMethodWithName(name)) !== null && _a !== void 0 ? _a : arkClass.getFieldWithName(name)) !== null && _b !== void 0 ? _b : arkClass.getStaticMethodWithName(name)) !== null && _c !== void 0 ? _c : arkClass.getStaticFieldWithName(name)) !== null && _d !== void 0 ? _d : arkClass.getMethodWithName(Const_1.GETTER_PREFIX + name)) !== null && _e !== void 0 ? _e : arkClass.getStaticMethodWithName(Const_1.GETTER_PREFIX + name);
|
|
385
378
|
if (property) {
|
|
386
379
|
return property;
|
|
387
380
|
}
|
|
@@ -394,7 +387,7 @@ class ModelUtils {
|
|
|
394
387
|
return property;
|
|
395
388
|
}
|
|
396
389
|
}
|
|
397
|
-
const objectClass = arkClass.getDeclaringArkFile().getScene().getSdkGlobal(
|
|
390
|
+
const objectClass = arkClass.getDeclaringArkFile().getScene().getSdkGlobal(Builtin_1.Builtin.OBJECT);
|
|
398
391
|
if (objectClass instanceof ArkClass_1.ArkClass && arkClass !== objectClass) {
|
|
399
392
|
return this.findPropertyInClass(name, objectClass);
|
|
400
393
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicBlock.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BasicBlock.ts"],"names":[],"mappings":"AAeA,OAAO,EAA+C,IAAI,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAK5D;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,0BAA0B,CAAC,CAAe;IAClD,OAAO,CAAC,4BAA4B,CAAC,CAAe
|
|
1
|
+
{"version":3,"file":"BasicBlock.d.ts","sourceRoot":"","sources":["../../../src/core/graph/BasicBlock.ts"],"names":[],"mappings":"AAeA,OAAO,EAA+C,IAAI,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAK5D;;;;;;;;;GASG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,0BAA0B,CAAC,CAAe;IAClD,OAAO,CAAC,4BAA4B,CAAC,CAAe;gBAExC,EAAE,CAAC,EAAE,MAAM;IAMhB,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;IAStB,OAAO,IAAI,IAAI,GAAG,IAAI;IAU7B;;;;;;;;;;;;;;;;;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,GAAG,IAAI;IAKhC,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI1C,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IASlD,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAShD,QAAQ,IAAI,MAAM;IAQlB,QAAQ,IAAI,QAAQ;IA6B3B,OAAO,CAAC,SAAS;IASV,6BAA6B,IAAI,UAAU,EAAE,GAAG,SAAS;IAIzD,+BAA+B,IAAI,UAAU,EAAE,GAAG,SAAS;IAI3D,8BAA8B,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMvD,4BAA4B,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAM/D"}
|
|
@@ -54,11 +54,14 @@ const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER,
|
|
|
54
54
|
* reach these basic blocks through edges.
|
|
55
55
|
*/
|
|
56
56
|
class BasicBlock {
|
|
57
|
-
constructor() {
|
|
57
|
+
constructor(id) {
|
|
58
58
|
this.id = -1;
|
|
59
59
|
this.stmts = [];
|
|
60
60
|
this.predecessorBlocks = [];
|
|
61
61
|
this.successorBlocks = [];
|
|
62
|
+
if (id !== undefined) {
|
|
63
|
+
this.id = id;
|
|
64
|
+
}
|
|
62
65
|
}
|
|
63
66
|
getId() {
|
|
64
67
|
return this.id;
|
|
@@ -25,6 +25,7 @@ declare class StatementBuilder {
|
|
|
25
25
|
passTmies: number;
|
|
26
26
|
numOfIdentifier: number;
|
|
27
27
|
isDoWhile: boolean;
|
|
28
|
+
hasDoWhileBody: boolean;
|
|
28
29
|
constructor(type: string, code: string, astNode: ts.Node | null, scopeID: number);
|
|
29
30
|
}
|
|
30
31
|
declare class ConditionStatementBuilder extends StatementBuilder {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAA0C,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIlD,OAAO,EAAE,SAAS,EAA0D,MAAM,iBAAiB,CAAC;AACpG,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAW3C,cAAM,gBAAgB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC9B,KAAK,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAK;IACtB,eAAe,EAAE,MAAM,CAAK;IAC5B,SAAS,EAAE,OAAO,CAAS;
|
|
1
|
+
{"version":3,"file":"CfgBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/CfgBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,7 @@ class StatementBuilder {
|
|
|
61
61
|
this.passTmies = 0;
|
|
62
62
|
this.numOfIdentifier = 0;
|
|
63
63
|
this.isDoWhile = false;
|
|
64
|
+
this.hasDoWhileBody = false;
|
|
64
65
|
this.type = type;
|
|
65
66
|
this.code = code;
|
|
66
67
|
this.next = null;
|
|
@@ -361,6 +362,7 @@ class CfgBuilder {
|
|
|
361
362
|
loopstm.condition = c.expression.getText(this.sourceFile);
|
|
362
363
|
loopstm.code = 'while (' + loopstm.condition + ')';
|
|
363
364
|
loopstm.isDoWhile = true;
|
|
365
|
+
loopstm.hasDoWhileBody = false;
|
|
364
366
|
if (ts.isBlock(c.statement)) {
|
|
365
367
|
this.walkAST(lastStatement, loopstm, [...c.statement.statements]);
|
|
366
368
|
}
|
|
@@ -378,6 +380,7 @@ class CfgBuilder {
|
|
|
378
380
|
(_b = lastStatement.next) === null || _b === void 0 ? void 0 : _b.lasts.add(loopstm);
|
|
379
381
|
}
|
|
380
382
|
if (loopstm.nextT && loopstm.nextT !== loopstm) {
|
|
383
|
+
loopstm.hasDoWhileBody = true;
|
|
381
384
|
loopstm.nextT.isDoWhile = true;
|
|
382
385
|
loopstm.doStatement = loopstm.nextT;
|
|
383
386
|
}
|
|
@@ -691,7 +694,8 @@ class CfgBuilder {
|
|
|
691
694
|
const block = new BlockBuilder(this.blocks.length, []);
|
|
692
695
|
this.blocks.push(block);
|
|
693
696
|
while (stmt && !handledStmts.has(stmt)) {
|
|
694
|
-
if (stmt.type === 'loopStatement' && block.stmts.length > 0 &&
|
|
697
|
+
if (stmt.type === 'loopStatement' && block.stmts.length > 0 &&
|
|
698
|
+
(!stmt.isDoWhile || (stmt.isDoWhile && !stmt.hasDoWhileBody))) {
|
|
695
699
|
stmtQueue.push(stmt);
|
|
696
700
|
break;
|
|
697
701
|
}
|
|
@@ -12,6 +12,7 @@ export declare class ConditionBuilder {
|
|
|
12
12
|
private deleteDummyConditionalOperatorStmt;
|
|
13
13
|
private findFirstConditionalOperator;
|
|
14
14
|
private removeUnnecessaryBlocksInConditionalOperator;
|
|
15
|
+
private resolveBottomBlocksForTempReassign;
|
|
15
16
|
private replaceTempRecursively;
|
|
16
17
|
}
|
|
17
18
|
//# sourceMappingURL=ConditionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAc,MAAM,cAAc,CAAC;AAGxD;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAC1C,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAC9B,cAAc,EAAE,OAAO,GACxB,IAAI;IA6CP,OAAO,CAAC,4CAA4C;IASpD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,yCAAyC;IA4CjD,OAAO,CAAC,mCAAmC;IAc3C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IA8BpD,OAAO,CAAC,sBAAsB;
|
|
1
|
+
{"version":3,"file":"ConditionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/graph/builder/ConditionBuilder.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,OAAO,EAAE,YAAY,EAAc,MAAM,cAAc,CAAC;AAGxD;;GAEG;AACH,qBAAa,gBAAgB;IAClB,uCAAuC,CAC1C,sBAAsB,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,EACrD,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,EAC9B,cAAc,EAAE,OAAO,GACxB,IAAI;IA6CP,OAAO,CAAC,4CAA4C;IASpD,OAAO,CAAC,wCAAwC;IAiChD,OAAO,CAAC,yCAAyC;IA4CjD,OAAO,CAAC,mCAAmC;IAc3C,OAAO,CAAC,kCAAkC;IAW1C,OAAO,CAAC,4BAA4B;IAyBpC,OAAO,CAAC,4CAA4C;IA8BpD,OAAO,CAAC,kCAAkC;IAiD1C,OAAO,CAAC,sBAAsB;CAoCjC"}
|
|
@@ -179,7 +179,44 @@ class ConditionBuilder {
|
|
|
179
179
|
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(bottomBlock, newPredecessors);
|
|
180
180
|
return [bottomBlock];
|
|
181
181
|
}
|
|
182
|
-
|
|
182
|
+
resolveBottomBlocksForTempReassign(tempResultReassignStmt, currBottomBlock, targetLocal, allBlocks, targetValuePosition) {
|
|
183
|
+
var _a;
|
|
184
|
+
let newBottomBlocks = [];
|
|
185
|
+
if (!tempResultReassignStmt) {
|
|
186
|
+
return [currBottomBlock];
|
|
187
|
+
}
|
|
188
|
+
const oldPredecessors = Array.from(currBottomBlock.getPredecessors());
|
|
189
|
+
const newPredecessors = [];
|
|
190
|
+
const prevTempResultLocal = tempResultReassignStmt.getRightOp();
|
|
191
|
+
let replaceSuccess = { value: false };
|
|
192
|
+
for (const predecessor of oldPredecessors) {
|
|
193
|
+
newPredecessors.push(...this.replaceTempRecursively(predecessor, targetLocal, prevTempResultLocal, allBlocks, targetValuePosition, replaceSuccess));
|
|
194
|
+
}
|
|
195
|
+
if (replaceSuccess.value) {
|
|
196
|
+
CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(currBottomBlock);
|
|
197
|
+
currBottomBlock.remove(tempResultReassignStmt);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
let stmt = tempResultReassignStmt;
|
|
201
|
+
stmt.setLeftOp(targetLocal);
|
|
202
|
+
if (targetValuePosition) {
|
|
203
|
+
const restPositions = (_a = stmt.getOperandOriginalPositions()) === null || _a === void 0 ? void 0 : _a.slice(1);
|
|
204
|
+
if (restPositions) {
|
|
205
|
+
stmt.setOperandOriginalPositions([targetValuePosition, ...restPositions]);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (currBottomBlock.getStmts().length === 0) {
|
|
210
|
+
newBottomBlocks = newPredecessors;
|
|
211
|
+
allBlocks.delete(currBottomBlock);
|
|
212
|
+
}
|
|
213
|
+
else if (replaceSuccess.value) {
|
|
214
|
+
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(currBottomBlock, newPredecessors);
|
|
215
|
+
newBottomBlocks = [currBottomBlock];
|
|
216
|
+
}
|
|
217
|
+
return newBottomBlocks;
|
|
218
|
+
}
|
|
219
|
+
replaceTempRecursively(currBottomBlock, targetLocal, tempResultLocal, allBlocks, targetValuePosition, replaceSuccess = { value: false }) {
|
|
183
220
|
var _a;
|
|
184
221
|
const stmts = currBottomBlock.getStmts();
|
|
185
222
|
const stmtsCnt = stmts.length;
|
|
@@ -193,6 +230,7 @@ class ConditionBuilder {
|
|
|
193
230
|
tempResultReassignStmt = stmt;
|
|
194
231
|
continue;
|
|
195
232
|
}
|
|
233
|
+
replaceSuccess.value = true;
|
|
196
234
|
stmt.setLeftOp(targetLocal);
|
|
197
235
|
if (targetValuePosition) {
|
|
198
236
|
const restPositions = (_a = stmt.getOperandOriginalPositions()) === null || _a === void 0 ? void 0 : _a.slice(1);
|
|
@@ -201,29 +239,7 @@ class ConditionBuilder {
|
|
|
201
239
|
}
|
|
202
240
|
}
|
|
203
241
|
}
|
|
204
|
-
let newBottomBlocks =
|
|
205
|
-
if (tempResultReassignStmt) {
|
|
206
|
-
const oldPredecessors = Array.from(currBottomBlock.getPredecessors());
|
|
207
|
-
const newPredecessors = [];
|
|
208
|
-
const prevTempResultLocal = tempResultReassignStmt.getRightOp();
|
|
209
|
-
for (const predecessor of oldPredecessors) {
|
|
210
|
-
newPredecessors.push(...this.replaceTempRecursively(predecessor, targetLocal, prevTempResultLocal, allBlocks, targetValuePosition));
|
|
211
|
-
}
|
|
212
|
-
CfgBuilder_1.CfgBuilder.unlinkPredecessorsOfBasicBlock(currBottomBlock);
|
|
213
|
-
currBottomBlock.remove(tempResultReassignStmt);
|
|
214
|
-
if (currBottomBlock.getStmts().length === 0) {
|
|
215
|
-
// remove this block
|
|
216
|
-
newBottomBlocks = newPredecessors;
|
|
217
|
-
allBlocks.delete(currBottomBlock);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
CfgBuilder_1.CfgBuilder.linkPredecessorsOfBasicBlock(currBottomBlock, newPredecessors);
|
|
221
|
-
newBottomBlocks = [currBottomBlock];
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
newBottomBlocks = [currBottomBlock];
|
|
226
|
-
}
|
|
242
|
+
let newBottomBlocks = this.resolveBottomBlocksForTempReassign(tempResultReassignStmt, currBottomBlock, targetLocal, allBlocks, targetValuePosition);
|
|
227
243
|
return newBottomBlocks;
|
|
228
244
|
}
|
|
229
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ModelInference.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"ModelInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ModelInference.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAA+C,IAAI,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAoB,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAwC,IAAI,EAAY,MAAM,cAAc,CAAC;AAQpF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;;;GAIG;AACH,uBAAe,iBAAkB,YAAW,SAAS,EAAE,aAAa;IAChE;;;;;OAKG;aACa,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG;IAE3C;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,GAAG;IAWpC;;;;OAIG;IACI,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAGtC;;;;;OAKG;IACI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;CAEvD;AAED,8BAAsB,mBAAoB,SAAQ,iBAAiB;IAC/D,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAQ;IAE1C;;;OAGG;aACa,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI;IAEpD;;;OAGG;IACI,KAAK,CAAC,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IA4BrD;;;;OAIG;IACI,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;CAM9E;AAED,qBAAa,aAAc,SAAQ,iBAAiB;IAChD,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAiB;gBAE3B,mBAAmB,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc;IAM7E,iBAAiB,IAAI,cAAc;IAI1C;;;OAGG;IACI,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMpC;;;OAGG;IACI,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAIjC;;;OAGG;IACI,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;CAGxC;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IACjD,OAAO,CAAC,eAAe,CAAkB;gBAE7B,eAAe,EAAE,eAAe;IAKrC,kBAAkB,IAAI,eAAe;IAI5C;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIzC;;;OAGG;IACI,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAKzC;AAED,UAAU,eAAe;IACrB,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC;CAC1B;AAED,qBAAa,eAAgB,SAAQ,iBAAiB;IAClD,OAAO,CAAC,aAAa,CAAgB;IAErC,uFAAuF;IACvF,OAAO,CAAC,eAAe,CAA6B;IAEpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAQ;gBAErB,aAAa,EAAE,aAAa;IAKxC;;;OAGG;IACI,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAO3C;;OAEG;IACI,YAAY,IAAI,IAAI;IAI3B;;;;OAIG;IACI,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,eAAe,EAAE;IAkDlD;;;;OAIG;IACI,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,IAAI;CAmB9E;AAGD,qBAAa,aAAc,SAAQ,iBAAiB;IAChD,OAAO,CAAC,eAAe,CAAqC;gBAEhD,eAAe,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE;IAMpD;;;;OAIG;IACI,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS;IAM1C;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,GAAG,SAAS,GAAG,eAAe,GAAG,SAAS;IAmCpF;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAoBlB;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;IA2B3D;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAiB1B,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,SAAS;IAWzF,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,SAAS;IAOhG;;;;;;OAMG;IACI,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,SAAS;IAe3F;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,eAAe;CAqC1B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
* Copyright (c) 2024-
|
|
3
|
+
* Copyright (c) 2024-2026 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
|
|
@@ -53,6 +53,7 @@ const IRInference_1 = require("../common/IRInference");
|
|
|
53
53
|
const Local_1 = require("../base/Local");
|
|
54
54
|
const Const_1 = require("../common/Const");
|
|
55
55
|
const TypeExpr_1 = require("../base/TypeExpr");
|
|
56
|
+
const Expr_1 = require("../base/Expr");
|
|
56
57
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ModelInference');
|
|
57
58
|
/**
|
|
58
59
|
* Abstract base class for performing inference on ArkModel instances
|
|
@@ -329,15 +330,40 @@ class StmtInference extends ArkModelInference {
|
|
|
329
330
|
* @returns {InferStmtResult | undefined} Inference result with impacted statements
|
|
330
331
|
*/
|
|
331
332
|
postInfer(stmt, defType) {
|
|
332
|
-
var _a, _b;
|
|
333
|
+
var _a, _b, _c, _d, _e;
|
|
333
334
|
const method = stmt.getCfg().getDeclaringMethod();
|
|
334
|
-
|
|
335
|
+
let replacedStmts = [];
|
|
336
|
+
let impactedStmts = new Set();
|
|
337
|
+
if (stmt instanceof Stmt_1.ArkAssignStmt && stmt.getLeftOp() instanceof Expr_1.AbstractInvokeExpr) {
|
|
338
|
+
const invokeExpr = stmt.getLeftOp();
|
|
339
|
+
const cls = method.getDeclaringArkFile().getScene().getClass(invokeExpr.getMethodSignature().getDeclaringClassSignature());
|
|
340
|
+
const name = invokeExpr.getMethodSignature().getMethodSubSignature().getMethodName().replace(Const_1.GETTER_PREFIX, Const_1.SETTER_PREFIX);
|
|
341
|
+
const invokeMethod = (_a = cls === null || cls === void 0 ? void 0 : cls.getMethodWithName(name)) !== null && _a !== void 0 ? _a : cls === null || cls === void 0 ? void 0 : cls.getStaticMethodWithName(name);
|
|
342
|
+
if (invokeMethod) {
|
|
343
|
+
invokeExpr.setMethodSignature(invokeMethod.getSignature());
|
|
344
|
+
}
|
|
345
|
+
invokeExpr.setArgs([stmt.getRightOp()]);
|
|
346
|
+
const invokeStmt = new Stmt_1.ArkInvokeStmt(invokeExpr);
|
|
347
|
+
invokeStmt.setOriginalText((_b = stmt.getOriginalText()) !== null && _b !== void 0 ? _b : '');
|
|
348
|
+
invokeStmt.setOperandOriginalPositions((_c = stmt.getOperandOriginalPositions()) !== null && _c !== void 0 ? _c : []);
|
|
349
|
+
invokeStmt.setCfg(stmt.getCfg());
|
|
350
|
+
invokeStmt.setOriginPositionInfo(stmt.getOriginPositionInfo());
|
|
351
|
+
invokeStmt.metadata = stmt.metadata;
|
|
352
|
+
replacedStmts.push(invokeStmt);
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
impactedStmts = this.typeSpread(stmt, method);
|
|
356
|
+
}
|
|
335
357
|
const finalDef = stmt.getDef();
|
|
336
358
|
if (defType !== (finalDef === null || finalDef === void 0 ? void 0 : finalDef.getType()) && finalDef instanceof Local_1.Local &&
|
|
337
|
-
(((
|
|
359
|
+
(((_e = (_d = method.getBody()) === null || _d === void 0 ? void 0 : _d.getUsedGlobals()) === null || _e === void 0 ? void 0 : _e.get(finalDef.getName())) || !finalDef.getName().startsWith(Const_1.NAME_PREFIX))) {
|
|
338
360
|
finalDef.getUsedStmts().forEach(e => impactedStmts.add(e));
|
|
339
361
|
}
|
|
340
|
-
return
|
|
362
|
+
return {
|
|
363
|
+
oldStmt: stmt,
|
|
364
|
+
impactedStmts: impactedStmts.size > 0 ? Array.from(impactedStmts) : undefined,
|
|
365
|
+
replacedStmts: replacedStmts.length > 0 ? replacedStmts : undefined
|
|
366
|
+
};
|
|
341
367
|
}
|
|
342
368
|
/**
|
|
343
369
|
* Recursively infers types for values and their dependencies
|
|
@@ -4,7 +4,7 @@ import { Inference, InferenceFlow } from './Inference';
|
|
|
4
4
|
import { ArkInstanceFieldRef, ArkParameterRef, ArkStaticFieldRef, ClosureFieldRef } from '../base/Ref';
|
|
5
5
|
import { Type } from '../base/Type';
|
|
6
6
|
import { ArkMethod } from '../model/ArkMethod';
|
|
7
|
-
import { AbstractInvokeExpr,
|
|
7
|
+
import { AbstractInvokeExpr, ArkCastExpr, ArkConditionExpr, ArkInstanceInvokeExpr, ArkInstanceOfExpr, ArkNewArrayExpr, ArkNewExpr, ArkNormalBinopExpr, ArkPtrInvokeExpr, ArkStaticInvokeExpr } from '../base/Expr';
|
|
8
8
|
import { Local } from '../base/Local';
|
|
9
9
|
export declare enum InferLanguage {
|
|
10
10
|
UNKNOWN = -1,
|
|
@@ -213,39 +213,4 @@ export declare class LocalInference extends ValueInference<Local> {
|
|
|
213
213
|
preInfer(value: Local): boolean;
|
|
214
214
|
infer(value: Local, stmt: Stmt): Value | undefined;
|
|
215
215
|
}
|
|
216
|
-
export declare class ArkTSFieldRefInference extends FieldRefInference {
|
|
217
|
-
preInfer(value: ArkInstanceFieldRef, stmt: Stmt): boolean;
|
|
218
|
-
/**
|
|
219
|
-
* Checks if a value represents an anonymous class 'this' field reference
|
|
220
|
-
* Identifies field references that access fields directly on 'this' in anonymous class constructors
|
|
221
|
-
* @param {Value} stmtDef - The value to check (typically a field reference)
|
|
222
|
-
* @param {ArkMethod} arkMethod - The method containing the value
|
|
223
|
-
* @returns {boolean} True if the value is an anonymous class 'this' field reference
|
|
224
|
-
*/
|
|
225
|
-
private isAnonClassThisRef;
|
|
226
|
-
}
|
|
227
|
-
export declare class ArkTsInstanceInvokeExprInference extends InstanceInvokeExprInference {
|
|
228
|
-
/**
|
|
229
|
-
* Performs inference on an instance invocation expression within the context of a statement
|
|
230
|
-
* Enhances the base implementation with real generic type inference and extension function support
|
|
231
|
-
* @param {ArkInstanceInvokeExpr} value - The invocation expression to infer
|
|
232
|
-
* @param {Stmt} stmt - The statement containing the invocation
|
|
233
|
-
* @returns {Value | undefined} Returns a new expression if transformed, undefined otherwise
|
|
234
|
-
*/
|
|
235
|
-
infer(value: ArkInstanceInvokeExpr, stmt: Stmt): Value | undefined;
|
|
236
|
-
}
|
|
237
|
-
export declare class AliasTypeExprInference extends ValueInference<AliasTypeExpr> {
|
|
238
|
-
getValueName(): string;
|
|
239
|
-
preInfer(value: AliasTypeExpr): boolean;
|
|
240
|
-
infer(value: AliasTypeExpr, stmt: Stmt): Value | undefined;
|
|
241
|
-
}
|
|
242
|
-
export declare class ArkTSLocalInference extends LocalInference {
|
|
243
|
-
getValueName(): string;
|
|
244
|
-
preInfer(value: Local): boolean;
|
|
245
|
-
infer(value: Local, stmt: Stmt): Value | undefined;
|
|
246
|
-
}
|
|
247
|
-
export declare class AbcFieldRefInference extends FieldRefInference {
|
|
248
|
-
getValueName(): string;
|
|
249
|
-
preInfer(value: ArkInstanceFieldRef, stmt: Stmt): boolean;
|
|
250
|
-
}
|
|
251
216
|
//# sourceMappingURL=ValueInference.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValueInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ValueInference.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,
|
|
1
|
+
{"version":3,"file":"ValueInference.d.ts","sourceRoot":"","sources":["../../../src/core/inference/ValueInference.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,8 +44,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
44
44
|
};
|
|
45
45
|
var InstanceInvokeExprInference_1;
|
|
46
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
exports.
|
|
48
|
-
const Ref_1 = require("../base/Ref");
|
|
47
|
+
exports.LocalInference = exports.ArkCastExprInference = exports.ArkInstanceOfExprInference = exports.ArkConditionExprInference = exports.ArkNormalBinOpExprInference = exports.ArkNewArrayExprInference = exports.ArkNewExprInference = exports.ArkPtrInvokeExprInference = exports.StaticInvokeExprInference = exports.InstanceInvokeExprInference = exports.StaticFieldRefInference = exports.FieldRefInference = exports.ClosureFieldRefInference = exports.ParameterRefInference = exports.ValueInference = exports.Bind = exports.valueCtors = exports.InferLanguage = void 0;
|
|
49
48
|
const Type_1 = require("../base/Type");
|
|
50
49
|
const TypeInference_1 = require("../common/TypeInference");
|
|
51
50
|
const IRInference_1 = require("../common/IRInference");
|
|
@@ -60,8 +59,6 @@ const ArkClass_1 = require("../model/ArkClass");
|
|
|
60
59
|
const Constant_1 = require("../base/Constant");
|
|
61
60
|
const logger_1 = __importStar(require("../../utils/logger"));
|
|
62
61
|
const ArkSignature_1 = require("../model/ArkSignature");
|
|
63
|
-
const ArkImport_1 = require("../model/ArkImport");
|
|
64
|
-
const ArkField_1 = require("../model/ArkField");
|
|
65
62
|
const Builtin_1 = require("../common/Builtin");
|
|
66
63
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'ValueInference');
|
|
67
64
|
var InferLanguage;
|
|
@@ -621,173 +618,3 @@ LocalInference = __decorate([
|
|
|
621
618
|
Bind()
|
|
622
619
|
], LocalInference);
|
|
623
620
|
exports.LocalInference = LocalInference;
|
|
624
|
-
let ArkTSFieldRefInference = class ArkTSFieldRefInference extends FieldRefInference {
|
|
625
|
-
preInfer(value, stmt) {
|
|
626
|
-
if (stmt.getDef() === value && this.isAnonClassThisRef(value, stmt.getCfg().getDeclaringMethod())) {
|
|
627
|
-
return false;
|
|
628
|
-
}
|
|
629
|
-
return super.preInfer(value);
|
|
630
|
-
}
|
|
631
|
-
/**
|
|
632
|
-
* Checks if a value represents an anonymous class 'this' field reference
|
|
633
|
-
* Identifies field references that access fields directly on 'this' in anonymous class constructors
|
|
634
|
-
* @param {Value} stmtDef - The value to check (typically a field reference)
|
|
635
|
-
* @param {ArkMethod} arkMethod - The method containing the value
|
|
636
|
-
* @returns {boolean} True if the value is an anonymous class 'this' field reference
|
|
637
|
-
*/
|
|
638
|
-
isAnonClassThisRef(stmtDef, arkMethod) {
|
|
639
|
-
return (arkMethod.getName() === Const_1.INSTANCE_INIT_METHOD_NAME || arkMethod.getName() === TSConst_1.CONSTRUCTOR_NAME) &&
|
|
640
|
-
stmtDef instanceof Ref_1.ArkInstanceFieldRef &&
|
|
641
|
-
stmtDef.getBase().getName() === TSConst_1.THIS_NAME &&
|
|
642
|
-
arkMethod.getDeclaringArkClass().isAnonymousClass() &&
|
|
643
|
-
stmtDef.getFieldName().indexOf('.') === -1;
|
|
644
|
-
}
|
|
645
|
-
};
|
|
646
|
-
ArkTSFieldRefInference = __decorate([
|
|
647
|
-
Bind(InferLanguage.ARK_TS1_1)
|
|
648
|
-
], ArkTSFieldRefInference);
|
|
649
|
-
exports.ArkTSFieldRefInference = ArkTSFieldRefInference;
|
|
650
|
-
let ArkTsInstanceInvokeExprInference = class ArkTsInstanceInvokeExprInference extends InstanceInvokeExprInference {
|
|
651
|
-
/**
|
|
652
|
-
* Performs inference on an instance invocation expression within the context of a statement
|
|
653
|
-
* Enhances the base implementation with real generic type inference and extension function support
|
|
654
|
-
* @param {ArkInstanceInvokeExpr} value - The invocation expression to infer
|
|
655
|
-
* @param {Stmt} stmt - The statement containing the invocation
|
|
656
|
-
* @returns {Value | undefined} Returns a new expression if transformed, undefined otherwise
|
|
657
|
-
*/
|
|
658
|
-
infer(value, stmt) {
|
|
659
|
-
var _a;
|
|
660
|
-
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
661
|
-
TypeInference_1.TypeInference.inferRealGenericTypes(value.getRealGenericTypes(), arkMethod.getDeclaringArkClass());
|
|
662
|
-
const result = (_a = IRInference_1.IRInference.inferInstanceMember(value.getBase().getType(), value, arkMethod, InstanceInvokeExprInference.inferInvokeExpr)) !== null && _a !== void 0 ? _a : IRInference_1.IRInference.processExtendFunc(value, arkMethod, super.getMethodName(value, arkMethod));
|
|
663
|
-
return !result || result === value ? undefined : result;
|
|
664
|
-
}
|
|
665
|
-
};
|
|
666
|
-
ArkTsInstanceInvokeExprInference = __decorate([
|
|
667
|
-
Bind(InferLanguage.ARK_TS1_1)
|
|
668
|
-
], ArkTsInstanceInvokeExprInference);
|
|
669
|
-
exports.ArkTsInstanceInvokeExprInference = ArkTsInstanceInvokeExprInference;
|
|
670
|
-
let AliasTypeExprInference = class AliasTypeExprInference extends ValueInference {
|
|
671
|
-
getValueName() {
|
|
672
|
-
return 'AliasTypeExpr';
|
|
673
|
-
}
|
|
674
|
-
preInfer(value) {
|
|
675
|
-
return value.getOriginalType() === undefined;
|
|
676
|
-
}
|
|
677
|
-
infer(value, stmt) {
|
|
678
|
-
var _a;
|
|
679
|
-
let originalObject = value.getOriginalObject();
|
|
680
|
-
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
681
|
-
let type;
|
|
682
|
-
let originalLocal;
|
|
683
|
-
if (originalObject instanceof Local_1.Local) {
|
|
684
|
-
originalLocal = ModelUtils_1.ModelUtils.findArkModelByRefName(originalObject.getName(), arkMethod.getDeclaringArkClass());
|
|
685
|
-
if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(originalLocal)) {
|
|
686
|
-
originalObject = originalLocal;
|
|
687
|
-
}
|
|
688
|
-
}
|
|
689
|
-
if (originalObject instanceof ArkImport_1.ImportInfo) {
|
|
690
|
-
const arkExport = (_a = originalObject.getLazyExportInfo()) === null || _a === void 0 ? void 0 : _a.getArkExport();
|
|
691
|
-
const importClauseName = originalObject.getImportClauseName();
|
|
692
|
-
if (importClauseName.includes('.') && arkExport instanceof ArkClass_1.ArkClass) {
|
|
693
|
-
type = TypeInference_1.TypeInference.inferUnclearRefName(importClauseName, arkExport);
|
|
694
|
-
}
|
|
695
|
-
else if (arkExport) {
|
|
696
|
-
type = TypeInference_1.TypeInference.parseArkExport2Type(arkExport);
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
else if (originalObject instanceof Type_1.Type) {
|
|
700
|
-
type = TypeInference_1.TypeInference.inferUnclearedType(originalObject, arkMethod.getDeclaringArkClass());
|
|
701
|
-
}
|
|
702
|
-
else if (originalObject instanceof ArkField_1.ArkField) {
|
|
703
|
-
type = originalObject.getType();
|
|
704
|
-
}
|
|
705
|
-
else {
|
|
706
|
-
type = TypeInference_1.TypeInference.parseArkExport2Type(originalObject);
|
|
707
|
-
}
|
|
708
|
-
if (type) {
|
|
709
|
-
const realGenericTypes = value.getRealGenericTypes();
|
|
710
|
-
if (TypeInference_1.TypeInference.checkType(type, t => t instanceof Type_1.GenericType || t instanceof Type_1.AnyType) && realGenericTypes && realGenericTypes.length > 0) {
|
|
711
|
-
TypeInference_1.TypeInference.inferRealGenericTypes(realGenericTypes, arkMethod.getDeclaringArkClass());
|
|
712
|
-
type = TypeInference_1.TypeInference.replaceTypeWithReal(type, realGenericTypes);
|
|
713
|
-
}
|
|
714
|
-
value.setOriginalType(type);
|
|
715
|
-
if (Expr_1.AliasTypeExpr.isAliasTypeOriginalModel(originalLocal)) {
|
|
716
|
-
value.setOriginalObject(originalLocal);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
return undefined;
|
|
720
|
-
}
|
|
721
|
-
};
|
|
722
|
-
AliasTypeExprInference = __decorate([
|
|
723
|
-
Bind(InferLanguage.ARK_TS1_1)
|
|
724
|
-
], AliasTypeExprInference);
|
|
725
|
-
exports.AliasTypeExprInference = AliasTypeExprInference;
|
|
726
|
-
let ArkTSLocalInference = class ArkTSLocalInference extends LocalInference {
|
|
727
|
-
getValueName() {
|
|
728
|
-
return 'Local';
|
|
729
|
-
}
|
|
730
|
-
preInfer(value) {
|
|
731
|
-
const type = value.getType();
|
|
732
|
-
if (value.getName() === TSConst_1.THIS_NAME && type instanceof Type_1.ClassType &&
|
|
733
|
-
type.getClassSignature().getClassName().startsWith(Const_1.ANONYMOUS_CLASS_PREFIX)) {
|
|
734
|
-
return true;
|
|
735
|
-
}
|
|
736
|
-
else if (type instanceof Type_1.FunctionType) {
|
|
737
|
-
return true;
|
|
738
|
-
}
|
|
739
|
-
return super.preInfer(value);
|
|
740
|
-
}
|
|
741
|
-
infer(value, stmt) {
|
|
742
|
-
var _a;
|
|
743
|
-
const name = value.getName();
|
|
744
|
-
const type = value.getType();
|
|
745
|
-
const arkMethod = stmt.getCfg().getDeclaringMethod();
|
|
746
|
-
let newType;
|
|
747
|
-
if (name === TSConst_1.THIS_NAME) {
|
|
748
|
-
newType = (_a = IRInference_1.IRInference.inferThisLocal(arkMethod)) === null || _a === void 0 ? void 0 : _a.getType();
|
|
749
|
-
if (newType) {
|
|
750
|
-
value.setType(newType);
|
|
751
|
-
}
|
|
752
|
-
return undefined;
|
|
753
|
-
}
|
|
754
|
-
else if (type instanceof Type_1.FunctionType) {
|
|
755
|
-
const methodSignature = type.getMethodSignature();
|
|
756
|
-
methodSignature.getMethodSubSignature().getParameters().forEach(p => TypeInference_1.TypeInference.inferParameterType(p, arkMethod));
|
|
757
|
-
TypeInference_1.TypeInference.inferSignatureReturnType(methodSignature, arkMethod);
|
|
758
|
-
return undefined;
|
|
759
|
-
}
|
|
760
|
-
else {
|
|
761
|
-
newType = TypeInference_1.TypeInference.inferUnclearedType(type, arkMethod.getDeclaringArkClass());
|
|
762
|
-
}
|
|
763
|
-
if (newType) {
|
|
764
|
-
value.setType(newType);
|
|
765
|
-
return undefined;
|
|
766
|
-
}
|
|
767
|
-
return super.infer(value, stmt);
|
|
768
|
-
}
|
|
769
|
-
};
|
|
770
|
-
ArkTSLocalInference = __decorate([
|
|
771
|
-
Bind(InferLanguage.ARK_TS1_1)
|
|
772
|
-
], ArkTSLocalInference);
|
|
773
|
-
exports.ArkTSLocalInference = ArkTSLocalInference;
|
|
774
|
-
let AbcFieldRefInference = class AbcFieldRefInference extends FieldRefInference {
|
|
775
|
-
getValueName() {
|
|
776
|
-
return 'ArkInstanceFieldRef';
|
|
777
|
-
}
|
|
778
|
-
preInfer(value, stmt) {
|
|
779
|
-
const type = value.getType();
|
|
780
|
-
const projectName = stmt.getCfg().getDeclaringMethod().getDeclaringArkFile().getProjectName();
|
|
781
|
-
if (TypeInference_1.TypeInference.isAnonType(type, projectName)) {
|
|
782
|
-
const baseType = value.getBase().getType();
|
|
783
|
-
if (!TypeInference_1.TypeInference.isUnclearType(baseType) && !TypeInference_1.TypeInference.isAnonType(baseType, projectName)) {
|
|
784
|
-
return true;
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
return super.preInfer(value, stmt);
|
|
788
|
-
}
|
|
789
|
-
};
|
|
790
|
-
AbcFieldRefInference = __decorate([
|
|
791
|
-
Bind(InferLanguage.ABC)
|
|
792
|
-
], AbcFieldRefInference);
|
|
793
|
-
exports.AbcFieldRefInference = AbcFieldRefInference;
|