arkanalyzer 1.0.7 → 1.0.8
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 +8 -0
- package/docs/IR2ts-stmt.md +81 -0
- package/docs/IR2ts.md +82 -0
- package/lib/Config.d.ts +9 -1
- package/lib/Config.d.ts.map +1 -1
- package/lib/Config.js +24 -11
- package/lib/Scene.d.ts +49 -42
- package/lib/Scene.d.ts.map +1 -1
- package/lib/Scene.js +124 -93
- package/lib/callgraph/algorithm/AbstractAnalysis.js +1 -1
- package/lib/callgraph/common/Statistics.js +1 -1
- package/lib/callgraph/model/CallGraph.d.ts +3 -2
- package/lib/callgraph/model/CallGraph.d.ts.map +1 -1
- package/lib/callgraph/model/CallGraph.js +16 -6
- package/lib/callgraph/model/builder/CallGraphBuilder.js +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.d.ts +35 -8
- package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/Pag.js +93 -12
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +32 -5
- package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PagBuilder.js +378 -83
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +3 -0
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
- package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +71 -18
- package/lib/core/base/Constant.d.ts +25 -5
- package/lib/core/base/Constant.d.ts.map +1 -1
- package/lib/core/base/Constant.js +46 -8
- package/lib/core/base/Expr.d.ts +45 -40
- package/lib/core/base/Expr.d.ts.map +1 -1
- package/lib/core/base/Expr.js +239 -153
- package/lib/core/base/Local.d.ts +2 -2
- package/lib/core/base/Local.d.ts.map +1 -1
- package/lib/core/base/Local.js +2 -2
- package/lib/core/base/Ref.d.ts +38 -37
- package/lib/core/base/Ref.d.ts.map +1 -1
- package/lib/core/base/Ref.js +102 -70
- package/lib/core/base/Stmt.d.ts +4 -0
- package/lib/core/base/Stmt.d.ts.map +1 -1
- package/lib/core/base/Stmt.js +12 -1
- package/lib/core/base/Type.d.ts +4 -0
- package/lib/core/base/Type.d.ts.map +1 -1
- package/lib/core/base/Type.js +41 -17
- package/lib/core/common/ArkError.d.ts +15 -0
- package/lib/core/common/ArkError.d.ts.map +1 -0
- package/lib/core/common/ArkError.js +28 -0
- package/lib/core/common/ArkIRTransformer.d.ts +7 -3
- package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
- package/lib/core/common/ArkIRTransformer.js +46 -20
- package/lib/core/common/Builtin.js +1 -1
- package/lib/core/common/CfgBuilder.d.ts +12 -0
- package/lib/core/common/CfgBuilder.d.ts.map +1 -1
- package/lib/core/common/CfgBuilder.js +289 -61
- package/lib/core/common/Const.d.ts +15 -10
- package/lib/core/common/Const.d.ts.map +1 -1
- package/lib/core/common/Const.js +18 -11
- package/lib/core/common/DummyMainCreater.d.ts +2 -1
- package/lib/core/common/DummyMainCreater.d.ts.map +1 -1
- package/lib/core/common/DummyMainCreater.js +28 -15
- package/lib/core/common/EtsConst.d.ts +1 -0
- package/lib/core/common/EtsConst.d.ts.map +1 -1
- package/lib/core/common/EtsConst.js +2 -1
- package/lib/core/common/IRUtils.d.ts +7 -0
- package/lib/core/common/IRUtils.d.ts.map +1 -1
- package/lib/core/common/IRUtils.js +34 -2
- package/lib/core/common/ModelUtils.d.ts +1 -0
- package/lib/core/common/ModelUtils.d.ts.map +1 -1
- package/lib/core/common/ModelUtils.js +32 -32
- package/lib/core/common/TSConst.d.ts +10 -3
- package/lib/core/common/TSConst.d.ts.map +1 -1
- package/lib/core/common/TSConst.js +11 -4
- package/lib/core/common/TypeInference.d.ts +8 -2
- package/lib/core/common/TypeInference.d.ts.map +1 -1
- package/lib/core/common/TypeInference.js +218 -87
- package/lib/core/common/ValueUtil.d.ts +0 -4
- package/lib/core/common/ValueUtil.d.ts.map +1 -1
- package/lib/core/common/ValueUtil.js +8 -25
- package/lib/core/dataflow/DataflowSolver.d.ts.map +1 -1
- package/lib/core/dataflow/DataflowSolver.js +2 -4
- package/lib/core/dataflow/TiantAnalysis.js +2 -1
- package/lib/core/dataflow/Util.d.ts +1 -1
- package/lib/core/dataflow/Util.d.ts.map +1 -1
- package/lib/core/dataflow/Util.js +8 -7
- package/lib/core/graph/BasicBlock.d.ts +41 -0
- package/lib/core/graph/BasicBlock.d.ts.map +1 -1
- package/lib/core/graph/BasicBlock.js +132 -1
- package/lib/core/graph/Cfg.d.ts +30 -1
- package/lib/core/graph/Cfg.d.ts.map +1 -1
- package/lib/core/graph/Cfg.js +129 -6
- package/lib/core/graph/builder/ViewTreeBuilder.d.ts.map +1 -1
- package/lib/core/graph/builder/ViewTreeBuilder.js +3 -2
- package/lib/core/model/ArkBaseModel.d.ts +8 -0
- package/lib/core/model/ArkBaseModel.d.ts.map +1 -1
- package/lib/core/model/ArkBaseModel.js +56 -4
- package/lib/core/model/ArkClass.d.ts +36 -30
- package/lib/core/model/ArkClass.d.ts.map +1 -1
- package/lib/core/model/ArkClass.js +79 -40
- package/lib/core/model/ArkExport.d.ts +3 -0
- package/lib/core/model/ArkExport.d.ts.map +1 -1
- package/lib/core/model/ArkExport.js +11 -1
- package/lib/core/model/ArkField.d.ts +2 -0
- package/lib/core/model/ArkField.d.ts.map +1 -1
- package/lib/core/model/ArkField.js +4 -1
- package/lib/core/model/ArkFile.d.ts +4 -0
- package/lib/core/model/ArkFile.d.ts.map +1 -1
- package/lib/core/model/ArkFile.js +20 -0
- package/lib/core/model/ArkImport.d.ts +2 -0
- package/lib/core/model/ArkImport.d.ts.map +1 -1
- package/lib/core/model/ArkImport.js +3 -0
- package/lib/core/model/ArkMetadata.d.ts +20 -0
- package/lib/core/model/ArkMetadata.d.ts.map +1 -0
- package/lib/core/model/ArkMetadata.js +44 -0
- package/lib/core/model/ArkMethod.d.ts +156 -53
- package/lib/core/model/ArkMethod.d.ts.map +1 -1
- package/lib/core/model/ArkMethod.js +309 -54
- package/lib/core/model/ArkNamespace.d.ts +4 -0
- package/lib/core/model/ArkNamespace.d.ts.map +1 -1
- package/lib/core/model/ArkNamespace.js +13 -0
- package/lib/core/model/ArkSignature.d.ts +11 -5
- package/lib/core/model/ArkSignature.d.ts.map +1 -1
- package/lib/core/model/ArkSignature.js +38 -18
- package/lib/core/model/builder/ArkClassBuilder.d.ts +0 -1
- package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkClassBuilder.js +9 -34
- package/lib/core/model/builder/ArkExportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkExportBuilder.js +6 -1
- package/lib/core/model/builder/ArkFieldBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkFieldBuilder.js +3 -0
- package/lib/core/model/builder/ArkFileBuilder.js +1 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkImportBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkImportBuilder.js +12 -5
- package/lib/core/model/builder/ArkMethodBuilder.d.ts +2 -1
- package/lib/core/model/builder/ArkMethodBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkMethodBuilder.js +87 -47
- package/lib/core/model/builder/ArkNamespaceBuilder.d.ts.map +1 -1
- package/lib/core/model/builder/ArkNamespaceBuilder.js +2 -0
- package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
- package/lib/core/model/builder/builderUtils.js +25 -2
- package/lib/save/source/SourceClass.d.ts.map +1 -1
- package/lib/save/source/SourceClass.js +4 -0
- package/lib/save/source/SourceField.d.ts.map +1 -1
- package/lib/save/source/SourceField.js +4 -0
- package/lib/save/source/SourceMethod.d.ts.map +1 -1
- package/lib/save/source/SourceMethod.js +7 -0
- package/lib/save/source/SourceModule.d.ts.map +1 -1
- package/lib/save/source/SourceModule.js +14 -9
- package/lib/save/source/SourceNamespace.d.ts.map +1 -1
- package/lib/save/source/SourceNamespace.js +4 -0
- package/lib/save/source/SourceStmt.d.ts.map +1 -1
- package/lib/save/source/SourceStmt.js +15 -3
- package/lib/save/source/SourceTransformer.d.ts +6 -0
- package/lib/save/source/SourceTransformer.d.ts.map +1 -1
- package/lib/save/source/SourceTransformer.js +72 -41
- package/lib/save/source/SourceUtils.d.ts.map +1 -1
- package/lib/save/source/SourceUtils.js +3 -2
- package/lib/transformer/StaticSingleAssignmentFormer.js +1 -1
- package/lib/utils/CfgStructualAnalysis.d.ts +1 -0
- package/lib/utils/CfgStructualAnalysis.d.ts.map +1 -1
- package/lib/utils/CfgStructualAnalysis.js +42 -8
- package/lib/utils/callGraphUtils.d.ts.map +1 -1
- package/lib/utils/callGraphUtils.js +7 -10
- package/lib/utils/crypto_utils.d.ts +6 -0
- package/lib/utils/crypto_utils.d.ts.map +1 -0
- package/lib/utils/crypto_utils.js +57 -0
- package/lib/utils/entryMethodUtils.js +23 -23
- package/lib/utils/getAllFiles.d.ts +1 -1
- package/lib/utils/getAllFiles.d.ts.map +1 -1
- package/lib/utils/getAllFiles.js +4 -5
- package/lib/utils/logger.js +2 -2
- package/package.json +3 -2
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
```Mermaid
|
|
2
|
+
classDiagram
|
|
3
|
+
class TransformerContext {
|
|
4
|
+
getDeclaringArkNamespace(): ArkNamespace | undefined;
|
|
5
|
+
getMethod(signature: MethodSignature): ArkMethod | null;
|
|
6
|
+
getClass(signature: ClassSignature): ArkClass | null;
|
|
7
|
+
getPrinter(): ArkCodeBuffer;
|
|
8
|
+
transTemp2Code(temp: Local): string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
<<Interface>> TransformerContext
|
|
12
|
+
|
|
13
|
+
class StmtPrinterContext {
|
|
14
|
+
getStmtReader(): StmtReader;
|
|
15
|
+
setSkipStmt(stmt: Stmt): void;
|
|
16
|
+
|
|
17
|
+
setTempCode(temp: string, code: string): void;
|
|
18
|
+
hasTempVisit(temp: string): boolean;
|
|
19
|
+
setTempVisit(temp: string): void;
|
|
20
|
+
}
|
|
21
|
+
StmtPrinterContext --|> TransformerContext
|
|
22
|
+
<<Interface>> StmtPrinterContext
|
|
23
|
+
|
|
24
|
+
class SourceStmt {
|
|
25
|
+
constructor(context: StmtPrinterContext, original: Stmt);
|
|
26
|
+
getLine(): number;
|
|
27
|
+
dump(): string;
|
|
28
|
+
}
|
|
29
|
+
<<Abstract>> SourceStmt
|
|
30
|
+
SourceStmt --> StmtPrinterContext
|
|
31
|
+
|
|
32
|
+
class SourceAssignStmt {
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
SourceAssignStmt --|> SourceStmt
|
|
36
|
+
|
|
37
|
+
class SourceInvokeStmt {
|
|
38
|
+
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
SourceInvokeStmt --|> SourceStmt
|
|
42
|
+
|
|
43
|
+
class SourceIfStmt {
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
SourceIfStmt --|> SourceStmt
|
|
47
|
+
|
|
48
|
+
class SourceWhileStmt {
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
SourceWhileStmt --|> SourceStmt
|
|
53
|
+
|
|
54
|
+
class SourceForStmt {
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
SourceForStmt --|> SourceStmt
|
|
58
|
+
class SourceDoWhileStmt {
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
SourceDoWhileStmt --|> SourceStmt
|
|
62
|
+
|
|
63
|
+
class SourceDoStmt {
|
|
64
|
+
|
|
65
|
+
}
|
|
66
|
+
SourceDoStmt --|> SourceStmt
|
|
67
|
+
|
|
68
|
+
class SourceBody {
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
SourceBody --|> StmtPrinterContext
|
|
72
|
+
SourceBody --> SourceStmt
|
|
73
|
+
|
|
74
|
+
class AbstractFlowGraph {
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
AbstractFlowGraph o-- BasicBlock
|
|
79
|
+
|
|
80
|
+
SourceBody --> AbstractFlowGraph
|
|
81
|
+
```
|
package/docs/IR2ts.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
```Mermaid
|
|
2
|
+
classDiagram
|
|
3
|
+
class ArkCodeBuffer {
|
|
4
|
+
write(s: string) this
|
|
5
|
+
toString() string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
class ArkStream {
|
|
9
|
+
write(s: string) this
|
|
10
|
+
close() void
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
ArkStream --|> ArkCodeBuffer
|
|
14
|
+
|
|
15
|
+
class Printer {
|
|
16
|
+
abstract dump(): string
|
|
17
|
+
}
|
|
18
|
+
<<Abstract>> Printer
|
|
19
|
+
Printer --> ArkCodeBuffer
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DotMethodPrinter {
|
|
23
|
+
constructor(method: ArkMethod)
|
|
24
|
+
dump(): string
|
|
25
|
+
}
|
|
26
|
+
DotMethodPrinter --|> Printer
|
|
27
|
+
|
|
28
|
+
class SourceFilePrinter {
|
|
29
|
+
constructor(arkFile: ArkFile)
|
|
30
|
+
public dump(): string
|
|
31
|
+
}
|
|
32
|
+
SourceFilePrinter --|> Printer
|
|
33
|
+
|
|
34
|
+
class SourceBase {
|
|
35
|
+
constructor(arkFile: ArkFile, indent: string = '')
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
SourceBase --|> Printer
|
|
39
|
+
|
|
40
|
+
class SourceNamespace {
|
|
41
|
+
constructor(ns: ArkNamespace, indent: string = '')
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
SourceNamespace --|> SourceBase
|
|
45
|
+
|
|
46
|
+
class SourceClass {
|
|
47
|
+
constructor(cls: ArkClass, indent: string = '')
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
SourceClass --|> SourceBase
|
|
51
|
+
|
|
52
|
+
class SourceField {
|
|
53
|
+
constructor(field: ArkField, indent: string = '', initializer: Map<string, string>)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
SourceField --|> SourceBase
|
|
57
|
+
|
|
58
|
+
class SourceMethod {
|
|
59
|
+
constructor(method: ArkMethod, indent: string = '')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
SourceMethod --|> SourceBase
|
|
63
|
+
|
|
64
|
+
class SourceExportInfo {
|
|
65
|
+
constructor(info: ExportInfo, indent: string = '')
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
SourceExportInfo --|> SourceBase
|
|
69
|
+
|
|
70
|
+
class SourceImportInfo {
|
|
71
|
+
constructor(info: ImportInfo, indent: string = '')
|
|
72
|
+
}
|
|
73
|
+
SourceImportInfo --|> SourceBase
|
|
74
|
+
|
|
75
|
+
class TransformerContext {
|
|
76
|
+
getPrinter(): ArkCodeBuffer
|
|
77
|
+
transTemp2Code(temp: Local): string
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
<<Interface>> TransformerContext
|
|
81
|
+
SourceBase --|> TransformerContext
|
|
82
|
+
```
|
package/lib/Config.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ export interface Sdk {
|
|
|
3
3
|
path: string;
|
|
4
4
|
moduleName: string;
|
|
5
5
|
}
|
|
6
|
+
export type SceneOptionsValue = string | number | boolean | (string | number)[] | string[] | null | undefined;
|
|
7
|
+
export interface SceneOptions {
|
|
8
|
+
ignoreFileNames?: string[];
|
|
9
|
+
enableLeadingComments?: boolean;
|
|
10
|
+
[option: string]: SceneOptionsValue;
|
|
11
|
+
}
|
|
6
12
|
export declare class SceneConfig {
|
|
7
13
|
private targetProjectName;
|
|
8
14
|
private targetProjectDirectory;
|
|
@@ -11,7 +17,9 @@ export declare class SceneConfig {
|
|
|
11
17
|
private sdkFiles;
|
|
12
18
|
private sdkFilesMap;
|
|
13
19
|
private projectFiles;
|
|
14
|
-
|
|
20
|
+
private options;
|
|
21
|
+
constructor(options?: SceneOptions);
|
|
22
|
+
getOptions(): SceneOptions;
|
|
15
23
|
/**
|
|
16
24
|
* Set the scene's config,
|
|
17
25
|
* such as the target project's name, the used sdks and the full path.
|
package/lib/Config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,sBAAsB,CAAc;IAE5C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAsD;IAEzE,OAAO,CAAC,YAAY,CAAgB
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAC9G,MAAM,WAAW,YAAY;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CACvC;AAID,qBAAa,WAAW;IACpB,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,sBAAsB,CAAc;IAE5C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,WAAW,CAAsD;IAEzE,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,CAAC,EAAE,YAAY;IAW3B,UAAU,IAAI,YAAY;IAIjC;;;;;;;OAOG;IACI,WAAW,CACd,iBAAiB,EAAE,MAAM,EACzB,sBAAsB,EAAE,MAAM,EAC9B,IAAI,EAAE,GAAG,EAAE,EACX,YAAY,CAAC,EAAE,MAAM,EAAE;IAU3B;;;;;;;;;;;OAWG;IACI,mBAAmB,CAAC,sBAAsB,EAAE,MAAM;IAMlD,aAAa,CAAC,cAAc,EAAE,MAAM;IAmCpC,oBAAoB;IAIpB,yBAAyB;IAIzB,eAAe;IAIf,WAAW;IAIX,cAAc;IAId,aAAa;IAIb,UAAU;CAGpB"}
|
package/lib/Config.js
CHANGED
|
@@ -46,15 +46,29 @@ 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 logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'Config');
|
|
49
|
+
const CONFIG_FILENAME = 'arkanalyzer.json';
|
|
50
|
+
const DEFAULT_CONFIG_FILE = path_1.default.join(__dirname, '../config', CONFIG_FILENAME);
|
|
49
51
|
class SceneConfig {
|
|
50
|
-
constructor() {
|
|
51
|
-
this.targetProjectName =
|
|
52
|
-
this.targetProjectDirectory =
|
|
53
|
-
this.etsSdkPath =
|
|
52
|
+
constructor(options) {
|
|
53
|
+
this.targetProjectName = '';
|
|
54
|
+
this.targetProjectDirectory = '';
|
|
55
|
+
this.etsSdkPath = '';
|
|
54
56
|
this.sdksObj = [];
|
|
55
57
|
this.sdkFiles = [];
|
|
56
58
|
this.sdkFilesMap = new Map();
|
|
57
59
|
this.projectFiles = [];
|
|
60
|
+
try {
|
|
61
|
+
this.options = JSON.parse(fs_1.default.readFileSync(DEFAULT_CONFIG_FILE, 'utf-8'));
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.options = {};
|
|
65
|
+
}
|
|
66
|
+
if (options) {
|
|
67
|
+
this.options = Object.assign(Object.assign({}, this.options), options);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
getOptions() {
|
|
71
|
+
return this.options;
|
|
58
72
|
}
|
|
59
73
|
/**
|
|
60
74
|
* Set the scene's config,
|
|
@@ -87,7 +101,7 @@ class SceneConfig {
|
|
|
87
101
|
buildFromProjectDir(targetProjectDirectory) {
|
|
88
102
|
this.targetProjectDirectory = targetProjectDirectory;
|
|
89
103
|
this.targetProjectName = path_1.default.basename(targetProjectDirectory);
|
|
90
|
-
this.projectFiles = (0, getAllFiles_1.getAllFiles)(targetProjectDirectory, ['.ets', '.ts']);
|
|
104
|
+
this.projectFiles = (0, getAllFiles_1.getAllFiles)(targetProjectDirectory, ['.ets', '.ts'], this.options.ignoreFileNames);
|
|
91
105
|
}
|
|
92
106
|
buildFromJson(configJsonPath) {
|
|
93
107
|
if (fs_1.default.existsSync(configJsonPath)) {
|
|
@@ -108,15 +122,14 @@ class SceneConfig {
|
|
|
108
122
|
logger.error(`Error parsing JSON: ${error}`);
|
|
109
123
|
return;
|
|
110
124
|
}
|
|
111
|
-
const targetProjectName = configurations.targetProjectName
|
|
112
|
-
? configurations.targetProjectName
|
|
113
|
-
: '';
|
|
125
|
+
const targetProjectName = configurations.targetProjectName ? configurations.targetProjectName : '';
|
|
114
126
|
const targetProjectDirectory = configurations.targetProjectDirectory
|
|
115
127
|
? configurations.targetProjectDirectory
|
|
116
128
|
: '';
|
|
117
|
-
const sdks = configurations.sdks
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
const sdks = configurations.sdks ? configurations.sdks : [];
|
|
130
|
+
if (configurations.options) {
|
|
131
|
+
this.options = Object.assign(Object.assign({}, this.options), configurations.options);
|
|
132
|
+
}
|
|
120
133
|
this.buildConfig(targetProjectName, targetProjectDirectory, sdks);
|
|
121
134
|
}
|
|
122
135
|
else {
|
package/lib/Scene.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SceneConfig, Sdk } from './Config';
|
|
1
|
+
import { SceneConfig, SceneOptions, Sdk } from './Config';
|
|
2
2
|
import { VisibleValue } from './core/common/VisibleValue';
|
|
3
3
|
import { ArkClass } from './core/model/ArkClass';
|
|
4
4
|
import { ArkFile } from './core/model/ArkFile';
|
|
@@ -23,7 +23,6 @@ export declare class Scene {
|
|
|
23
23
|
private realProjectDir;
|
|
24
24
|
private moduleScenesMap;
|
|
25
25
|
private modulePath2NameMap;
|
|
26
|
-
private globalImportInfos;
|
|
27
26
|
private moduleSdkMap;
|
|
28
27
|
private projectSdkMap;
|
|
29
28
|
private visibleValue;
|
|
@@ -37,7 +36,10 @@ export declare class Scene {
|
|
|
37
36
|
private ohPkgFilePath;
|
|
38
37
|
private ohPkgContent;
|
|
39
38
|
private buildStage;
|
|
39
|
+
private options;
|
|
40
40
|
constructor();
|
|
41
|
+
getOptions(): SceneOptions;
|
|
42
|
+
clear(): void;
|
|
41
43
|
getStage(): SceneBuildStage;
|
|
42
44
|
/**
|
|
43
45
|
* Build scene object according to the {@link SceneConfig}. This API implements 3 functions.
|
|
@@ -47,17 +49,17 @@ export declare class Scene {
|
|
|
47
49
|
* @example
|
|
48
50
|
* 1. Build Scene object from scene config
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
```typescript
|
|
53
|
+
// build config
|
|
54
|
+
const projectDir = ... ...;
|
|
55
|
+
const sceneConfig = new SceneConfig();
|
|
56
|
+
sceneConfig.buildFromProjectDir(projectDir);
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
// build scene
|
|
59
|
+
const scene = new Scene();
|
|
60
|
+
scene.buildSceneFromProjectDir(sceneConfig);
|
|
61
|
+
```
|
|
62
|
+
*/
|
|
61
63
|
buildSceneFromProjectDir(sceneConfig: SceneConfig): void;
|
|
62
64
|
/**
|
|
63
65
|
* Set the basic information of the scene using a config,
|
|
@@ -102,16 +104,18 @@ export declare class Scene {
|
|
|
102
104
|
* @example
|
|
103
105
|
* 1. get ArkFile based on file signature.
|
|
104
106
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
```typescript
|
|
108
|
+
if (...) {
|
|
109
|
+
const fromSignature = new FileSignature();
|
|
110
|
+
fromSignature.setProjectName(im.getDeclaringArkFile().getProjectName());
|
|
111
|
+
fromSignature.setFileName(fileName);
|
|
112
|
+
return scene.getFile(fromSignature);
|
|
113
|
+
}
|
|
114
|
+
```
|
|
113
115
|
*/
|
|
114
116
|
getFile(fileSignature: FileSignature): ArkFile | null;
|
|
117
|
+
setFile(file: ArkFile): void;
|
|
118
|
+
hasSdkFile(fileSignature: FileSignature): boolean;
|
|
115
119
|
/**
|
|
116
120
|
* Get files of a {@link Scene}. Generally, a project includes several ets/ts files that define the different class. We need to generate {@link ArkFile} objects from these ets/ts files.
|
|
117
121
|
* @returns The array of {@link ArkFile} from `scene.filesMap.values()`.
|
|
@@ -140,10 +144,9 @@ export declare class Scene {
|
|
|
140
144
|
*```
|
|
141
145
|
*/
|
|
142
146
|
getFiles(): ArkFile[];
|
|
143
|
-
|
|
147
|
+
getSdkArkFiles(): ArkFile[];
|
|
144
148
|
getModuleSdkMap(): Map<string, Sdk[]>;
|
|
145
149
|
getProjectSdkMap(): Map<string, Sdk>;
|
|
146
|
-
getFilesMap(): Map<string, ArkFile>;
|
|
147
150
|
getNamespace(namespaceSignature: NamespaceSignature): ArkNamespace | null;
|
|
148
151
|
private getNamespacesMap;
|
|
149
152
|
getNamespaces(): ArkNamespace[];
|
|
@@ -174,16 +177,20 @@ export declare class Scene {
|
|
|
174
177
|
* @example
|
|
175
178
|
* 1. get method from getMethod.
|
|
176
179
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
180
|
+
```typescript
|
|
181
|
+
const methodSignatures = this.CHA.resolveCall(xxx, yyy);
|
|
182
|
+
for (const methodSignature of methodSignatures) {
|
|
183
|
+
const method = this.scene.getMethod(methodSignature);
|
|
184
|
+
... ...
|
|
185
|
+
}
|
|
186
|
+
```
|
|
184
187
|
*/
|
|
185
188
|
getMethods(refresh?: boolean): ArkMethod[];
|
|
186
189
|
addToMethodsMap(method: ArkMethod): void;
|
|
190
|
+
removeMethod(method: ArkMethod): boolean;
|
|
191
|
+
removeClass(arkClass: ArkClass): boolean;
|
|
192
|
+
removeNamespace(namespace: ArkNamespace): boolean;
|
|
193
|
+
removeFile(file: ArkFile): boolean;
|
|
187
194
|
hasMainMethod(): boolean;
|
|
188
195
|
getEntryPoints(): never[];
|
|
189
196
|
/** get values that is visible in curr scope */
|
|
@@ -203,13 +210,14 @@ export declare class Scene {
|
|
|
203
210
|
* @example
|
|
204
211
|
* 1. Infer the type of each class field and method field.
|
|
205
212
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
213
|
+
```typescript
|
|
214
|
+
const scene = new Scene();
|
|
215
|
+
scene.buildSceneFromProjectDir(sceneConfig);
|
|
216
|
+
scene.inferTypes();
|
|
217
|
+
```
|
|
211
218
|
*/
|
|
212
219
|
inferTypes(): void;
|
|
220
|
+
private inferFile;
|
|
213
221
|
/**
|
|
214
222
|
* Iterate all assignment statements in methods,
|
|
215
223
|
* and set the type of left operand based on the type of right operand
|
|
@@ -218,14 +226,13 @@ export declare class Scene {
|
|
|
218
226
|
* @example
|
|
219
227
|
* 1. Infer simple type when scene building.
|
|
220
228
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
229
|
+
```typescript
|
|
230
|
+
let scene = new Scene();
|
|
231
|
+
scene.buildSceneFromProjectDir(config);
|
|
232
|
+
scene.inferSimpleTypes();
|
|
233
|
+
```
|
|
226
234
|
*/
|
|
227
235
|
inferSimpleTypes(): void;
|
|
228
|
-
collectProjectImportInfos(): void;
|
|
229
236
|
getClassMap(): Map<FileSignature | NamespaceSignature, ArkClass[]>;
|
|
230
237
|
getGlobalVariableMap(): Map<FileSignature | NamespaceSignature, Local[]>;
|
|
231
238
|
getStaticInitMethods(): ArkMethod[];
|
|
@@ -239,8 +246,8 @@ export declare class ModuleScene {
|
|
|
239
246
|
private modulePath;
|
|
240
247
|
private moduleOhPkgFilePath;
|
|
241
248
|
private ohPkgContent;
|
|
242
|
-
constructor();
|
|
243
|
-
|
|
249
|
+
constructor(projectScene: Scene);
|
|
250
|
+
ModuleSceneBuilder(moduleName: string, modulePath: string, recursively?: boolean): void;
|
|
244
251
|
/**
|
|
245
252
|
* get oh-package.json5
|
|
246
253
|
*/
|
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,GAAG,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../src/Scene.ts"],"names":[],"mappings":"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"}
|