arkanalyzer 1.0.48 → 1.0.50

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.
@@ -8,5 +8,6 @@ export declare class ClassHierarchyAnalysis extends AbstractAnalysis {
8
8
  constructor(scene: Scene, cg: CallGraph, cb: CallGraphBuilder);
9
9
  resolveCall(callerMethod: NodeID, invokeStmt: Stmt): CallSite[];
10
10
  protected preProcessMethod(): CallSite[];
11
+ private checkSuperInvoke;
11
12
  }
12
13
  //# sourceMappingURL=ClassHierarchyAnalysis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA2DtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;CAI3C"}
1
+ {"version":3,"file":"ClassHierarchyAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/ClassHierarchyAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAGrE,qBAAa,sBAAuB,SAAQ,gBAAgB;gBAC5C,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,gBAAgB;IAKtD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA+DtE,SAAS,CAAC,gBAAgB,IAAI,QAAQ,EAAE;IAKxC,OAAO,CAAC,gBAAgB;CAU3B"}
@@ -24,6 +24,7 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
24
24
  }
25
25
  resolveCall(callerMethod, invokeStmt) {
26
26
  let invokeExpr = invokeStmt.getInvokeExpr();
27
+ const stmtDeclareClass = invokeStmt.getCfg().getDeclaringMethod().getDeclaringArkClass().getSignature();
27
28
  let resolveResult = [];
28
29
  if (!invokeExpr) {
29
30
  return [];
@@ -42,11 +43,12 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
42
43
  }
43
44
  else {
44
45
  let declareClass = calleeMethod.getDeclaringArkClass();
45
- // TODO: super class method should be placed at the end
46
+ // block super invoke
47
+ if (this.checkSuperInvoke(invokeStmt, declareClass, stmtDeclareClass)) {
48
+ resolveResult.push(this.cg.getCallSiteManager().newCallSite(invokeStmt, undefined, this.cg.getCallGraphNodeByMethod(calleeMethod.getSignature()).getID(), callerMethod));
49
+ return resolveResult;
50
+ }
46
51
  this.getClassHierarchy(declareClass).forEach((arkClass) => {
47
- if (arkClass.isAbstract()) {
48
- return;
49
- }
50
52
  let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
51
53
  if (possibleCalleeMethod &&
52
54
  possibleCalleeMethod.isGenerated() &&
@@ -65,5 +67,15 @@ class ClassHierarchyAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
65
67
  // do nothing
66
68
  return [];
67
69
  }
70
+ checkSuperInvoke(invokeStmt, declareClass, stmtDeclareClass) {
71
+ const invokeExpr = invokeStmt.getInvokeExpr();
72
+ if (invokeExpr instanceof Expr_1.ArkInstanceInvokeExpr) {
73
+ const baseLocalName = invokeExpr.getBase().getName();
74
+ if (baseLocalName === 'this' && declareClass.getSignature() !== stmtDeclareClass) {
75
+ return true;
76
+ }
77
+ }
78
+ return false;
79
+ }
68
80
  }
69
81
  exports.ClassHierarchyAnalysis = ClassHierarchyAnalysis;
@@ -1 +1 @@
1
- {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IAgEtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
1
+ {"version":3,"file":"RapidTypeAnalysis.d.ts","sourceRoot":"","sources":["../../../src/callgraph/algorithm/RapidTypeAnalysis.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,qBAAa,iBAAkB,SAAQ,gBAAgB;IAEnD,OAAO,CAAC,gBAAgB,CAAkC;IAE1D,OAAO,CAAC,YAAY,CAA2F;gBAEnG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS;IAIhC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,QAAQ,EAAE;IA4DtE,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAqBtD,OAAO,CAAC,+BAA+B;IA4BhC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;CAK/G"}
@@ -72,9 +72,6 @@ class RapidTypeAnalysis extends AbstractAnalysis_1.AbstractAnalysis {
72
72
  let declareClass = calleeMethod.getDeclaringArkClass();
73
73
  // TODO: super class method should be placed at the end
74
74
  this.getClassHierarchy(declareClass).forEach((arkClass) => {
75
- if (arkClass.isAbstract()) {
76
- return;
77
- }
78
75
  let possibleCalleeMethod = arkClass.getMethodWithName(calleeMethod.getName());
79
76
  if (possibleCalleeMethod && possibleCalleeMethod.isGenerated() &&
80
77
  arkClass.getSignature().toString() !== declareClass.getSignature().toString()) {
@@ -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;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "arkanalyzer",
3
- "version": "1.0.48",
4
- "commit_id": "95f81fb1",
3
+ "version": "1.0.50",
4
+ "commit_id": "21055a22",
5
5
  "files": [
6
6
  "docs",
7
7
  "lib",