arkanalyzer 1.0.87 → 1.0.89

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 (143) hide show
  1. package/config/arkanalyzer.json +11 -0
  2. package/lib/Config.d.ts +27 -2
  3. package/lib/Config.d.ts.map +1 -1
  4. package/lib/Config.js +65 -2
  5. package/lib/Scene.d.ts +5 -2
  6. package/lib/Scene.d.ts.map +1 -1
  7. package/lib/Scene.js +34 -67
  8. package/lib/callgraph/pointerAnalysis/context/Context.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/context/Context.js +10 -12
  10. package/lib/callgraph/pointerAnalysis/plugins/WorkerPlugin.js +1 -1
  11. package/lib/cli/commands/cg.d.ts +27 -6
  12. package/lib/cli/commands/cg.d.ts.map +1 -1
  13. package/lib/cli/commands/cg.js +9 -6
  14. package/lib/core/base/Expr.js +3 -3
  15. package/lib/core/base/Position.d.ts +1 -1
  16. package/lib/core/base/Position.d.ts.map +1 -1
  17. package/lib/core/base/Position.js +2 -2
  18. package/lib/core/base/Type.d.ts.map +1 -1
  19. package/lib/core/base/Type.js +1 -2
  20. package/lib/core/common/Const.d.ts +1 -0
  21. package/lib/core/common/Const.d.ts.map +1 -1
  22. package/lib/core/common/Const.js +2 -1
  23. package/lib/core/common/IRInference.d.ts.map +1 -1
  24. package/lib/core/common/IRInference.js +1 -1
  25. package/lib/core/common/IRUtils.d.ts.map +1 -1
  26. package/lib/core/common/IRUtils.js +3 -33
  27. package/lib/core/common/ModelUtils.d.ts +6 -0
  28. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  29. package/lib/core/common/ModelUtils.js +30 -0
  30. package/lib/core/common/SdkUtils.js +1 -1
  31. package/lib/core/common/TypeInference.d.ts +13 -0
  32. package/lib/core/common/TypeInference.d.ts.map +1 -1
  33. package/lib/core/common/TypeInference.js +44 -0
  34. package/lib/core/common/ValueUtil.d.ts +1 -1
  35. package/lib/core/common/ValueUtil.d.ts.map +1 -1
  36. package/lib/core/common/ValueUtil.js +28 -12
  37. package/lib/core/graph/Cfg.d.ts.map +1 -1
  38. package/lib/core/graph/Cfg.js +0 -2
  39. package/lib/core/graph/DominanceFinder.d.ts +3 -0
  40. package/lib/core/graph/DominanceFinder.d.ts.map +1 -1
  41. package/lib/core/graph/DominanceFinder.js +42 -36
  42. package/lib/core/graph/DominanceTree.d.ts.map +1 -1
  43. package/lib/core/graph/DominanceTree.js +0 -4
  44. package/lib/core/inference/ValueInference.d.ts.map +1 -1
  45. package/lib/core/inference/ValueInference.js +3 -2
  46. package/lib/core/inference/abc/AbcInference.d.ts.map +1 -1
  47. package/lib/core/inference/abc/AbcInference.js +2 -1
  48. package/lib/core/inference/arkts/ArkTsInference.d.ts.map +1 -1
  49. package/lib/core/inference/arkts/ArkTsInference.js +3 -2
  50. package/lib/core/model/ArkClass.d.ts +3 -0
  51. package/lib/core/model/ArkClass.d.ts.map +1 -1
  52. package/lib/core/model/ArkClass.js +32 -6
  53. package/lib/core/model/ArkFile.d.ts.map +1 -1
  54. package/lib/core/model/ArkFile.js +0 -1
  55. package/lib/core/model/ArkMetadata.d.ts +32 -1
  56. package/lib/core/model/ArkMetadata.d.ts.map +1 -1
  57. package/lib/core/model/ArkMetadata.js +28 -3
  58. package/lib/core/model/builder/ArkMetadataBuilder.d.ts +21 -0
  59. package/lib/core/model/builder/ArkMetadataBuilder.d.ts.map +1 -0
  60. package/lib/core/model/builder/ArkMetadataBuilder.js +160 -0
  61. package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  62. package/lib/core/model/builder/ArkMethodBuilder.js +32 -26
  63. package/lib/frontend/FrontendBuilder.d.ts +26 -0
  64. package/lib/frontend/FrontendBuilder.d.ts.map +1 -0
  65. package/lib/frontend/FrontendBuilder.js +108 -0
  66. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +16 -0
  67. package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -0
  68. package/lib/frontend/arktsFrontend/ArktsFrontend.js +52 -0
  69. package/lib/frontend/cppFrontend/CppFrontend.d.ts +13 -0
  70. package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -0
  71. package/lib/frontend/cppFrontend/CppFrontend.js +85 -0
  72. package/lib/frontend/cppFrontend/ast/index.d.ts +5 -0
  73. package/lib/frontend/cppFrontend/ast/index.d.ts.map +1 -0
  74. package/lib/frontend/cppFrontend/ast/index.js +31 -0
  75. package/lib/frontend/cppFrontend/ast/ts/ArkCxxAstNode.d.ts.map +1 -0
  76. package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts +25 -0
  77. package/lib/frontend/cppFrontend/ast/ts/astParser.d.ts.map +1 -0
  78. package/lib/frontend/cppFrontend/ast/ts/astParser.js +280 -0
  79. package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts +18 -0
  80. package/lib/frontend/cppFrontend/ast/ts/astUtils.d.ts.map +1 -0
  81. package/lib/frontend/cppFrontend/ast/ts/astUtils.js +158 -0
  82. package/lib/frontend/cppFrontend/ast/{const.d.ts → ts/const.d.ts} +0 -13
  83. package/lib/frontend/cppFrontend/ast/ts/const.d.ts.map +1 -0
  84. package/lib/frontend/cppFrontend/ast/ts/const.js +58 -0
  85. package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts +8 -0
  86. package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.d.ts.map +1 -0
  87. package/lib/frontend/cppFrontend/ast/ts/napi/napiApi.js +90 -0
  88. package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts +8 -0
  89. package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.d.ts.map +1 -0
  90. package/lib/frontend/cppFrontend/ast/ts/napi/napiRunner.js +180 -0
  91. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts +1 -1
  92. package/lib/frontend/cppFrontend/common/ArkIRTransformer.d.ts.map +1 -1
  93. package/lib/frontend/cppFrontend/common/ArkIRTransformer.js +55 -55
  94. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts +1 -1
  95. package/lib/frontend/cppFrontend/common/ArkValueTransformer.d.ts.map +1 -1
  96. package/lib/frontend/cppFrontend/common/ArkValueTransformer.js +151 -151
  97. package/lib/frontend/cppFrontend/common/IRInference.js +2 -2
  98. package/lib/frontend/cppFrontend/common/IRUtils.d.ts +1 -1
  99. package/lib/frontend/cppFrontend/common/IRUtils.d.ts.map +1 -1
  100. package/lib/frontend/cppFrontend/common/IRUtils.js +2 -2
  101. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts +1 -1
  102. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.d.ts.map +1 -1
  103. package/lib/frontend/cppFrontend/graph/builder/CfgBuilder.js +74 -74
  104. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts +1 -1
  105. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.d.ts.map +1 -1
  106. package/lib/frontend/cppFrontend/model/builder/ArkClassBuilder.js +3 -3
  107. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts +1 -1
  108. package/lib/frontend/cppFrontend/model/builder/ArkFieldBuilder.d.ts.map +1 -1
  109. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +1 -1
  110. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
  111. package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +16 -17
  112. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts +1 -1
  113. package/lib/frontend/cppFrontend/model/builder/ArkImportBuilder.d.ts.map +1 -1
  114. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts +1 -1
  115. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.d.ts.map +1 -1
  116. package/lib/frontend/cppFrontend/model/builder/ArkMethodBuilder.js +2 -2
  117. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts +1 -1
  118. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
  119. package/lib/frontend/cppFrontend/model/builder/ArkNamespaceBuilder.js +2 -2
  120. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts +1 -1
  121. package/lib/frontend/cppFrontend/model/builder/BodyBuilder.d.ts.map +1 -1
  122. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts +1 -1
  123. package/lib/frontend/cppFrontend/model/builder/builderUtils.d.ts.map +1 -1
  124. package/lib/frontend/cppFrontend/model/builder/builderUtils.js +3 -3
  125. package/lib/index.d.ts +5 -2
  126. package/lib/index.d.ts.map +1 -1
  127. package/lib/index.js +14 -6
  128. package/lib/pass/Dispatcher.d.ts.map +1 -1
  129. package/lib/pass/Dispatcher.js +0 -4
  130. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  131. package/lib/save/source/SourceStmt.js +3 -1
  132. package/lib/utils/FileUtils.d.ts +1 -0
  133. package/lib/utils/FileUtils.d.ts.map +1 -1
  134. package/lib/utils/FileUtils.js +11 -3
  135. package/package.json +9 -4
  136. package/lib/frontend/cppFrontend/ast/ArkCxxAstNode.d.ts.map +0 -1
  137. package/lib/frontend/cppFrontend/ast/astUtils.d.ts +0 -51
  138. package/lib/frontend/cppFrontend/ast/astUtils.d.ts.map +0 -1
  139. package/lib/frontend/cppFrontend/ast/astUtils.js +0 -470
  140. package/lib/frontend/cppFrontend/ast/const.d.ts.map +0 -1
  141. package/lib/frontend/cppFrontend/ast/const.js +0 -134
  142. /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.d.ts → ts/ArkCxxAstNode.d.ts} +0 -0
  143. /package/lib/frontend/cppFrontend/ast/{ArkCxxAstNode.js → ts/ArkCxxAstNode.js} +0 -0
