arkanalyzer 1.0.90 → 1.0.91
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/config/arkanalyzer.json +0 -1
- package/lib/Config.d.ts +3 -0
- package/lib/Config.d.ts.map +1 -1
- package/lib/Scene.d.ts +99 -0
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +229 -13
- package/lib/callgraph/common/Statistics.js +2 -2
- package/lib/callgraph/model/CallGraph.d.ts +2 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +6 -6
- package/lib/callgraph/model/CallSite.d.ts +1 -1
- package/lib/callgraph/model/CallSite.d.ts.map +1 -1
- package/lib/callgraph/model/CallSite.js +2 -2
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +6 -1
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +5 -0
- package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkValueTransformer.js +2 -1
- package/lib/core/common/Const.d.ts +3 -0
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +5 -1
- package/lib/core/common/DummyMainCreater.d.ts +25 -12
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +90 -76
- package/lib/core/common/EtsConst.d.ts +2 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +133 -125
- package/lib/core/common/SdkUtils.d.ts +1 -0
- package/lib/core/common/SdkUtils.d.ts.map +1 -1
- package/lib/core/common/SdkUtils.js +29 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts +2 -0
- package/lib/core/graph/BaseExplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseExplicitGraph.js +12 -1
- package/lib/core/graph/BaseImplicitGraph.d.ts +16 -0
- package/lib/core/graph/BaseImplicitGraph.d.ts.map +1 -1
- package/lib/core/graph/BaseImplicitGraph.js +21 -0
- package/lib/core/graph/FileDepGraph.d.ts +75 -0
- package/lib/core/graph/FileDepGraph.d.ts.map +1 -0
- package/lib/core/graph/FileDepGraph.js +170 -0
- package/lib/core/graph/GraphTraits.d.ts +2 -0
- package/lib/core/graph/GraphTraits.d.ts.map +1 -1
- package/lib/core/graph/GraphTraits.js +1 -1
- package/lib/core/graph/ModuleDepGraph.d.ts +175 -0
- package/lib/core/graph/ModuleDepGraph.d.ts.map +1 -0
- package/lib/core/graph/ModuleDepGraph.js +421 -0
- package/lib/core/graph/Scc.d.ts +1 -3
- package/lib/core/graph/Scc.d.ts.map +1 -1
- package/lib/core/graph/Scc.js +6 -19
- package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/CfgBuilder.js +7 -1
- package/lib/core/graph/builder/TrapBuilder.d.ts +1 -0
- package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/TrapBuilder.js +27 -7
- package/lib/core/model/ArkBody.d.ts +1 -0
- package/lib/core/model/ArkBody.d.ts.map +1 -1
- package/lib/core/model/ArkBody.js +7 -0
- package/lib/core/model/ArkClass.d.ts +1 -0
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +37 -0
- package/lib/core/model/ArkExport.d.ts +1 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +6 -0
- package/lib/core/model/ArkField.d.ts +1 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +5 -0
- package/lib/core/model/ArkFile.d.ts +5 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +30 -0
- package/lib/core/model/ArkImport.d.ts +1 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +5 -0
- package/lib/core/model/ArkMethod.d.ts +8 -0
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +22 -0
- package/lib/core/model/ArkModule.d.ts +136 -0
- package/lib/core/model/ArkModule.d.ts.map +1 -0
- package/lib/core/model/ArkModule.js +250 -0
- package/lib/core/model/ArkNamespace.d.ts +1 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +18 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts +19 -0
- package/lib/core/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFileBuilder.js +155 -51
- package/lib/frontend/FrontendBuilder.d.ts +116 -0
- package/lib/frontend/FrontendBuilder.d.ts.map +1 -1
- package/lib/frontend/FrontendBuilder.js +256 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts +11 -0
- package/lib/frontend/arktsFrontend/ArktsFrontend.d.ts.map +1 -1
- package/lib/frontend/arktsFrontend/ArktsFrontend.js +15 -0
- package/lib/frontend/common/MemoryMonitor.d.ts +62 -0
- package/lib/frontend/common/MemoryMonitor.d.ts.map +1 -0
- package/lib/frontend/common/MemoryMonitor.js +108 -0
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts +92 -0
- package/lib/frontend/common/ModuleAnalysisConfig.d.ts.map +1 -0
- package/lib/frontend/common/ModuleAnalysisConfig.js +144 -0
- package/lib/frontend/common/ModuleBuilder.d.ts +497 -0
- package/lib/frontend/common/ModuleBuilder.d.ts.map +1 -0
- package/lib/frontend/common/ModuleBuilder.js +1458 -0
- package/lib/frontend/common/ModuleCache.d.ts +119 -0
- package/lib/frontend/common/ModuleCache.d.ts.map +1 -0
- package/lib/frontend/common/ModuleCache.js +197 -0
- package/lib/frontend/common/ModuleDepth.d.ts +28 -0
- package/lib/frontend/common/ModuleDepth.d.ts.map +1 -0
- package/lib/frontend/common/ModuleDepth.js +45 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts +5 -0
- package/lib/frontend/cppFrontend/CppFrontend.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/CppFrontend.js +11 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts +8 -0
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.d.ts.map +1 -1
- package/lib/frontend/cppFrontend/model/builder/ArkFileBuilder.js +105 -2
- package/lib/index.d.ts +9 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +22 -3
- package/lib/utils/Canonicalizer.d.ts +105 -0
- package/lib/utils/Canonicalizer.d.ts.map +1 -0
- package/lib/utils/Canonicalizer.js +520 -0
- package/lib/utils/ModuleUtils.js +4 -2
- package/lib/utils/entryMethodUtils.d.ts +23 -0
- package/lib/utils/entryMethodUtils.d.ts.map +1 -1
- package/lib/utils/entryMethodUtils.js +53 -1
- package/package.json +1 -1
package/config/arkanalyzer.json
CHANGED
package/lib/Config.d.ts
CHANGED
|
@@ -67,6 +67,9 @@ export interface SceneOptions {
|
|
|
67
67
|
sdkGlobalFolders?: string[];
|
|
68
68
|
/** Optional multi-language front-end section; defaults are merged in {@link SceneConfig} construction. */
|
|
69
69
|
languages?: SceneLanguagesOptions;
|
|
70
|
+
/** Max process memory (RSS) in MB; 0 or undefined disables memory monitoring.
|
|
71
|
+
* Internally converted to a heapUsed limit via RSS_TO_HEAPUSED_RATIO in MemoryMonitor. */
|
|
72
|
+
memoryLimitMB?: number;
|
|
70
73
|
[option: string]: SceneOptionsValue;
|
|
71
74
|
}
|
|
72
75
|
export declare class SceneConfig {
|
package/lib/Config.d.ts.map
CHANGED
|
@@ -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/Scene.d.ts
CHANGED
|
@@ -3,11 +3,16 @@ import { VisibleValue } from './core/common/VisibleValue';
|
|
|
3
3
|
import { ArkClass } from './core/model/ArkClass';
|
|
4
4
|
import { ArkFile, Language } from './core/model/ArkFile';
|
|
5
5
|
import { ArkMethod } from './core/model/ArkMethod';
|
|
6
|
+
import { ArkModule, ModuleID } from './core/model/ArkModule';
|
|
6
7
|
import { ArkNamespace } from './core/model/ArkNamespace';
|
|
7
8
|
import { ClassSignature, FileSignature, MethodSignature, NamespaceSignature } from './core/model/ArkSignature';
|
|
9
|
+
import { ModuleAnalysisConfig, ModuleAnalysisCallback } from './frontend/common/ModuleAnalysisConfig';
|
|
10
|
+
import { MemoryMonitor } from './frontend/common/MemoryMonitor';
|
|
11
|
+
import { ModuleCache } from './frontend/common/ModuleCache';
|
|
8
12
|
import { Local } from './core/base/Local';
|
|
9
13
|
import { ArkExport } from './core/model/ArkExport';
|
|
10
14
|
import { CallGraph } from './callgraph/model/CallGraph';
|
|
15
|
+
import { ModuleDepGraph } from './core/graph/ModuleDepGraph';
|
|
11
16
|
export declare enum SceneBuildStage {
|
|
12
17
|
BUILD_INIT = 0,
|
|
13
18
|
SDK_INFERRED = 1,
|
|
@@ -49,6 +54,18 @@ export declare class Scene {
|
|
|
49
54
|
private buildStage;
|
|
50
55
|
private fileLanguages;
|
|
51
56
|
private options;
|
|
57
|
+
/** The SceneConfig used to build this scene, retained for later queries (e.g. SDK list). */
|
|
58
|
+
private sceneConfig?;
|
|
59
|
+
/** Maps ArkModule objects to dense integer ModuleIDs via the objectIdentity strategy. */
|
|
60
|
+
private moduleCanonicalizer;
|
|
61
|
+
/** Module dependency graph, used for SCCDetection. Built during dependency analysis. */
|
|
62
|
+
private moduleDepGraph?;
|
|
63
|
+
/** Whether module preparation has completed (prepareModules + analyzeModuleDependencies, idempotent). */
|
|
64
|
+
private modulesRegistered;
|
|
65
|
+
/** Persistent module cache for cross-call module reuse. */
|
|
66
|
+
private moduleCache?;
|
|
67
|
+
/** Persistent memory monitor for cache eviction. */
|
|
68
|
+
private memoryMonitor?;
|
|
52
69
|
private unhandledFilePaths;
|
|
53
70
|
private unhandledSdkFilePaths;
|
|
54
71
|
constructor();
|
|
@@ -59,6 +76,13 @@ export declare class Scene {
|
|
|
59
76
|
getOverRideDependencyMap(): Map<string, unknown>;
|
|
60
77
|
clear(): void;
|
|
61
78
|
getStage(): SceneBuildStage;
|
|
79
|
+
/**
|
|
80
|
+
* Set the current {@link SceneBuildStage}. Used by module-level builders (e.g.
|
|
81
|
+
* {@link FrontendBuilder.buildModuleMethodBody}) to temporarily open the
|
|
82
|
+
* {@link buildClassDone} gate so that nested/anonymous method bodies are built
|
|
83
|
+
* immediately during body construction, then restore the previous stage.
|
|
84
|
+
*/
|
|
85
|
+
setBuildStage(stage: SceneBuildStage): void;
|
|
62
86
|
/**
|
|
63
87
|
* Build scene object according to the {@link SceneConfig}. This API implements 3 functions.
|
|
64
88
|
* First is to build scene object from {@link SceneConfig}, second is to generate {@link ArkFile}s,
|
|
@@ -148,6 +172,62 @@ export declare class Scene {
|
|
|
148
172
|
```
|
|
149
173
|
*/
|
|
150
174
|
getRealProjectDir(): string;
|
|
175
|
+
/**
|
|
176
|
+
* Returns the {@link SceneConfig} used to build this scene, or undefined before
|
|
177
|
+
* {@link buildBasicInfo} has been called.
|
|
178
|
+
*/
|
|
179
|
+
getSceneConfig(): SceneConfig | undefined;
|
|
180
|
+
/**
|
|
181
|
+
* Save the {@link SceneConfig} into the scene for later module-level analysis.
|
|
182
|
+
* Unlike {@link buildBasicInfo}, this method only stores the config (and derives
|
|
183
|
+
* the real project directory) without building ArkFiles or performing type inference.
|
|
184
|
+
* This is the lightweight entry point for {@link analyseByModule}.
|
|
185
|
+
*/
|
|
186
|
+
config(sceneConfig: SceneConfig): void;
|
|
187
|
+
/**
|
|
188
|
+
* Returns all registered {@link ArkModule} objects.
|
|
189
|
+
*/
|
|
190
|
+
getModules(): ArkModule[];
|
|
191
|
+
/** The module dependency graph, or undefined before dependency analysis. */
|
|
192
|
+
getModuleDepGraph(): ModuleDepGraph | undefined;
|
|
193
|
+
/** Whether module preparation has completed. */
|
|
194
|
+
isModulesRegistered(): boolean;
|
|
195
|
+
getModuleCache(): ModuleCache | undefined;
|
|
196
|
+
setModuleCache(cache: ModuleCache): void;
|
|
197
|
+
getMemoryMonitor(): MemoryMonitor | undefined;
|
|
198
|
+
setMemoryMonitor(monitor: MemoryMonitor): void;
|
|
199
|
+
/** Get a registered module by its ModuleID. Returns undefined when the id is out of bounds. */
|
|
200
|
+
getModule(id: ModuleID): ArkModule | undefined;
|
|
201
|
+
/** Get the ModuleID assigned to a registered ArkModule. */
|
|
202
|
+
getModuleId(module: ArkModule): ModuleID;
|
|
203
|
+
/** Total number of registered modules. */
|
|
204
|
+
getModuleCount(): number;
|
|
205
|
+
/** Create a {@link ModuleDepGraph} sharing the internal module canonicalizer. */
|
|
206
|
+
createModuleDepGraph(): ModuleDepGraph;
|
|
207
|
+
setModuleDepGraph(graph: ModuleDepGraph): void;
|
|
208
|
+
setModulesRegistered(value: boolean): void;
|
|
209
|
+
/**
|
|
210
|
+
* Perform module-level analysis by iterating modules in topological order and invoking
|
|
211
|
+
* the callback for each module.
|
|
212
|
+
*
|
|
213
|
+
* Flow: prepareModules → analyzeModuleDependencies → buildSdkModules (SDK files parsed +
|
|
214
|
+
* inferred first) → resolveTargetModuleIds → computeModuleClosureByIds → iterate topoOrder
|
|
215
|
+
* → loadModule → callback.
|
|
216
|
+
* Each step is idempotent; repeated calls do not repeat preprocessing.
|
|
217
|
+
*
|
|
218
|
+
* - SDK modules are registered and built in one fused step by {@link ModuleBuilder.buildSdkModules}
|
|
219
|
+
* before the topoOrder loop, so that global APIs are available when project/oh_modules modules
|
|
220
|
+
* are loaded. SDK modules are not in the module dependency graph and thus never appear in the
|
|
221
|
+
* topoOrder or callback.
|
|
222
|
+
* - Target modules are resolved from the config's type filter, explicit include IDs, and
|
|
223
|
+
* explicit exclude IDs. The transitive closure (targets + dependencies) determines which
|
|
224
|
+
* modules are loaded. The callback is invoked only for target modules, not their dependencies.
|
|
225
|
+
* - By default (no explicit selection), all PROJECT and OH_MODULES modules are targets.
|
|
226
|
+
*
|
|
227
|
+
* @param callback - Invoked for each target module with the module and the scene.
|
|
228
|
+
* @param config - Optional configuration for target module selection and load levels.
|
|
229
|
+
*/
|
|
230
|
+
analyseByModule(callback: ModuleAnalysisCallback, config?: ModuleAnalysisConfig): void;
|
|
151
231
|
/**
|
|
152
232
|
* Returns the **string** name of the project.
|
|
153
233
|
* @returns The name of the project.
|
|
@@ -180,6 +260,11 @@ export declare class Scene {
|
|
|
180
260
|
addUnhandledFilePath(filePath: string): void;
|
|
181
261
|
getUnhandledSdkFilePaths(): string[];
|
|
182
262
|
setFile(file: ArkFile): void;
|
|
263
|
+
/**
|
|
264
|
+
* Add an SDK ArkFile to the scene's `sdkArkFilesMap`, keyed by its file signature.
|
|
265
|
+
* Used by {@link ModuleBuilder.parseAndRegisterSdkFile} during SDK file registration.
|
|
266
|
+
*/
|
|
267
|
+
addSdkArkFile(arkFile: ArkFile): void;
|
|
183
268
|
hasSdkFile(fileSignature: FileSignature): boolean;
|
|
184
269
|
/**
|
|
185
270
|
* Get files of a {@link Scene}. Generally, a project includes several ets/ts files that define the different
|
|
@@ -259,6 +344,20 @@ export declare class Scene {
|
|
|
259
344
|
removeClass(arkClass: ArkClass): boolean;
|
|
260
345
|
removeNamespace(namespace: ArkNamespace): boolean;
|
|
261
346
|
removeFile(file: ArkFile): boolean;
|
|
347
|
+
/**
|
|
348
|
+
* Dispose a module's data from all global indices.
|
|
349
|
+
*
|
|
350
|
+
* Removes the module's ArkFiles, ArkClasses, ArkMethods, and ArkNamespaces from the Scene's
|
|
351
|
+
* global maps (filesMap, sdkArkFilesMap, classesMap, methodsMap, namespacesMap) and clears
|
|
352
|
+
* the oh-package.json5 content cache. After this call, the module's heavy data is no longer
|
|
353
|
+
* reachable via Scene's global indices and can be garbage-collected.
|
|
354
|
+
*
|
|
355
|
+
* The global sdkGlobalMap is NOT cleaned (its keys are flat global names that cannot be
|
|
356
|
+
* reverse-mapped to a module). SDK modules should not be disposed.
|
|
357
|
+
*
|
|
358
|
+
* @param module - The module whose data should be removed from global indices.
|
|
359
|
+
*/
|
|
360
|
+
disposeModule(module: ArkModule): void;
|
|
262
361
|
hasMainMethod(): boolean;
|
|
263
362
|
getEntryPoints(): MethodSignature[];
|
|
264
363
|
/** get values that is visible in curr scope */
|
package/lib/Scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|
package/lib/Scene.js
CHANGED
|
@@ -49,6 +49,8 @@ const VisibleValue_1 = require("./core/common/VisibleValue");
|
|
|
49
49
|
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
|
+
const ModuleAnalysisConfig_1 = require("./frontend/common/ModuleAnalysisConfig");
|
|
53
|
+
const ModuleBuilder_1 = require("./frontend/common/ModuleBuilder");
|
|
52
54
|
const logger_1 = __importStar(require("./utils/logger"));
|
|
53
55
|
const json5parser_1 = require("./utils/json5parser");
|
|
54
56
|
const getAllFiles_1 = require("./utils/getAllFiles");
|
|
@@ -72,6 +74,8 @@ const Inference_1 = require("./core/inference/Inference");
|
|
|
72
74
|
const IRInference_2 = require("./core/common/IRInference");
|
|
73
75
|
const ModuleUtils_1 = require("./utils/ModuleUtils");
|
|
74
76
|
const DependenciesSort_1 = require("./utils/DependenciesSort");
|
|
77
|
+
const Canonicalizer_1 = require("./utils/Canonicalizer");
|
|
78
|
+
const ModuleDepGraph_1 = require("./core/graph/ModuleDepGraph");
|
|
75
79
|
const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Scene');
|
|
76
80
|
var SceneBuildStage;
|
|
77
81
|
(function (SceneBuildStage) {
|
|
@@ -116,6 +120,10 @@ class Scene {
|
|
|
116
120
|
this.overRideDependencyMap = new Map();
|
|
117
121
|
this.buildStage = SceneBuildStage.BUILD_INIT;
|
|
118
122
|
this.fileLanguages = new Map();
|
|
123
|
+
/** Maps ArkModule objects to dense integer ModuleIDs via the objectIdentity strategy. */
|
|
124
|
+
this.moduleCanonicalizer = new Canonicalizer_1.Canonicalizer();
|
|
125
|
+
/** Whether module preparation has completed (prepareModules + analyzeModuleDependencies, idempotent). */
|
|
126
|
+
this.modulesRegistered = false;
|
|
119
127
|
this.unhandledFilePaths = new Set();
|
|
120
128
|
this.unhandledSdkFilePaths = [];
|
|
121
129
|
}
|
|
@@ -129,6 +137,8 @@ class Scene {
|
|
|
129
137
|
ValueUtil_1.ValueUtil.dispose();
|
|
130
138
|
ModelUtils_1.ModelUtils.dispose();
|
|
131
139
|
(0, builderUtils_1.clearCxxTypeStringCache)();
|
|
140
|
+
this.moduleCache = undefined;
|
|
141
|
+
this.memoryMonitor = undefined;
|
|
132
142
|
}
|
|
133
143
|
getOptions() {
|
|
134
144
|
return this.options;
|
|
@@ -143,6 +153,7 @@ class Scene {
|
|
|
143
153
|
return this.overRideDependencyMap;
|
|
144
154
|
}
|
|
145
155
|
clear() {
|
|
156
|
+
var _a;
|
|
146
157
|
this.projectFiles = [];
|
|
147
158
|
this.moduleScenesMap.clear();
|
|
148
159
|
this.modulePath2NameMap.clear();
|
|
@@ -156,10 +167,20 @@ class Scene {
|
|
|
156
167
|
this.sdkGlobalMap.clear();
|
|
157
168
|
this.ohPkgContentMap.clear();
|
|
158
169
|
this.ohPkgContent = {};
|
|
170
|
+
(_a = this.moduleCache) === null || _a === void 0 ? void 0 : _a.clear();
|
|
159
171
|
}
|
|
160
172
|
getStage() {
|
|
161
173
|
return this.buildStage;
|
|
162
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Set the current {@link SceneBuildStage}. Used by module-level builders (e.g.
|
|
177
|
+
* {@link FrontendBuilder.buildModuleMethodBody}) to temporarily open the
|
|
178
|
+
* {@link buildClassDone} gate so that nested/anonymous method bodies are built
|
|
179
|
+
* immediately during body construction, then restore the previous stage.
|
|
180
|
+
*/
|
|
181
|
+
setBuildStage(stage) {
|
|
182
|
+
this.buildStage = stage;
|
|
183
|
+
}
|
|
163
184
|
/**
|
|
164
185
|
* Build scene object according to the {@link SceneConfig}. This API implements 3 functions.
|
|
165
186
|
* First is to build scene object from {@link SceneConfig}, second is to generate {@link ArkFile}s,
|
|
@@ -194,6 +215,7 @@ class Scene {
|
|
|
194
215
|
*/
|
|
195
216
|
buildBasicInfo(sceneConfig) {
|
|
196
217
|
var _a;
|
|
218
|
+
this.sceneConfig = sceneConfig;
|
|
197
219
|
this.options = sceneConfig.getOptions();
|
|
198
220
|
this.projectName = sceneConfig.getTargetProjectName();
|
|
199
221
|
this.realProjectDir = fs_1.default.realpathSync(sceneConfig.getTargetProjectDirectory());
|
|
@@ -305,8 +327,9 @@ class Scene {
|
|
|
305
327
|
}
|
|
306
328
|
findTsConfigInfoDeeply(tsConfigObj, tsConfigFilePath) {
|
|
307
329
|
if (tsConfigObj.extends) {
|
|
308
|
-
const
|
|
309
|
-
|
|
330
|
+
const extTsConfigFilePath = path_1.default.join(path_1.default.dirname(tsConfigFilePath), tsConfigObj.extends);
|
|
331
|
+
const extTsConfigObj = (0, json5parser_1.fetchDependenciesFromFile)(extTsConfigFilePath);
|
|
332
|
+
this.findTsConfigInfoDeeply(extTsConfigObj, extTsConfigFilePath);
|
|
310
333
|
if (!this.baseUrl && !this.globalModule2PathMapping) {
|
|
311
334
|
this.addTsConfigInfo(extTsConfigObj);
|
|
312
335
|
}
|
|
@@ -566,8 +589,7 @@ class Scene {
|
|
|
566
589
|
}
|
|
567
590
|
}
|
|
568
591
|
findDependenciesByRule(originPath) {
|
|
569
|
-
if (!this.findFilesByPathArray(originPath) &&
|
|
570
|
-
!this.findFilesByExtNameArray(originPath, this.options.supportFileExts)) {
|
|
592
|
+
if (!this.findFilesByPathArray(originPath) && !this.findFilesByExtNameArray(originPath, this.options.supportFileExts)) {
|
|
571
593
|
logger.trace(originPath + 'module mapperInfo is not found!');
|
|
572
594
|
}
|
|
573
595
|
}
|
|
@@ -666,7 +688,7 @@ class Scene {
|
|
|
666
688
|
*/
|
|
667
689
|
buildSdk(sdkName, sdkPath) {
|
|
668
690
|
const allFiles = this.collectSdkFiles(sdkName, sdkPath);
|
|
669
|
-
allFiles.forEach(
|
|
691
|
+
allFiles.forEach(file => {
|
|
670
692
|
if (FileUtils_1.FileUtils.getFileLanguage(file, this.fileLanguages) === ArkFile_1.Language.CXX) {
|
|
671
693
|
return;
|
|
672
694
|
}
|
|
@@ -682,6 +704,7 @@ class Scene {
|
|
|
682
704
|
}
|
|
683
705
|
return builtInFiles;
|
|
684
706
|
}
|
|
707
|
+
SdkUtils_1.SdkUtils.loadSystemComponentsFromSdk(sdkPath);
|
|
685
708
|
return (0, getAllFiles_1.getAllFiles)(sdkPath, this.options.supportFileExts, this.options.ignoreFileNames);
|
|
686
709
|
}
|
|
687
710
|
parseAndRegisterSdkFile(file, sdkPath, sdkName) {
|
|
@@ -811,6 +834,154 @@ class Scene {
|
|
|
811
834
|
getRealProjectDir() {
|
|
812
835
|
return this.realProjectDir;
|
|
813
836
|
}
|
|
837
|
+
/**
|
|
838
|
+
* Returns the {@link SceneConfig} used to build this scene, or undefined before
|
|
839
|
+
* {@link buildBasicInfo} has been called.
|
|
840
|
+
*/
|
|
841
|
+
getSceneConfig() {
|
|
842
|
+
return this.sceneConfig;
|
|
843
|
+
}
|
|
844
|
+
/**
|
|
845
|
+
* Save the {@link SceneConfig} into the scene for later module-level analysis.
|
|
846
|
+
* Unlike {@link buildBasicInfo}, this method only stores the config (and derives
|
|
847
|
+
* the real project directory) without building ArkFiles or performing type inference.
|
|
848
|
+
* This is the lightweight entry point for {@link analyseByModule}.
|
|
849
|
+
*/
|
|
850
|
+
config(sceneConfig) {
|
|
851
|
+
this.sceneConfig = sceneConfig;
|
|
852
|
+
this.options = sceneConfig.getOptions();
|
|
853
|
+
this.projectName = sceneConfig.getTargetProjectName();
|
|
854
|
+
const dir = sceneConfig.getTargetProjectDirectory();
|
|
855
|
+
if (dir) {
|
|
856
|
+
this.realProjectDir = fs_1.default.realpathSync(dir);
|
|
857
|
+
}
|
|
858
|
+
this.fileLanguages = sceneConfig.getFileLanguages();
|
|
859
|
+
}
|
|
860
|
+
/**
|
|
861
|
+
* Returns all registered {@link ArkModule} objects.
|
|
862
|
+
*/
|
|
863
|
+
getModules() {
|
|
864
|
+
const result = [];
|
|
865
|
+
for (let i = 0; i < this.moduleCanonicalizer.size(); i++) {
|
|
866
|
+
const m = this.moduleCanonicalizer.get(i);
|
|
867
|
+
if (m) {
|
|
868
|
+
result.push(m);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
return result;
|
|
872
|
+
}
|
|
873
|
+
// --- Module query methods (Scene is a lightweight result container) ---
|
|
874
|
+
/** The module dependency graph, or undefined before dependency analysis. */
|
|
875
|
+
getModuleDepGraph() {
|
|
876
|
+
return this.moduleDepGraph;
|
|
877
|
+
}
|
|
878
|
+
/** Whether module preparation has completed. */
|
|
879
|
+
isModulesRegistered() {
|
|
880
|
+
return this.modulesRegistered;
|
|
881
|
+
}
|
|
882
|
+
// --- Module cache management (persistent across analyseByModule calls) ---
|
|
883
|
+
getModuleCache() {
|
|
884
|
+
return this.moduleCache;
|
|
885
|
+
}
|
|
886
|
+
setModuleCache(cache) {
|
|
887
|
+
this.moduleCache = cache;
|
|
888
|
+
}
|
|
889
|
+
getMemoryMonitor() {
|
|
890
|
+
return this.memoryMonitor;
|
|
891
|
+
}
|
|
892
|
+
setMemoryMonitor(monitor) {
|
|
893
|
+
this.memoryMonitor = monitor;
|
|
894
|
+
}
|
|
895
|
+
// --- Internal accessors used by ModuleBuilder to read/write persistent state ---
|
|
896
|
+
/** Get a registered module by its ModuleID. Returns undefined when the id is out of bounds. */
|
|
897
|
+
getModule(id) {
|
|
898
|
+
return this.moduleCanonicalizer.get(id);
|
|
899
|
+
}
|
|
900
|
+
/** Get the ModuleID assigned to a registered ArkModule. */
|
|
901
|
+
getModuleId(module) {
|
|
902
|
+
return this.moduleCanonicalizer.getId(module);
|
|
903
|
+
}
|
|
904
|
+
/** Total number of registered modules. */
|
|
905
|
+
getModuleCount() {
|
|
906
|
+
return this.moduleCanonicalizer.size();
|
|
907
|
+
}
|
|
908
|
+
/** Create a {@link ModuleDepGraph} sharing the internal module canonicalizer. */
|
|
909
|
+
createModuleDepGraph() {
|
|
910
|
+
return new ModuleDepGraph_1.ModuleDepGraph(this.moduleCanonicalizer);
|
|
911
|
+
}
|
|
912
|
+
setModuleDepGraph(graph) {
|
|
913
|
+
this.moduleDepGraph = graph;
|
|
914
|
+
}
|
|
915
|
+
setModulesRegistered(value) {
|
|
916
|
+
this.modulesRegistered = value;
|
|
917
|
+
}
|
|
918
|
+
/**
|
|
919
|
+
* Perform module-level analysis by iterating modules in topological order and invoking
|
|
920
|
+
* the callback for each module.
|
|
921
|
+
*
|
|
922
|
+
* Flow: prepareModules → analyzeModuleDependencies → buildSdkModules (SDK files parsed +
|
|
923
|
+
* inferred first) → resolveTargetModuleIds → computeModuleClosureByIds → iterate topoOrder
|
|
924
|
+
* → loadModule → callback.
|
|
925
|
+
* Each step is idempotent; repeated calls do not repeat preprocessing.
|
|
926
|
+
*
|
|
927
|
+
* - SDK modules are registered and built in one fused step by {@link ModuleBuilder.buildSdkModules}
|
|
928
|
+
* before the topoOrder loop, so that global APIs are available when project/oh_modules modules
|
|
929
|
+
* are loaded. SDK modules are not in the module dependency graph and thus never appear in the
|
|
930
|
+
* topoOrder or callback.
|
|
931
|
+
* - Target modules are resolved from the config's type filter, explicit include IDs, and
|
|
932
|
+
* explicit exclude IDs. The transitive closure (targets + dependencies) determines which
|
|
933
|
+
* modules are loaded. The callback is invoked only for target modules, not their dependencies.
|
|
934
|
+
* - By default (no explicit selection), all PROJECT and OH_MODULES modules are targets.
|
|
935
|
+
*
|
|
936
|
+
* @param callback - Invoked for each target module with the module and the scene.
|
|
937
|
+
* @param config - Optional configuration for target module selection and load levels.
|
|
938
|
+
*/
|
|
939
|
+
analyseByModule(callback, config) {
|
|
940
|
+
const builder = new ModuleBuilder_1.ModuleBuilder(this);
|
|
941
|
+
// 1. Prepare modules + analyze dependencies (merged, guarded by modulesRegistered)
|
|
942
|
+
if (!this.isModulesRegistered()) {
|
|
943
|
+
builder.prepareModules();
|
|
944
|
+
builder.analyzeModuleDependencies();
|
|
945
|
+
this.setModulesRegistered(true);
|
|
946
|
+
}
|
|
947
|
+
// 2. Build SDK modules — fused registration + building (idempotent). SDK loaded FIRST so
|
|
948
|
+
// that global APIs are available when project/oh_modules modules are loaded.
|
|
949
|
+
builder.buildSdkModules();
|
|
950
|
+
// 3. Resolve target modules and compute closure (unified flow, no branching)
|
|
951
|
+
const effectiveConfig = config !== null && config !== void 0 ? config : new ModuleAnalysisConfig_1.ModuleAnalysisConfig();
|
|
952
|
+
const targetIds = builder.resolveTargetModuleIds(effectiveConfig);
|
|
953
|
+
const closure = builder.computeModuleClosureByIds(targetIds);
|
|
954
|
+
const topoOrder = builder.getFilteredTopoOrder(closure);
|
|
955
|
+
// 4. Initialize / update cache management (persistent ModuleCache + MemoryMonitor in Scene)
|
|
956
|
+
builder.initCacheManagement(this.getOptions(), topoOrder, effectiveConfig.getDependencyLoadLevel());
|
|
957
|
+
// 5. Pre-call cleanup: unload cached modules not in current topoOrder
|
|
958
|
+
const cache = this.getModuleCache();
|
|
959
|
+
if (cache) {
|
|
960
|
+
const currentTopoSet = new Set(topoOrder);
|
|
961
|
+
for (const moduleId of cache.getLoadedModules()) {
|
|
962
|
+
if (!currentTopoSet.has(moduleId)) {
|
|
963
|
+
builder.unload(moduleId);
|
|
964
|
+
cache.unregister(moduleId);
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
// 6. Iterate topoOrder: loadModule internally handles cache eviction and registration
|
|
969
|
+
const targetLevel = effectiveConfig.getLoadLevel();
|
|
970
|
+
const depLevel = effectiveConfig.getDependencyLoadLevel();
|
|
971
|
+
for (const moduleId of topoOrder) {
|
|
972
|
+
const isTarget = targetIds.test(moduleId);
|
|
973
|
+
builder.loadModule(moduleId, isTarget ? targetLevel : depLevel);
|
|
974
|
+
if (!isTarget) {
|
|
975
|
+
continue;
|
|
976
|
+
}
|
|
977
|
+
const module = builder.getModule(moduleId);
|
|
978
|
+
if (!module) {
|
|
979
|
+
continue;
|
|
980
|
+
}
|
|
981
|
+
callback(module, this);
|
|
982
|
+
}
|
|
983
|
+
// 7. No unload, no dispose — modules persist in cache for cross-call reuse
|
|
984
|
+
}
|
|
814
985
|
/**
|
|
815
986
|
* Returns the **string** name of the project.
|
|
816
987
|
* @returns The name of the project.
|
|
@@ -872,6 +1043,13 @@ class Scene {
|
|
|
872
1043
|
setFile(file) {
|
|
873
1044
|
this.filesMap.set(file.getFileSignature().toMapKey(), file);
|
|
874
1045
|
}
|
|
1046
|
+
/**
|
|
1047
|
+
* Add an SDK ArkFile to the scene's `sdkArkFilesMap`, keyed by its file signature.
|
|
1048
|
+
* Used by {@link ModuleBuilder.parseAndRegisterSdkFile} during SDK file registration.
|
|
1049
|
+
*/
|
|
1050
|
+
addSdkArkFile(arkFile) {
|
|
1051
|
+
this.sdkArkFilesMap.set(arkFile.getFileSignature().toMapKey(), arkFile);
|
|
1052
|
+
}
|
|
875
1053
|
hasSdkFile(fileSignature) {
|
|
876
1054
|
return this.sdkArkFilesMap.has(fileSignature.toMapKey());
|
|
877
1055
|
}
|
|
@@ -1080,6 +1258,48 @@ class Scene {
|
|
|
1080
1258
|
removeFile(file) {
|
|
1081
1259
|
return this.filesMap.delete(file.getFileSignature().toMapKey());
|
|
1082
1260
|
}
|
|
1261
|
+
/**
|
|
1262
|
+
* Dispose a module's data from all global indices.
|
|
1263
|
+
*
|
|
1264
|
+
* Removes the module's ArkFiles, ArkClasses, ArkMethods, and ArkNamespaces from the Scene's
|
|
1265
|
+
* global maps (filesMap, sdkArkFilesMap, classesMap, methodsMap, namespacesMap) and clears
|
|
1266
|
+
* the oh-package.json5 content cache. After this call, the module's heavy data is no longer
|
|
1267
|
+
* reachable via Scene's global indices and can be garbage-collected.
|
|
1268
|
+
*
|
|
1269
|
+
* The global sdkGlobalMap is NOT cleaned (its keys are flat global names that cannot be
|
|
1270
|
+
* reverse-mapped to a module). SDK modules should not be disposed.
|
|
1271
|
+
*
|
|
1272
|
+
* @param module - The module whose data should be removed from global indices.
|
|
1273
|
+
*/
|
|
1274
|
+
disposeModule(module) {
|
|
1275
|
+
for (const arkFile of module.getFilesMap().values()) {
|
|
1276
|
+
const key = arkFile.getFileSignature().toMapKey();
|
|
1277
|
+
this.filesMap.delete(key);
|
|
1278
|
+
this.sdkArkFilesMap.delete(key);
|
|
1279
|
+
for (const ns of ModelUtils_1.ModelUtils.getAllNamespacesInFile(arkFile)) {
|
|
1280
|
+
this.namespacesMap.delete(ns.getNamespaceSignature().toMapKey());
|
|
1281
|
+
}
|
|
1282
|
+
for (const cls of ModelUtils_1.ModelUtils.getAllClassesInFile(arkFile)) {
|
|
1283
|
+
this.classesMap.delete(cls.getSignature().toMapKey());
|
|
1284
|
+
for (const mtd of cls.getMethods()) {
|
|
1285
|
+
this.methodsMap.delete(mtd.getSignature().toMapKey());
|
|
1286
|
+
// Release heavy per-method IR (ArkBody/CFG/Stmt/Locals + ViewTree) so it can
|
|
1287
|
+
// be GC'd on eviction, even if the ArkMethod/ArkFile skeleton is still referenced
|
|
1288
|
+
// by residual back-edges. Bodies/viewTrees are rebuilt on reload.
|
|
1289
|
+
mtd.clearBodyAndSupplementary();
|
|
1290
|
+
}
|
|
1291
|
+
// Sever back-references: remove this class from its base classes' extendedClasses,
|
|
1292
|
+
// otherwise base classes (e.g. SDK) keep evicted project classes alive (memory leak).
|
|
1293
|
+
for (const base of cls.getAllHeritageClasses()) {
|
|
1294
|
+
base.getExtendedClasses().delete(cls.getName());
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
// Release the TS AST (SourceFile) and cached source text; getCode() re-reads from disk.
|
|
1298
|
+
arkFile.setAST(null);
|
|
1299
|
+
arkFile.clearSourceCode();
|
|
1300
|
+
}
|
|
1301
|
+
this.ohPkgContentMap.delete(module.getOhPkgPath());
|
|
1302
|
+
}
|
|
1083
1303
|
hasMainMethod() {
|
|
1084
1304
|
return false;
|
|
1085
1305
|
}
|
|
@@ -1276,8 +1496,7 @@ class Scene {
|
|
|
1276
1496
|
const importNameSpaceClasses = classMap.get(importNameSpace.getNamespaceSignature());
|
|
1277
1497
|
importClasses.push(...importNameSpaceClasses.filter(c => !importClasses.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1278
1498
|
}
|
|
1279
|
-
catch (_a) {
|
|
1280
|
-
}
|
|
1499
|
+
catch (_a) { }
|
|
1281
1500
|
}
|
|
1282
1501
|
}
|
|
1283
1502
|
const fileClasses = classMap.get(file.getFileSignature());
|
|
@@ -1329,8 +1548,7 @@ class Scene {
|
|
|
1329
1548
|
while (namespaceStack.length > 0) {
|
|
1330
1549
|
const ns = namespaceStack.shift();
|
|
1331
1550
|
const nsGlobalLocals = [];
|
|
1332
|
-
(_a = ns
|
|
1333
|
-
.getDefaultClass()
|
|
1551
|
+
(_a = ns.getDefaultClass()
|
|
1334
1552
|
.getDefaultArkMethod()
|
|
1335
1553
|
.getBody()) === null || _a === void 0 ? void 0 : _a.getLocals().forEach(local => {
|
|
1336
1554
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
@@ -1398,8 +1616,7 @@ class Scene {
|
|
|
1398
1616
|
const importNameSpaceClasses = globalVariableMap.get(importNameSpace.getNamespaceSignature());
|
|
1399
1617
|
importLocals.push(...importNameSpaceClasses.filter(c => !importLocals.includes(c) && c.getName() !== Const_1.DEFAULT_ARK_CLASS_NAME));
|
|
1400
1618
|
}
|
|
1401
|
-
catch (_a) {
|
|
1402
|
-
}
|
|
1619
|
+
catch (_a) { }
|
|
1403
1620
|
}
|
|
1404
1621
|
}
|
|
1405
1622
|
const fileLocals = globalVariableMap.get(file.getFileSignature());
|
|
@@ -1441,8 +1658,7 @@ class Scene {
|
|
|
1441
1658
|
const parentMap = new Map();
|
|
1442
1659
|
const finalNamespaces = [];
|
|
1443
1660
|
const globalLocals = [];
|
|
1444
|
-
(_b = (_a = file
|
|
1445
|
-
.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod().getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
1661
|
+
(_b = (_a = file.getDefaultClass()) === null || _a === void 0 ? void 0 : _a.getDefaultArkMethod().getBody()) === null || _b === void 0 ? void 0 : _b.getLocals().forEach(local => {
|
|
1446
1662
|
if (local.getDeclaringStmt() && local.getName() !== 'this' && local.getName()[0] !== '$') {
|
|
1447
1663
|
globalLocals.push(local);
|
|
1448
1664
|
}
|
|
@@ -218,7 +218,7 @@ exports.PAGStat = PAGStat;
|
|
|
218
218
|
class CGStat extends StatTraits {
|
|
219
219
|
constructor() {
|
|
220
220
|
super(...arguments);
|
|
221
|
-
//real,
|
|
221
|
+
//real, virtual, intrinsic, constructor
|
|
222
222
|
this.numTotalNode = 0;
|
|
223
223
|
this.numReal = 0;
|
|
224
224
|
this.numVirtual = 0;
|
|
@@ -249,7 +249,7 @@ class CGStat extends StatTraits {
|
|
|
249
249
|
case CallGraph_1.CallGraphNodeKind.real:
|
|
250
250
|
this.numReal++;
|
|
251
251
|
break;
|
|
252
|
-
case CallGraph_1.CallGraphNodeKind.
|
|
252
|
+
case CallGraph_1.CallGraphNodeKind.virtual:
|
|
253
253
|
this.numVirtual++;
|
|
254
254
|
break;
|
|
255
255
|
case CallGraph_1.CallGraphNodeKind.constructor:
|
|
@@ -9,7 +9,7 @@ export type FuncID = number;
|
|
|
9
9
|
export { CallSite, DynCallSite, ICallSite };
|
|
10
10
|
export declare enum CallGraphNodeKind {
|
|
11
11
|
real = 0,
|
|
12
|
-
|
|
12
|
+
virtual = 1,
|
|
13
13
|
intrinsic = 2,
|
|
14
14
|
constructor = 3,
|
|
15
15
|
blank = 4
|
|
@@ -56,7 +56,7 @@ export declare class CallGraph extends BaseExplicitGraph {
|
|
|
56
56
|
getCallGraphNodeByMethod(method: Method): CallGraphNode;
|
|
57
57
|
addDirectOrSpecialCallEdge(caller: Method, callee: Method, callStmt: Stmt, isDirectCall?: boolean): void;
|
|
58
58
|
removeCallGraphEdge(nodeID: NodeID): void;
|
|
59
|
-
addDynamicCallInfo(callStmt: Stmt, caller: Method,
|
|
59
|
+
addDynamicCallInfo(callStmt: Stmt, caller: Method, potentialCallee?: Method): void;
|
|
60
60
|
addDynamicCallEdge(callerID: NodeID, calleeID: NodeID, callStmt: Stmt): void;
|
|
61
61
|
getDynCallSiteByStmt(stmt: Stmt): DynCallSite | undefined;
|
|
62
62
|
addStmtToCallSiteMap(stmt: Stmt, cs: CallSite): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAE5C,oBAAY,iBAAiB;IACzB,IAAI,IAAA;IACJ,
|
|
1
|
+
{"version":3,"file":"CallGraph.d.ts","sourceRoot":"","sources":["../../../src/callgraph/model/CallGraph.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAGnG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG3F,MAAM,MAAM,MAAM,GAAG,eAAe,CAAC;AACrC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AAE5C,oBAAY,iBAAiB;IACzB,IAAI,IAAA;IACJ,OAAO,IAAA;IACP,SAAS,IAAA;IACT,WAAW,IAAA;IACX,KAAK,IAAA;CACR;AAMD,qBAAa,aAAc,SAAQ,QAAQ;IACvC,OAAO,CAAC,KAAK,CAAa;gBAEd,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa;IAI3C,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAIpC,kBAAkB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAIrC,mBAAmB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI;IAItC,aAAa,IAAI,OAAO;IAIxB,eAAe,IAAI,OAAO;IAI1B,cAAc,IAAI,OAAO;IAIzB,UAAU,IAAI,MAAM;CAW9B;AAED,qBAAa,aAAc,SAAQ,QAAQ;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAkB;gBAEzB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,iBAA0C;IAKzE,SAAS,IAAI,MAAM;IAInB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9B,WAAW,IAAI,OAAO;IAI7B,IAAW,aAAa,IAAI,OAAO,CAElC;IAEM,UAAU,IAAI,MAAM;IAIpB,WAAW,IAAI,MAAM;CAK/B;AAED,qBAAa,SAAU,SAAQ,iBAAiB;IAC5C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,CAAC,EAAE,KAAK,EAAE,gBAAgB,GAAE,OAAe;IAQvD,OAAO,CAAC,iBAAiB;IAIlB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAK1E,YAAY,IAAI,QAAQ,CAAC,aAAa,CAAC;IAIvC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,iBAA0C,GAAG,aAAa;IAYjG,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IASzC,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAgBvD,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAE,OAAc,GAAG,IAAI;IA2B9G,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYzC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAYlF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAmB5E,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,SAAS;IAIzD,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO;IASvD,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE;IAIzC,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI;IAQ1D,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC;IAWnE,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,EAAE;IAU7D,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAkBvC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ5C,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAUlD,UAAU,IAAI,MAAM,EAAE;IAItB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAI9C,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK7B,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IA0BvD,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,IAAI;IAIf,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,MAAM;IAIjB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAInD,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAIxC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYxC,YAAY,IAAI,MAAM;IAItB,kBAAkB,IAAI,eAAe;IAIrC,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAWnD"}
|