arkanalyzer 1.0.47 → 1.0.49

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.
@@ -34,6 +34,7 @@ export declare class PTAStat extends StatTraits {
34
34
  endStat(): void;
35
35
  getNow(): number;
36
36
  private getInferedStat;
37
+ private getNotInferredUnknownStat;
37
38
  private getUnhandledFuncStat;
38
39
  getStat(): string;
39
40
  printStat(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAMrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAuCtB,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IAUjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;IAC3B,QAAQ,EAAE,MAAM,CAAK;IAEd,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAKf,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAoB1C,OAAO,IAAI,MAAM;CAa3B"}
1
+ {"version":3,"file":"Statistics.d.ts","sourceRoot":"","sources":["../../../src/callgraph/common/Statistics.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAQrE,uBAAe,UAAU;IACrB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,OAAO,EAAE,MAAM,CAAK;IAEb,OAAO,IAAI,MAAM;IAIjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,GAAG,EAAE,eAAe,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,iBAAiB,EAAE,MAAM,CAAK;IAC9B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,EAAE,MAAM,CAAK;IAExB,eAAe,EAAE,MAAM,CAAK;IAC5B,yBAAyB,EAAE,MAAM,CAAK;IACtC,oBAAoB,EAAE,MAAM,CAAK;IAGjC,sBAAsB,EAAE,MAAM,CAAK;IAEnC,uBAAuB,EAAE,MAAM,CAAK;IAEpC,wBAAwB,EAAE,MAAM,CAAK;IAErC,yBAAyB,EAAE,MAAM,CAAK;IACtC,gBAAgB,EAAE,MAAM,CAAK;IAE7B,SAAS,EAAE,MAAM,CAAK;IAEtB,aAAa,EAAE,GAAG,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;gBAET,GAAG,EAAE,eAAe;IAKzB,SAAS,IAAI,IAAI;IAKjB,OAAO,IAAI,IAAI;IAUf,MAAM,IAAI,MAAM;IAIvB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,yBAAyB;IA4BjC,OAAO,CAAC,oBAAoB;IAerB,OAAO,IAAI,MAAM;IAqBjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,OAAQ,SAAQ,UAAU;IACnC,cAAc,EAAE,MAAM,CAAK;IAC3B,gBAAgB,EAAE,MAAM,CAAK;IAC7B,YAAY,EAAE,MAAM,CAAK;IAElB,OAAO,IAAI,MAAM;IAUjB,SAAS,IAAI,IAAI;CAG3B;AAED,qBAAa,MAAO,SAAQ,UAAU;IAElC,YAAY,EAAE,MAAM,CAAK;IACzB,OAAO,EAAE,MAAM,CAAK;IACpB,UAAU,EAAE,MAAM,CAAK;IACvB,YAAY,EAAE,MAAM,CAAK;IACzB,cAAc,EAAE,MAAM,CAAK;IAC3B,QAAQ,EAAE,MAAM,CAAK;IAEd,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAKf,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAoB1C,OAAO,IAAI,MAAM;CAa3B"}
@@ -42,6 +42,8 @@ const Stmt_1 = require("../../core/base/Stmt");
42
42
  const Type_1 = require("../../core/base/Type");
43
43
  const CallGraph_1 = require("../model/CallGraph");
44
44
  const logger_1 = __importStar(require("../../utils/logger"));
45
+ const Local_1 = require("../../core/base/Local");
46
+ const Ref_1 = require("../../core/base/Ref");
45
47
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'PTA');
46
48
  const LABEL_WIDTH = 55;
47
49
  class StatTraits {
@@ -101,6 +103,40 @@ class PTAStat extends StatTraits {
101
103
  return new Date().getTime();
102
104
  }
103
105
  getInferedStat() {
106
+ let dm = this.pta.getTypeDiffMap();
107
+ for (let [v] of dm) {
108
+ if (v instanceof Local_1.Local) {
109
+ if (v.getName() === 'this') {
110
+ continue;
111
+ }
112
+ let s = v.getDeclaringStmt();
113
+ if (s instanceof Stmt_1.ArkAssignStmt &&
114
+ s.getLeftOp() instanceof Local_1.Local &&
115
+ s.getLeftOp().getName() === 'this' &&
116
+ s.getRightOp() instanceof Ref_1.ArkThisRef) {
117
+ continue;
118
+ }
119
+ if (v.getType() instanceof Type_1.UnknownType) {
120
+ this.numInferedUnknownValue++;
121
+ }
122
+ else {
123
+ this.numInferedDiffTypeValue++;
124
+ }
125
+ }
126
+ else {
127
+ if (v.getType() instanceof Type_1.UnknownType) {
128
+ this.numInferedUnknownValue++;
129
+ }
130
+ else {
131
+ this.numInferedDiffTypeValue++;
132
+ }
133
+ }
134
+ }
135
+ this.getNotInferredUnknownStat();
136
+ }
137
+ getNotInferredUnknownStat() {
138
+ let inferred = new Set(this.pta.getTypeDiffMap().keys());
139
+ let visited = new Set();
104
140
  let stmtStat = (s) => {
105
141
  if (!(s instanceof Stmt_1.ArkAssignStmt)) {
106
142
  return;
@@ -110,23 +146,11 @@ class PTAStat extends StatTraits {
110
146
  return;
111
147
  }
112
148
  visited.add(lop);
113
- if (inferred.includes(lop)) {
114
- if (lop.getType() instanceof Type_1.UnknownType) {
115
- this.numInferedUnknownValue++;
116
- }
117
- else {
118
- this.numInferedDiffTypeValue++;
119
- }
120
- }
121
- else {
122
- if (lop.getType() instanceof Type_1.UnknownType) {
123
- this.numNotInferedUnknownValue++;
124
- }
149
+ if (!inferred.has(lop) && lop.getType() instanceof Type_1.UnknownType) {
150
+ this.numNotInferedUnknownValue++;
125
151
  }
126
152
  this.totalValuesInVisitedFunc++;
127
153
  };
128
- let inferred = Array.from(this.pta.getTypeDiffMap().keys());
129
- let visited = new Set();
130
154
  let cg = this.pta.getCallGraph();
131
155
  this.pta.getHandledFuncs().forEach(funcID => {
132
156
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArkMethodBuilder.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/ArkMethodBuilder.ts"],"names":[],"mappings":"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"}
@@ -477,7 +477,9 @@ function replaceSuper2Constructor(constructor) {
477
477
  }
478
478
  const superConstructor = superClass.getMethodWithName(TSConst_1.CONSTRUCTOR_NAME);
479
479
  if (superConstructor === null) {
480
- logger.error(`Can not find constructor method for class ${superClass.getSignature().toString()}`);
480
+ if (needDefaultConstructorInClass(superClass)) {
481
+ logger.error(`Can not find constructor method for class ${superClass.getSignature().toString()}`);
482
+ }
481
483
  return;
482
484
  }
483
485
  const startingBlock = (_a = constructor.getBody()) === null || _a === void 0 ? void 0 : _a.getCfg().getStartingBlock();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arkanalyzer",
3
- "version": "1.0.47",
4
- "commit_id": "d68661f3",
3
+ "version": "1.0.49",
4
+ "commit_id": "4ee0dc84",
5
5
  "files": [
6
6
  "docs",
7
7
  "lib",