@@ -6,6 +6,17 @@
6
6
  ".d.ets",
7
7
  ".d.ts"
8
8
  ],
9
+ "languages": {
10
+ "arkts": {
11
+ "enabled": true,
12
+ "extensions": [".ets", ".ts", ".js", ".d.ets", ".d.ts"]
13
+ },
14
+ "cpp": {
15
+ "enabled": false,
16
+ "sourceExtensions": [".cc", ".cpp", ".cxx", ".c", ".c++"],
17
+ "headerExtensions": [".hpp", ".h", ".hxx", ".hh"]
18
+ }
19
+ },
9
20
  "enableLeadingComments": false,
10
21
  "enableBuiltIn": true,
11
22
  "enableOhModulesBody": false,
package/lib/Config.d.ts CHANGED
@@ -23,19 +23,40 @@ export interface TsConfig {
23
23
  *
24
24
  * @param project Project root directory path.
25
25
  * @param ohosSdkHome Optional OHOS SDK home path.
26
+ * @param options Optional SceneOptions.
26
27
  * @returns SceneConfig initialized with project files and discovered SDKs.
27
28
  */
28
- export declare function buildSceneConfigFromProject(project: string, ohosSdkHome?: string): SceneConfig;
29
- export type SceneOptionsValue = string | number | boolean | (string | number)[] | string[] | null | undefined;
29
+ export declare function buildSceneConfigFromProject(project: string, ohosSdkHome?: string, options?: SceneOptions): SceneConfig;
30
+ /**
31
+ * Per-language switch and optional file extension list (for tooling and front-end selection; extension lists are
32
+ * normalized for discovery and future use).
33
+ */
34
+ export interface LanguageOptions {
35
+ enabled?: boolean;
36
+ extensions?: string[];
37
+ }
38
+ export interface CppLanguageOptions extends LanguageOptions {
39
+ sourceExtensions?: string[];
40
+ headerExtensions?: string[];
41
+ }
42
+ export interface SceneLanguagesOptions {
43
+ arkts?: LanguageOptions;
44
+ cpp?: CppLanguageOptions;
45
+ [option: string]: LanguageOptions | undefined;
46
+ }
47
+ export type SceneOptionsValue = string | number | boolean | (string | number)[] | string[] | SceneLanguagesOptions | null | undefined;
30
48
  export interface SceneOptions {
31
49
  supportFileExts?: string[];
32
50
  ignoreFileNames?: string[];
33
51
  enableLeadingComments?: boolean;
34
52
  enableTrailingComments?: boolean;
53
+ enableJSDoc?: boolean;
35
54
  enableBuiltIn?: boolean;
36
55
  tsconfig?: string;
37
56
  isScanAbc?: boolean;
38
57
  sdkGlobalFolders?: string[];
58
+ /** Optional multi-language front-end section; defaults are merged in {@link SceneConfig} construction. */
59
+ languages?: SceneLanguagesOptions;
39
60
  [option: string]: SceneOptionsValue;
40
61
  }
41
62
  export declare class SceneConfig {
@@ -105,5 +126,9 @@ export declare class SceneConfig {
105
126
  getSdksObj(): Sdk[];
106
127
  private getDefaultConfigPath;
107
128
  private loadDefaultConfig;
129
+ private appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable;
130
+ private normalizeLanguageOptions;
131
+ private mergeEnabledLanguageExtensionsIntoSupportFileExts;
132
+ private uniqueFileExtensions;
108
133
  }
109
134
  //# sourceMappingURL=Config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"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"}
package/lib/Config.js CHANGED
@@ -46,6 +46,7 @@ const path_1 = __importDefault(require("path"));
46
46
  const logger_1 = __importStar(require("./utils/logger"));
47
47
  const getAllFiles_1 = require("./utils/getAllFiles");
48
48
  const FileUtils_1 = require("./utils/FileUtils");
49
+ const ast_1 = require("./frontend/cppFrontend/ast");
49
50
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
50
51
  function collectSdksFromOhosSdkHome(explicitHome) {
51
52
  const sdkHome = explicitHome || process.env.OHOS_SDK_HOME;
@@ -74,10 +75,11 @@ function collectSdksFromOhosSdkHome(explicitHome) {
74
75
  *
75
76
  * @param project Project root directory path.
76
77
  * @param ohosSdkHome Optional OHOS SDK home path.
78
+ * @param options Optional SceneOptions.
77
79
  * @returns SceneConfig initialized with project files and discovered SDKs.
78
80
  */
79
- function buildSceneConfigFromProject(project, ohosSdkHome) {
80
- const config = new SceneConfig();
81
+ function buildSceneConfigFromProject(project, ohosSdkHome, options) {
82
+ const config = new SceneConfig(options);
81
83
  const sdks = collectSdksFromOhosSdkHome(ohosSdkHome);
82
84
  config.buildConfig(path_1.default.basename(project), project, sdks);
83
85
  return config;
@@ -85,6 +87,7 @@ function buildSceneConfigFromProject(project, ohosSdkHome) {
85
87
  exports.buildSceneConfigFromProject = buildSceneConfigFromProject;
86
88
  const CONFIG_FILENAME = 'arkanalyzer.json';
87
89
  const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
90
+ const CPP_SOURCE_FILE_EXTS = (0, ast_1.getCxxSourceFileExtensions)();
88
91
  class SceneConfig {
89
92
  constructor(options) {
90
93
  this.targetProjectName = '';
@@ -101,6 +104,9 @@ class SceneConfig {
101
104
  // Seed defaults before merging `config/arkanalyzer.json`. Same values remain if that file is missing or invalid.
102
105
  this.options = { supportFileExts: ['.ets', '.ts'] };
103
106
  this.loadDefaultConfig(options);
107
+ this.appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable();
108
+ this.normalizeLanguageOptions();
109
+ this.mergeEnabledLanguageExtensionsIntoSupportFileExts();
104
110
  }
105
111
  getOptions() {
106
112
  return this.options;
@@ -226,6 +232,8 @@ class SceneConfig {
226
232
  if (configurations.options) {
227
233
  this.options = Object.assign(Object.assign({}, this.options), configurations.options);
228
234
  }
235
+ this.normalizeLanguageOptions();
236
+ this.mergeEnabledLanguageExtensionsIntoSupportFileExts();
229
237
  this.buildConfig(targetProjectName, targetProjectDirectory, sdks);
230
238
  }
231
239
  else {
@@ -312,5 +320,60 @@ class SceneConfig {
312
320
  this.options = Object.assign(Object.assign({}, this.options), options);
313
321
  }
314
322
  }
323
+ appendCppExtsToDefaultOptionsIfAstJsonDumperAvailable() {
324
+ if (!(0, ast_1.isAstJsonDumperAvailable)()) {
325
+ return;
326
+ }
327
+ const configuredExts = Array.isArray(this.options.supportFileExts) ? this.options.supportFileExts : [];
328
+ const missingCppExts = CPP_SOURCE_FILE_EXTS.filter(ext => !configuredExts.includes(ext));
329
+ if (missingCppExts.length === 0) {
330
+ return;
331
+ }
332
+ this.options.supportFileExts = [...configuredExts, ...missingCppExts];
333
+ }
334
+ normalizeLanguageOptions() {
335
+ var _a, _b, _c, _d;
336
+ const from = this.options.languages;
337
+ if (!from) {
338
+ return;
339
+ }
340
+ const normalized = {};
341
+ if (from.arkts) {
342
+ normalized.arkts = Object.assign(Object.assign({}, from.arkts), { extensions: this.uniqueFileExtensions((_a = from.arkts.extensions) !== null && _a !== void 0 ? _a : []) });
343
+ }
344
+ if (from.cpp) {
345
+ normalized.cpp = Object.assign(Object.assign({}, from.cpp), { extensions: this.uniqueFileExtensions((_b = from.cpp.extensions) !== null && _b !== void 0 ? _b : []), sourceExtensions: this.uniqueFileExtensions((_c = from.cpp.sourceExtensions) !== null && _c !== void 0 ? _c : []), headerExtensions: this.uniqueFileExtensions((_d = from.cpp.headerExtensions) !== null && _d !== void 0 ? _d : []) });
346
+ }
347
+ this.options.languages = normalized;
348
+ }
349
+ mergeEnabledLanguageExtensionsIntoSupportFileExts() {
350
+ var _a, _b, _c, _d, _e, _f, _g;
351
+ const languages = this.options.languages;
352
+ if (!languages) {
353
+ return;
354
+ }
355
+ const merged = [...((_a = this.options.supportFileExts) !== null && _a !== void 0 ? _a : [])];
356
+ if (((_b = languages.arkts) === null || _b === void 0 ? void 0 : _b.enabled) === true) {
357
+ merged.push(...((_c = languages.arkts.extensions) !== null && _c !== void 0 ? _c : []));
358
+ }
359
+ if (((_d = languages.cpp) === null || _d === void 0 ? void 0 : _d.enabled) === true) {
360
+ merged.push(...((_e = languages.cpp.extensions) !== null && _e !== void 0 ? _e : []));
361
+ merged.push(...((_f = languages.cpp.sourceExtensions) !== null && _f !== void 0 ? _f : []));
362
+ merged.push(...((_g = languages.cpp.headerExtensions) !== null && _g !== void 0 ? _g : []));
363
+ }
364
+ this.options.supportFileExts = this.uniqueFileExtensions(merged);
365
+ }
366
+ uniqueFileExtensions(extensions) {
367
+ const seen = new Set();
368
+ const out = [];
369
+ for (const ext of extensions) {
370
+ const normalized = ext.toLowerCase();
371
+ if (!seen.has(normalized)) {
372
+ seen.add(normalized);
373
+ out.push(normalized);
374
+ }
375
+ }
376
+ return out;
377
+ }
315
378
  }
316
379
  exports.SceneConfig = SceneConfig;
package/lib/Scene.d.ts CHANGED
@@ -101,10 +101,9 @@ export declare class Scene {
101
101
  */
102
102
  private updateOrAddDefaultConstructors;
103
103
  private buildAllMethodBody;
104
- private findCCJsonPath;
105
104
  private genArkFiles;
106
105
  private getFilesOrderByDependency;
107
- private getDependencyFilesDeeply;
106
+ getDependencyFilesDeeply(projectFile: string): void;
108
107
  private isRepeatBuildFile;
109
108
  private addArkFile2ModuleScene;
110
109
  private findDependencyFiles;
@@ -153,6 +152,7 @@ export declare class Scene {
153
152
  getProjectName(): string;
154
153
  getProjectFiles(): string[];
155
154
  getSdkGlobal(globalName: string): ArkExport | null;
155
+ getSdkGlobalMap(): Map<string, ArkExport>;
156
156
  /**
157
157
  * Returns the file based on its signature.
158
158
  * If no file can be found according to the input signature, **null** will be returned.
@@ -174,6 +174,7 @@ export declare class Scene {
174
174
  */
175
175
  getFile(fileSignature: FileSignature): ArkFile | null;
176
176
  getUnhandledFilePaths(): string[];
177
+ addUnhandledFilePath(filePath: string): void;
177
178
  getUnhandledSdkFilePaths(): string[];
178
179
  setFile(file: ArkFile): void;
179
180
  hasSdkFile(fileSignature: FileSignature): boolean;
@@ -271,6 +272,7 @@ export declare class Scene {
271
272
  /** Obtain the header file directories of the input C++ project dependencies. */
272
273
  getIncludeDirs(): string[];
273
274
  getCcjsonPath(): string;
275
+ setCcjsonPath(ccjsonPath: string): void;
274
276
  getCppAstPath(): string;
275
277
  /**
276
278
  * Infer type for each non-default method. It infers the type of each field/local/reference.
@@ -333,6 +335,7 @@ export declare class ModuleScene {
333
335
  private moduleOhPkgFilePath;
334
336
  private ohPkgContent;
335
337
  constructor(projectScene: Scene);
338
+ getProjectScene(): Scene;
336
339
  ModuleSceneBuilder(moduleName: string, modulePath: string, supportFileExts: string[], recursively?: boolean): void;
337
340
  ModuleScenePartiallyBuilder(moduleName: string, modulePath: string): void;
338
341
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
package/lib/Scene.js CHANGED
@@ -50,19 +50,18 @@ const ArkFile_1 = require("./core/model/ArkFile");
50
50
  const ArkNamespace_1 = require("./core/model/ArkNamespace");
51
51
  const ArkSignature_1 = require("./core/model/ArkSignature");
52
52
  const logger_1 = __importStar(require("./utils/logger"));
53
- const ArkFileBuilder_1 = require("./core/model/builder/ArkFileBuilder");
54
53
  const json5parser_1 = require("./utils/json5parser");
55
54
  const getAllFiles_1 = require("./utils/getAllFiles");
56
55
  const FileUtils_1 = require("./utils/FileUtils");
57
56
  const ArkExport_1 = require("./core/model/ArkExport");
58
57
  const ArkMethodBuilder_1 = require("./core/model/builder/ArkMethodBuilder");
59
58
  const ArkMethodBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkMethodBuilder");
60
- const const_1 = require("./frontend/cppFrontend/ast/const");
61
59
  const Const_1 = require("./core/common/Const");
62
60
  const CallGraph_1 = require("./callgraph/model/CallGraph");
63
61
  const CallGraphBuilder_1 = require("./callgraph/model/builder/CallGraphBuilder");
64
- const ArkFileBuilder_2 = require("./frontend/cppFrontend/model/builder/ArkFileBuilder");
65
62
  const IRInference_1 = require("./frontend/cppFrontend/common/IRInference");
63
+ const ArktsFrontend_1 = require("./frontend/arktsFrontend/ArktsFrontend");
64
+ const FrontendBuilder_1 = require("./frontend/FrontendBuilder");
66
65
  const TSConst_1 = require("./core/common/TSConst");
67
66
  const EtsConst_1 = require("./core/common/EtsConst");
68
67
  const SdkUtils_1 = require("./core/common/SdkUtils");
@@ -70,10 +69,8 @@ const PointerAnalysisConfig_1 = require("./callgraph/pointerAnalysis/PointerAnal
70
69
  const ValueUtil_1 = require("./core/common/ValueUtil");
71
70
  const Inference_1 = require("./core/inference/Inference");
72
71
  const IRInference_2 = require("./core/common/IRInference");
73
- const astUtils_1 = require("./frontend/cppFrontend/ast/astUtils");
74
72
  const ModuleUtils_1 = require("./utils/ModuleUtils");
75
73
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
76
- const CXX_HEADER_EXTENSION_SET = (0, const_1.getCxxHeaderFileExtensionSet)();
77
74
  var SceneBuildStage;
78
75
  (function (SceneBuildStage) {
79
76
  SceneBuildStage[SceneBuildStage["BUILD_INIT"] = 0] = "BUILD_INIT";
@@ -406,37 +403,8 @@ class Scene {
406
403
  ModelUtils_1.ModelUtils.dispose();
407
404
  this.buildStage = SceneBuildStage.METHOD_DONE;
408
405
  }
409
- findCCJsonPath(file, ccjsonPath) {
410
- const ext = path_1.default.extname(file).toLowerCase();
411
- const isHeader = CXX_HEADER_EXTENSION_SET.has(ext);
412
- let currentCcjsonPath = '';
413
- if (!isHeader) {
414
- currentCcjsonPath = (0, astUtils_1.findCompileCommands)(file);
415
- }
416
- return currentCcjsonPath === '' ? ccjsonPath : currentCcjsonPath;
417
- }
418
406
  genArkFiles() {
419
- this.projectFiles.forEach(file => {
420
- logger.trace('=== parse file:', file);
421
- try {
422
- const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
423
- arkFile.setScene(this);
424
- // CXXTodo: Distinguish between C++ and TS/ArkTS. Call different builder functions based on file language.
425
- if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
426
- this.ccjsonPath = this.findCCJsonPath(file, this.ccjsonPath);
427
- (0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName, this.includeDirs);
428
- }
429
- else {
430
- (0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.realProjectDir, arkFile, this.projectName);
431
- }
432
- this.setFile(arkFile);
433
- }
434
- catch (error) {
435
- logger.error('Error parsing file:', file, error);
436
- this.unhandledFilePaths.add(file);
437
- return;
438
- }
439
- });
407
+ FrontendBuilder_1.FrontendBuilder.buildFilesIntoArkFiles(this, this.projectFiles);
440
408
  this.buildAllMethodBody();
441
409
  this.updateOrAddDefaultConstructors();
442
410
  }
@@ -460,13 +428,7 @@ class Scene {
460
428
  try {
461
429
  const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(projectFile, this.fileLanguages));
462
430
  arkFile.setScene(this);
463
- // CXXTodo: Distinguish between C++ and TS/ArkTS.
464
- if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
465
- (0, ArkFileBuilder_2.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName(), this.includeDirs);
466
- }
467
- else {
468
- (0, ArkFileBuilder_1.buildArkFileFromFile)(projectFile, this.getRealProjectDir(), arkFile, this.getProjectName());
469
- }
431
+ FrontendBuilder_1.FrontendBuilder.buildProjectFileIntoArkFile(this, projectFile, arkFile);
470
432
  for (const [modulePath, moduleName] of this.modulePath2NameMap) {
471
433
  if (arkFile.getFilePath().startsWith(modulePath)) {
472
434
  this.addArkFile2ModuleScene(modulePath, moduleName, arkFile);
@@ -488,10 +450,10 @@ class Scene {
488
450
  }
489
451
  }
490
452
  isRepeatBuildFile(projectFile) {
491
- for (const [key, file] of this.filesMap) {
492
- if (key && file.getFilePath().toLowerCase() === projectFile.toLowerCase()) {
493
- return true;
494
- }
453
+ const relativePath = path_1.default.relative(this.getRealProjectDir(), projectFile);
454
+ if (!relativePath.startsWith('..') && !path_1.default.isAbsolute(relativePath)) {
455
+ const mapKey = (0, FileUtils_1.getFileSignatureMapKey)(this.getProjectName(), relativePath);
456
+ return this.filesMap.has(mapKey);
495
457
  }
496
458
  return false;
497
459
  }
@@ -696,12 +658,22 @@ class Scene {
696
658
  try {
697
659
  const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages));
698
660
  arkFile.setScene(this);
699
- (0, ArkFileBuilder_1.buildArkFileFromFile)(file, sdkPath, arkFile, sdkName);
661
+ ArktsFrontend_1.ArktsFrontend.buildArkFileFromSdkPath(file, sdkPath, arkFile, sdkName);
700
662
  ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile).forEach(cls => {
701
663
  var _a, _b;
702
664
  (_a = cls.getDefaultArkMethod()) === null || _a === void 0 ? void 0 : _a.buildBody();
703
665
  (_b = cls.getDefaultArkMethod()) === null || _b === void 0 ? void 0 : _b.freeBodyBuilder();
704
666
  });
667
+ // Release all method builders in SDK file to avoid retaining AST/build context in memory.
668
+ ModelUtils_1.ModelUtils.getAllMethodsInFile(arkFile).forEach(method => {
669
+ var _a;
670
+ if (((_a = method.getDeclaringArkFile()) === null || _a === void 0 ? void 0 : _a.getLanguage()) === ArkFile_1.Language.CXX) {
671
+ method.freeCxxBodyBuilder();
672
+ }
673
+ else {
674
+ method.freeBodyBuilder();
675
+ }
676
+ });
705
677
  const fileSig = arkFile.getFileSignature().toMapKey();
706
678
  this.sdkArkFilesMap.set(fileSig, arkFile);
707
679
  SdkUtils_1.SdkUtils.buildSdkImportMap(arkFile);
@@ -805,6 +777,9 @@ class Scene {
805
777
  getSdkGlobal(globalName) {
806
778
  return this.sdkGlobalMap.get(globalName) || null;
807
779
  }
780
+ getSdkGlobalMap() {
781
+ return this.sdkGlobalMap;
782
+ }
808
783
  /**
809
784
  * Returns the file based on its signature.
810
785
  * If no file can be found according to the input signature, **null** will be returned.
@@ -838,6 +813,9 @@ class Scene {
838
813
  getUnhandledFilePaths() {
839
814
  return Array.from(this.unhandledFilePaths);
840
815
  }
816
+ addUnhandledFilePath(filePath) {
817
+ this.unhandledFilePaths.add(filePath);
818
+ }
841
819
  /*
842
820
  * Returns the absolute sdk file paths that cannot be handled currently.
843
821
  */
@@ -1094,6 +1072,9 @@ class Scene {
1094
1072
  getCcjsonPath() {
1095
1073
  return this.ccjsonPath;
1096
1074
  }
1075
+ setCcjsonPath(ccjsonPath) {
1076
+ this.ccjsonPath = ccjsonPath;
1077
+ }
1097
1078
  getCppAstPath() {
1098
1079
  return this.cppAstPath;
1099
1080
  }
@@ -1119,6 +1100,7 @@ class Scene {
1119
1100
  }
1120
1101
  SdkUtils_1.SdkUtils.dispose();
1121
1102
  ModuleUtils_1.ModuleUtils.dispose();
1103
+ ValueUtil_1.ValueUtil.dispose();
1122
1104
  }
1123
1105
  /**
1124
1106
  * @deprecated This method is deprecated and will be removed in the next major release.
@@ -1458,6 +1440,9 @@ class ModuleScene {
1458
1440
  this.ohPkgContent = {};
1459
1441
  this.projectScene = projectScene;
1460
1442
  }
1443
+ getProjectScene() {
1444
+ return this.projectScene;
1445
+ }
1461
1446
  ModuleSceneBuilder(moduleName, modulePath, supportFileExts, recursively = false) {
1462
1447
  this.moduleName = moduleName;
1463
1448
  this.modulePath = modulePath;
@@ -1512,26 +1497,8 @@ class ModuleScene {
1512
1497
  this.moduleFileMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
1513
1498
  }
1514
1499
  genArkFiles(supportFileExts) {
1515
- (0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames).forEach(file => {
1516
- logger.trace('=== parse file:', file);
1517
- try {
1518
- const arkFile = new ArkFile_1.ArkFile(FileUtils_1.FileUtils.getFileLanguage(file, this.projectScene.getFileLanguages()));
1519
- arkFile.setScene(this.projectScene);
1520
- arkFile.setModuleScene(this);
1521
- if (arkFile.getLanguage() === ArkFile_1.Language.CXX) {
1522
- (0, ArkFileBuilder_2.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName(), this.projectScene.getIncludeDirs());
1523
- }
1524
- else {
1525
- (0, ArkFileBuilder_1.buildArkFileFromFile)(file, this.projectScene.getRealProjectDir(), arkFile, this.projectScene.getProjectName());
1526
- }
1527
- this.projectScene.setFile(arkFile);
1528
- }
1529
- catch (error) {
1530
- logger.error('Error parsing file:', file, error);
1531
- this.projectScene.getUnhandledFilePaths().push(file);
1532
- return;
1533
- }
1534
- });
1500
+ const filePaths = (0, getAllFiles_1.getAllFiles)(this.modulePath, supportFileExts, this.projectScene.getOptions().ignoreFileNames);
1501
+ FrontendBuilder_1.FrontendBuilder.buildModuleFilesIntoArkFiles(this, filePaths);
1535
1502
  }
1536
1503
  }
1537
1504
  exports.ModuleScene = ModuleScene;
@@ -1 +1 @@
1
- {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,cAAc,CAAkC;;IAOjD,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAa9C,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO;IAY/E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IASrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAO3C,cAAc,IAAI,OAAO,EAAE;IAI3B,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D"}
1
+ {"version":3,"file":"Context.d.ts","sourceRoot":"","sources":["../../../../src/callgraph/pointerAnalysis/context/Context.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAuB,kBAAkB,EAAmB,MAAM,eAAe,CAAC;AAEzF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,eAAO,MAAM,SAAS,IAAI,CAAC;AAI3B,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;GAGG;AACH,8BAAsB,OAAO;IACzB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;gBAErB,YAAY,GAAE,MAAM,EAAO;IAQvC;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAIxD;;;;;OAKG;IACH,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;IAI1F;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAgBnF;;;;;OAKG;IACH,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC;IAcxD,MAAM,IAAI,MAAM;IAIhB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1B,QAAQ,IAAI,MAAM;aAKT,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO;aACxF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CACrE;AAED,qBAAa,eAAgB,SAAQ,OAAO;IACjC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,eAAe;IAKjG,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,UAAW,SAAQ,OAAO;IAC5B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,UAAU;IAKvF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAI5D;AAED,qBAAa,WAAY,SAAQ,OAAO;IAC7B,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAKzF,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAS5D;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,cAAc,CAAsB;;IAOrC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAa9C,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,OAAO;IAY/E,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;IASrD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAO3C,cAAc,IAAI,OAAO,EAAE;IAI3B,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM;CAQ5D"}
@@ -110,13 +110,13 @@ class CallSiteContext extends Context {
110
110
  return Context.newKLimitedContext(this, contextItem.id, k);
111
111
  }
112
112
  dump(m, cg) {
113
- let content = '';
113
+ const contentParts = [];
114
114
  for (let i = 0; i < this.length(); i++) {
115
115
  const item = m.getItem(this.get(i));
116
116
  const callSiteInfo = cg.getCallSiteInfo(item.callSiteId);
117
- content += `\t[${callSiteInfo}]\n`;
117
+ contentParts.push(`\t[${callSiteInfo}]\n`);
118
118
  }
119
- return content;
119
+ return contentParts.join('');
120
120
  }
121
121
  }
122
122
  exports.CallSiteContext = CallSiteContext;
@@ -137,13 +137,13 @@ class FuncContext extends Context {
137
137
  return Context.newKLimitedContext(this, contextItem.id, k);
138
138
  }
139
139
  dump(m, cg) {
140
- let content = '';
140
+ const contentParts = [];
141
141
  for (let i = 0; i < this.length(); i++) {
142
142
  const item = m.getItem(this.get(i));
143
143
  const methodSig = cg.getMethodByFuncID(item.funcID).toString();
144
- content += `\t[${methodSig}]\n`;
144
+ contentParts.push(`\t[${methodSig}]\n`);
145
145
  }
146
- return content;
146
+ return contentParts.join('');
147
147
  }
148
148
  }
149
149
  exports.FuncContext = FuncContext;
@@ -151,8 +151,6 @@ class ContextCache {
151
151
  constructor() {
152
152
  this.contextList = [];
153
153
  this.contextToIDMap = new Map();
154
- this.contextList = [];
155
- this.contextToIDMap = new Map();
156
154
  }
157
155
  getOrNewContextID(context) {
158
156
  let cStr = context.toString();
@@ -195,12 +193,12 @@ class ContextCache {
195
193
  return this.contextList;
196
194
  }
197
195
  dump(m, cg) {
198
- let content = '';
196
+ const contentParts = [];
199
197
  this.contextList.forEach((c, i) => {
200
- content += `Context ${i}:\n`;
201
- content += `${c.dump(m, cg)}\n`;
198
+ contentParts.push(`Context ${i}:\n`);
199
+ contentParts.push(`${c.dump(m, cg)}\n`);
202
200
  });
203
- return content;
201
+ return contentParts.join('');
204
202
  }
205
203
  }
206
204
  exports.ContextCache = ContextCache;
@@ -159,7 +159,7 @@ class WorkerPlugin {
159
159
  getFileByPath(callstmt, filePath) {
160
160
  let declaringarkfile = callstmt.getCfg().getDeclaringMethod().getDeclaringArkClass().getDeclaringArkFile();
161
161
  const scene = declaringarkfile.getScene();
162
- let filepath = filePath.toString().replace('../', '').replace('./', '').replace("'", '').replace("'", '');
162
+ let filepath = filePath.toString().replace(/^(?:\.\.\/|\.\/)|'/g, '');
163
163
  filepath = filepath.substring(filepath.indexOf('ets'));
164
164
  if (/\.e?ts$/.test(filepath)) {
165
165
  const fileSignature = new __1.FileSignature(declaringarkfile.getFileSignature().getProjectName(), filepath);
@@ -5,18 +5,38 @@ export type CgAlgorithm = 'cha' | 'rta';
5
5
  export type CgFormat = 'json' | 'text' | 'dot' | 'csv';
6
6
  export type CgDirection = 'forward' | 'backward';
7
7
  export type CgEdgeFilter = 'call' | 'virtual' | 'interface' | 'all';
8
- export interface RawCgCommandOptions {
9
- algorithm: string;
8
+ export interface CgCommandOptions {
9
+ algorithm: CgAlgorithm;
10
10
  output: string;
11
- format: string;
11
+ format: CgFormat;
12
12
  entry: string[];
13
13
  reachableFrom: string[];
14
- direction: string;
15
- edges: string;
14
+ direction: CgDirection;
15
+ edges: CgEdgeFilter;
16
16
  ohosSdkHome?: string;
17
17
  }
18
+ interface CgEdgeRow {
19
+ src: string;
20
+ dst: string;
21
+ type: Exclude<CgEdgeFilter, 'all'>;
22
+ }
23
+ export interface CgAnalyzeResult {
24
+ input: string;
25
+ algorithm: CgAlgorithm;
26
+ algorithmUsed: 'cha' | 'rta';
27
+ format: CgFormat;
28
+ direction: CgDirection;
29
+ edges: CgEdgeFilter;
30
+ entry: string[];
31
+ reachableFrom: string[];
32
+ reachable: string[];
33
+ nodes: string[];
34
+ edgeCount: number;
35
+ edgesData: CgEdgeRow[];
36
+ }
18
37
  export declare function resolveMethodRef(scene: Scene, spec: string): ArkMethod | null;
19
- export declare function runCgCommand(input: string, raw: RawCgCommandOptions): void;
38
+ export declare function analyzeCg(input: string, options: CgCommandOptions): CgAnalyzeResult;
39
+ export declare function runCgCommand(input: string, raw: CgCommandOptions): void;
20
40
  /**
21
41
  * Register call-graph command.
22
42
  *
@@ -29,4 +49,5 @@ export declare function runCgCommand(input: string, raw: RawCgCommandOptions): v
29
49
  * arkanalyzer cg ./my_project -f dot -o ./out/cg.dot --edges all
30
50
  */
31
51
  export declare function register(program: Command): void;
52
+ export {};
32
53
  //# sourceMappingURL=cg.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cg.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cg.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAMvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAapE,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAuBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+C7E;AA4SD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CA8B1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB/C"}
1
+ {"version":3,"file":"cg.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cg.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAMvD,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC;AACxC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AACvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,WAAW,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,SAAS;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,aAAa,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,EAAE,CAAC;CAC1B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA+C7E;AA4SD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAyBnF;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAIvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB/C"}