arkanalyzer 1.0.17 → 1.0.19

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 (134) hide show
  1. package/lib/callgraph/pointerAnalysis/Pag.d.ts +3 -2
  2. package/lib/callgraph/pointerAnalysis/Pag.d.ts.map +1 -1
  3. package/lib/callgraph/pointerAnalysis/Pag.js +5 -3
  4. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts +4 -4
  5. package/lib/callgraph/pointerAnalysis/PagBuilder.d.ts.map +1 -1
  6. package/lib/callgraph/pointerAnalysis/PagBuilder.js +5 -4
  7. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts +2 -0
  8. package/lib/callgraph/pointerAnalysis/PointerAnalysis.d.ts.map +1 -1
  9. package/lib/callgraph/pointerAnalysis/PointerAnalysis.js +11 -9
  10. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts +8 -1
  11. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.d.ts.map +1 -1
  12. package/lib/callgraph/pointerAnalysis/PointerAnalysisConfig.js +27 -3
  13. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts +30 -6
  14. package/lib/callgraph/pointerAnalysis/PtsDS.d.ts.map +1 -1
  15. package/lib/callgraph/pointerAnalysis/PtsDS.js +86 -5
  16. package/lib/core/base/Decorator.d.ts +1 -0
  17. package/lib/core/base/Decorator.d.ts.map +1 -1
  18. package/lib/core/base/Decorator.js +4 -1
  19. package/lib/core/base/Stmt.d.ts +3 -0
  20. package/lib/core/base/Stmt.d.ts.map +1 -1
  21. package/lib/core/base/Stmt.js +34 -0
  22. package/lib/core/base/Type.d.ts +45 -3
  23. package/lib/core/base/Type.d.ts.map +1 -1
  24. package/lib/core/base/Type.js +84 -4
  25. package/lib/core/base/TypeExpr.d.ts +72 -0
  26. package/lib/core/base/TypeExpr.d.ts.map +1 -0
  27. package/lib/core/base/TypeExpr.js +155 -0
  28. package/lib/core/common/ArkIRTransformer.d.ts +1 -0
  29. package/lib/core/common/ArkIRTransformer.d.ts.map +1 -1
  30. package/lib/core/common/ArkIRTransformer.js +46 -23
  31. package/lib/core/common/ArkValueTransformer.d.ts +1 -0
  32. package/lib/core/common/ArkValueTransformer.d.ts.map +1 -1
  33. package/lib/core/common/ArkValueTransformer.js +66 -16
  34. package/lib/core/common/IRInference.d.ts +5 -1
  35. package/lib/core/common/IRInference.d.ts.map +1 -1
  36. package/lib/core/common/IRInference.js +71 -0
  37. package/lib/core/common/ModelUtils.d.ts +3 -1
  38. package/lib/core/common/ModelUtils.d.ts.map +1 -1
  39. package/lib/core/common/ModelUtils.js +23 -1
  40. package/lib/core/common/TypeInference.d.ts +6 -0
  41. package/lib/core/common/TypeInference.d.ts.map +1 -1
  42. package/lib/core/common/TypeInference.js +82 -14
  43. package/lib/core/{common → graph/builder}/CfgBuilder.d.ts +34 -46
  44. package/lib/core/graph/builder/CfgBuilder.d.ts.map +1 -0
  45. package/lib/core/graph/builder/CfgBuilder.js +1139 -0
  46. package/lib/core/graph/builder/ConditionBuilder.d.ts +16 -0
  47. package/lib/core/graph/builder/ConditionBuilder.d.ts.map +1 -0
  48. package/lib/core/graph/builder/ConditionBuilder.js +252 -0
  49. package/lib/core/graph/builder/LoopBuilder.d.ts +21 -0
  50. package/lib/core/graph/builder/LoopBuilder.d.ts.map +1 -0
  51. package/lib/core/graph/builder/LoopBuilder.js +251 -0
  52. package/lib/core/graph/builder/SwitchBuilder.d.ts +12 -0
  53. package/lib/core/graph/builder/SwitchBuilder.d.ts.map +1 -0
  54. package/lib/core/graph/builder/SwitchBuilder.js +152 -0
  55. package/lib/core/graph/builder/TrapBuilder.d.ts +17 -0
  56. package/lib/core/graph/builder/TrapBuilder.d.ts.map +1 -0
  57. package/lib/core/graph/builder/TrapBuilder.js +272 -0
  58. package/lib/core/model/ArkMethod.d.ts +1 -1
  59. package/lib/core/model/ArkMethod.js +1 -1
  60. package/lib/core/model/ArkSignature.d.ts +9 -1
  61. package/lib/core/model/ArkSignature.d.ts.map +1 -1
  62. package/lib/core/model/ArkSignature.js +17 -1
  63. package/lib/core/model/builder/ArkClassBuilder.d.ts.map +1 -1
  64. package/lib/core/model/builder/ArkClassBuilder.js +2 -1
  65. package/lib/core/model/builder/ArkMethodBuilder.js +1 -1
  66. package/lib/core/{common → model/builder}/BodyBuilder.d.ts +5 -5
  67. package/lib/core/model/builder/BodyBuilder.d.ts.map +1 -0
  68. package/lib/core/{common → model/builder}/BodyBuilder.js +12 -12
  69. package/lib/core/model/builder/builderUtils.d.ts.map +1 -1
  70. package/lib/core/model/builder/builderUtils.js +79 -5
  71. package/lib/save/JsonPrinter.d.ts +1 -1
  72. package/lib/save/JsonPrinter.d.ts.map +1 -1
  73. package/lib/save/JsonPrinter.js +2 -2
  74. package/lib/save/PrinterBuilder.d.ts +22 -0
  75. package/lib/save/PrinterBuilder.d.ts.map +1 -1
  76. package/lib/save/PrinterBuilder.js +54 -1
  77. package/lib/save/arkir/ArkIRClassPrinter.d.ts +14 -0
  78. package/lib/save/arkir/ArkIRClassPrinter.d.ts.map +1 -0
  79. package/lib/save/arkir/ArkIRClassPrinter.js +92 -0
  80. package/lib/save/arkir/ArkIRFieldPrinter.d.ts +12 -0
  81. package/lib/save/arkir/ArkIRFieldPrinter.d.ts.map +1 -0
  82. package/lib/save/arkir/ArkIRFieldPrinter.js +64 -0
  83. package/lib/save/arkir/ArkIRFilePrinter.d.ts +13 -0
  84. package/lib/save/arkir/ArkIRFilePrinter.d.ts.map +1 -0
  85. package/lib/save/arkir/ArkIRFilePrinter.js +54 -0
  86. package/lib/save/arkir/ArkIRMethodPrinter.d.ts +17 -0
  87. package/lib/save/arkir/ArkIRMethodPrinter.d.ts.map +1 -0
  88. package/lib/save/arkir/ArkIRMethodPrinter.js +159 -0
  89. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts +12 -0
  90. package/lib/save/arkir/ArkIRNamespacePrinter.d.ts.map +1 -0
  91. package/lib/save/arkir/ArkIRNamespacePrinter.js +66 -0
  92. package/lib/save/base/BasePrinter.d.ts +24 -0
  93. package/lib/save/base/BasePrinter.d.ts.map +1 -0
  94. package/lib/save/base/BasePrinter.js +70 -0
  95. package/lib/save/base/ExportPrinter.d.ts +9 -0
  96. package/lib/save/base/ExportPrinter.d.ts.map +1 -0
  97. package/lib/save/base/ExportPrinter.js +67 -0
  98. package/lib/save/base/ImportPrinter.d.ts +10 -0
  99. package/lib/save/base/ImportPrinter.d.ts.map +1 -0
  100. package/lib/save/base/ImportPrinter.js +92 -0
  101. package/lib/save/{source/SourceUtils.d.ts → base/PrinterUtils.d.ts} +2 -2
  102. package/lib/save/{source/SourceUtils.d.ts.map → base/PrinterUtils.d.ts.map} +1 -1
  103. package/lib/save/{source/SourceUtils.js → base/PrinterUtils.js} +10 -10
  104. package/lib/save/source/SourceBase.d.ts +2 -11
  105. package/lib/save/source/SourceBase.d.ts.map +1 -1
  106. package/lib/save/source/SourceBase.js +3 -25
  107. package/lib/save/source/SourceBody.js +3 -3
  108. package/lib/save/source/SourceClass.d.ts +2 -1
  109. package/lib/save/source/SourceClass.d.ts.map +1 -1
  110. package/lib/save/source/SourceClass.js +18 -17
  111. package/lib/save/source/SourceFilePrinter.d.ts +1 -1
  112. package/lib/save/source/SourceFilePrinter.d.ts.map +1 -1
  113. package/lib/save/source/SourceFilePrinter.js +9 -10
  114. package/lib/save/source/SourceMethod.d.ts +1 -1
  115. package/lib/save/source/SourceMethod.d.ts.map +1 -1
  116. package/lib/save/source/SourceMethod.js +37 -22
  117. package/lib/save/source/SourceNamespace.d.ts.map +1 -1
  118. package/lib/save/source/SourceNamespace.js +6 -6
  119. package/lib/save/source/SourceStmt.d.ts +1 -1
  120. package/lib/save/source/SourceStmt.d.ts.map +1 -1
  121. package/lib/save/source/SourceStmt.js +29 -42
  122. package/lib/save/source/SourceTransformer.d.ts +5 -1
  123. package/lib/save/source/SourceTransformer.d.ts.map +1 -1
  124. package/lib/save/source/SourceTransformer.js +107 -33
  125. package/lib/utils/SparseBitVector.d.ts +11 -2
  126. package/lib/utils/SparseBitVector.d.ts.map +1 -1
  127. package/lib/utils/SparseBitVector.js +70 -3
  128. package/package.json +1 -1
  129. package/lib/core/common/BodyBuilder.d.ts.map +0 -1
  130. package/lib/core/common/CfgBuilder.d.ts.map +0 -1
  131. package/lib/core/common/CfgBuilder.js +0 -1886
  132. package/lib/save/source/SourceModule.d.ts +0 -16
  133. package/lib/save/source/SourceModule.d.ts.map +0 -1
  134. package/lib/save/source/SourceModule.js +0 -125
@@ -1 +1 @@
1
- {"version":3,"file":"builderUtils.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/builderUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EACH,SAAS,EAIT,WAAW,EAEX,IAAI,EAIP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAGH,eAAe,EAElB,MAAM,oBAAoB,CAAC;AAQ5B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,GAAG,MAAM,CAUlE;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,GAAG,MAAM,CAYxF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAUxF;AA2BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAUpD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxG;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,wBAAwB,CAAC,EACtD,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,EAAE,CAmB/G;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,qBA4GvI;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CA8ChG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,QAM3F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,wBAAwB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAC9E,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAkF9E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,QA8CjD"}
1
+ {"version":3,"file":"builderUtils.d.ts","sourceRoot":"","sources":["../../../../src/core/model/builder/builderUtils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EACH,SAAS,EAIT,WAAW,EAGX,IAAI,EAIP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAGH,eAAe,EAElB,MAAM,oBAAoB,CAAC;AAc5B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,GAAG,MAAM,CAUlE;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,GAAG,MAAM,CAYxF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAUxF;AA2BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAUpD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAkBxG;AAED,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,wBAAwB,CAAC,EACtD,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,EAAE,CAmB/G;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,qBA4GvI;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CA8ChG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,QAM3F;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,wBAAwB,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAC9E,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CA0F9E;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,QA8CjD"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2024 Huawei Device Co., Ltd.
3
+ * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
5
5
  * you may not use this file except in compliance with the License.
6
6
  * You may obtain a copy of the License at
@@ -54,6 +54,11 @@ const ArkClassBuilder_1 = require("./ArkClassBuilder");
54
54
  const Builtin_1 = require("../../common/Builtin");
55
55
  const ArkBaseModel_1 = require("../ArkBaseModel");
56
56
  const ArkValueTransformer_1 = require("../../common/ArkValueTransformer");
57
+ const TypeExpr_1 = require("../../base/TypeExpr");
58
+ const TSConst_1 = require("../../common/TSConst");
59
+ const ArkSignatureBuilder_1 = require("./ArkSignatureBuilder");
60
+ const Ref_1 = require("../../base/Ref");
61
+ const Local_1 = require("../../base/Local");
57
62
  const logger = logger_1.default.getLogger(logger_1.LOG_MODULE_TYPE.ARKANALYZER, 'builderUtils');
58
63
  function handleQualifiedName(node) {
59
64
  let right = node.right.text;
@@ -354,12 +359,17 @@ function tsNode2Type(typeNode, sourceFile, arkInstance) {
354
359
  return new Type_1.UnclearReferenceType(parameterTypeStr, genericTypes);
355
360
  }
356
361
  }
357
- else if (ohos_typescript_1.default.isUnionTypeNode(typeNode)) {
358
- let unionTypePara = [];
362
+ else if (ohos_typescript_1.default.isUnionTypeNode(typeNode) || ohos_typescript_1.default.isIntersectionTypeNode(typeNode)) {
363
+ let multipleTypePara = [];
359
364
  typeNode.types.forEach((tmpType) => {
360
- unionTypePara.push(tsNode2Type(tmpType, sourceFile, arkInstance));
365
+ multipleTypePara.push(tsNode2Type(tmpType, sourceFile, arkInstance));
361
366
  });
362
- return new Type_1.UnionType(unionTypePara);
367
+ if (ohos_typescript_1.default.isUnionTypeNode(typeNode)) {
368
+ return new Type_1.UnionType(multipleTypePara);
369
+ }
370
+ else {
371
+ return new Type_1.IntersectionType(multipleTypePara);
372
+ }
363
373
  }
364
374
  else if (ohos_typescript_1.default.isLiteralTypeNode(typeNode)) {
365
375
  return ArkValueTransformer_1.ArkValueTransformer.resolveLiteralTypeNode(typeNode, sourceFile);
@@ -426,6 +436,12 @@ function tsNode2Type(typeNode, sourceFile, arkInstance) {
426
436
  else if (ohos_typescript_1.default.isParenthesizedTypeNode(typeNode)) {
427
437
  return tsNode2Type(typeNode.type, sourceFile, arkInstance);
428
438
  }
439
+ else if (ohos_typescript_1.default.isTypeOperatorNode(typeNode)) {
440
+ return buildTypeFromTypeOperator(typeNode, sourceFile, arkInstance);
441
+ }
442
+ else if (ohos_typescript_1.default.isTypeQueryNode(typeNode)) {
443
+ return buildTypeFromTypeQuery(typeNode, sourceFile, arkInstance);
444
+ }
429
445
  else if (typeNode.kind === ohos_typescript_1.default.SyntaxKind.ObjectKeyword) {
430
446
  return new Type_1.ClassType(Builtin_1.Builtin.OBJECT_CLASS_SIGNATURE);
431
447
  }
@@ -482,3 +498,61 @@ function buildTypeFromPreStr(preStr) {
482
498
  return TypeInference_1.TypeInference.buildTypeFromStr(postStr);
483
499
  }
484
500
  exports.buildTypeFromPreStr = buildTypeFromPreStr;
501
+ function buildTypeFromTypeOperator(typeOperatorNode, sourceFile, arkInstance) {
502
+ const typeNode = typeOperatorNode.type;
503
+ let type = tsNode2Type(typeNode, sourceFile, arkInstance);
504
+ switch (typeOperatorNode.operator) {
505
+ case (ohos_typescript_1.default.SyntaxKind.ReadonlyKeyword): {
506
+ if (type instanceof Type_1.ArrayType || type instanceof Type_1.TupleType) {
507
+ type.setReadonlyFlag(true);
508
+ }
509
+ return type;
510
+ }
511
+ case (ohos_typescript_1.default.SyntaxKind.KeyOfKeyword):
512
+ return new TypeExpr_1.KeyofTypeExpr(type);
513
+ case (ohos_typescript_1.default.SyntaxKind.UniqueKeyword):
514
+ return Type_1.UnknownType.getInstance();
515
+ default:
516
+ return Type_1.UnknownType.getInstance();
517
+ }
518
+ }
519
+ function buildTypeFromTypeQuery(typeQueryNode, sourceFile, arkInstance) {
520
+ var _a, _b, _c, _d, _e, _f;
521
+ const exprNameNode = typeQueryNode.exprName;
522
+ let opValue;
523
+ if (ohos_typescript_1.default.isQualifiedName(exprNameNode)) {
524
+ if (exprNameNode.left.getText(sourceFile) === TSConst_1.THIS_NAME) {
525
+ const fieldName = exprNameNode.right.getText(sourceFile);
526
+ if (arkInstance instanceof ArkMethod_1.ArkMethod) {
527
+ const fieldSignature = (_b = (_a = arkInstance.getDeclaringArkClass().getFieldWithName(fieldName)) === null || _a === void 0 ? void 0 : _a.getSignature()) !== null && _b !== void 0 ? _b : ArkSignatureBuilder_1.ArkSignatureBuilder.buildFieldSignatureFromFieldName(fieldName);
528
+ const baseLocal = (_d = (_c = arkInstance.getBody()) === null || _c === void 0 ? void 0 : _c.getLocals().get(TSConst_1.THIS_NAME)) !== null && _d !== void 0 ? _d : new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkInstance.getDeclaringArkClass().getSignature(), arkInstance.getDeclaringArkClass().getGenericsTypes()));
529
+ opValue = new Ref_1.ArkInstanceFieldRef(baseLocal, fieldSignature);
530
+ }
531
+ else if (arkInstance instanceof ArkClass_1.ArkClass) {
532
+ const fieldSignature = (_f = (_e = arkInstance.getFieldWithName(fieldName)) === null || _e === void 0 ? void 0 : _e.getSignature()) !== null && _f !== void 0 ? _f : ArkSignatureBuilder_1.ArkSignatureBuilder.buildFieldSignatureFromFieldName(fieldName);
533
+ const baseLocal = new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkInstance.getSignature(), arkInstance.getGenericsTypes()));
534
+ opValue = new Ref_1.ArkInstanceFieldRef(baseLocal, fieldSignature);
535
+ }
536
+ else {
537
+ const fieldSignature = arkInstance.getSignature();
538
+ const baseLocal = new Local_1.Local(TSConst_1.THIS_NAME, new Type_1.ClassType(arkInstance.getDeclaringArkClass().getSignature(), arkInstance.getDeclaringArkClass().getGenericsTypes()));
539
+ opValue = new Ref_1.ArkInstanceFieldRef(baseLocal, fieldSignature);
540
+ }
541
+ }
542
+ else {
543
+ const exprName = exprNameNode.getText(sourceFile);
544
+ opValue = new Local_1.Local(exprName, Type_1.UnknownType.getInstance());
545
+ }
546
+ }
547
+ else {
548
+ const exprName = exprNameNode.escapedText.toString();
549
+ opValue = new Local_1.Local(exprName, Type_1.UnknownType.getInstance());
550
+ }
551
+ let expr = new TypeExpr_1.TypeQueryExpr(opValue);
552
+ if (typeQueryNode.typeArguments) {
553
+ for (const typeArgument of typeQueryNode.typeArguments) {
554
+ expr.addGenericType(tsNode2Type(typeArgument, sourceFile, arkInstance));
555
+ }
556
+ }
557
+ return expr;
558
+ }
@@ -21,7 +21,7 @@ export declare class JsonPrinter extends Printer {
21
21
  private serializeClassSignature;
22
22
  private serializeFieldSignature;
23
23
  private serializeMethodSignature;
24
- private serializeLocalSignature;
24
+ private serializeAliasTypeSignature;
25
25
  private serializeCfg;
26
26
  private serializeBasicBlock;
27
27
  private serializeLocal;
@@ -1 +1 @@
1
- {"version":3,"file":"JsonPrinter.d.ts","sourceRoot":"","sources":["../../src/save/JsonPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAiFhD,qBAAa,WAAY,SAAQ,OAAO;IACxB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAI7B,IAAI,IAAI,MAAM;IAKrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,aAAa;IAoHrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAyJtB,OAAO,CAAC,aAAa;CAmCxB"}
1
+ {"version":3,"file":"JsonPrinter.d.ts","sourceRoot":"","sources":["../../src/save/JsonPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAiFhD,qBAAa,WAAY,SAAQ,OAAO;IACxB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,OAAO;IAI7B,IAAI,IAAI,MAAM;IAKrB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,aAAa;IAoHrB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,cAAc;IAyJtB,OAAO,CAAC,aAAa;CAmCxB"}
@@ -244,7 +244,7 @@ class JsonPrinter extends Printer_1.Printer {
244
244
  _: 'AliasType',
245
245
  name: type.getName(),
246
246
  originalType: this.serializeType(type.getOriginalType()),
247
- signature: this.serializeLocalSignature(type.getSignature()),
247
+ signature: this.serializeAliasTypeSignature(type.getSignature()),
248
248
  };
249
249
  }
250
250
  else if (type instanceof Type_1.AnnotationNamespaceType) {
@@ -315,7 +315,7 @@ class JsonPrinter extends Printer_1.Printer {
315
315
  returnType: this.serializeType(method.getType()),
316
316
  };
317
317
  }
318
- serializeLocalSignature(signature) {
318
+ serializeAliasTypeSignature(signature) {
319
319
  return {
320
320
  name: signature.getName(),
321
321
  method: this.serializeMethodSignature(signature.getDeclaringMethodSignature()),
@@ -1,5 +1,7 @@
1
1
  import { ArkFile } from '../core/model/ArkFile';
2
2
  import { Printer } from './Printer';
3
+ import { Scene } from '../Scene';
4
+ import { PrinterOptions } from './base/BasePrinter';
3
5
  /**
4
6
  * @example
5
7
  * // dump method IR to ts source
@@ -28,5 +30,25 @@ export declare class PrinterBuilder {
28
30
  dumpToDot(arkFile: ArkFile, output?: string | undefined): void;
29
31
  dumpToTs(arkFile: ArkFile, output?: string | undefined): void;
30
32
  dumpToJson(arkFile: ArkFile, output?: string | undefined): void;
33
+ dumpToIR(arkFile: ArkFile, output?: string | undefined): void;
34
+ }
35
+ /**
36
+ * @example
37
+ * // dump scene
38
+ * let scenePrinter = new ScenePrinter(scene, 'output');
39
+ * scenePrinter.dumpToTs();
40
+ * scenePrinter.dumpToIR();
41
+ *
42
+ * @category save
43
+ */
44
+ export declare class ScenePrinter {
45
+ scene: Scene;
46
+ outputDir: string;
47
+ printer: PrinterBuilder;
48
+ constructor(scene: Scene, outputDir: string, option?: PrinterOptions);
49
+ dumpToDot(): void;
50
+ dumpToTs(): void;
51
+ dumpToJson(): void;
52
+ dumpToIR(): void;
31
53
  }
32
54
  //# sourceMappingURL=PrinterBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrinterBuilder.d.ts","sourceRoot":"","sources":["../../src/save/PrinterBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACvB,SAAS,EAAE,MAAM,CAAC;gBACN,SAAS,GAAE,MAAW;WAIpB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAIlD,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAQzC,SAAS,CACZ,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAAM,GAAG,SAAqB,GACvC,IAAI;IAWA,QAAQ,CACX,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAAM,GAAG,SAAqB,GACvC,IAAI;IAcA,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,SAAqB,GAAG,IAAI;CAUpF"}
1
+ {"version":3,"file":"PrinterBuilder.d.ts","sourceRoot":"","sources":["../../src/save/PrinterBuilder.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,cAAc,EAAqB,MAAM,oBAAoB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACvB,SAAS,EAAE,MAAM,CAAC;gBACN,SAAS,GAAE,MAAW;WAIpB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAIlD,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAQzC,SAAS,CACZ,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAAM,GAAG,SAAqB,GACvC,IAAI;IAWA,QAAQ,CACX,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAAM,GAAG,SAAqB,GACvC,IAAI;IAcA,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,MAAM,GAAG,SAAqB,GAAG,IAAI;IAW1E,QAAQ,CACX,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAAM,GAAG,SAAqB,GACvC,IAAI;CAaV;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;gBAEZ,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;IAS7D,SAAS;IAMT,QAAQ;IAOR,UAAU;IAMV,QAAQ;CAKlB"}
@@ -17,12 +17,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.PrinterBuilder = void 0;
20
+ exports.ScenePrinter = exports.PrinterBuilder = void 0;
21
21
  const fs_1 = __importDefault(require("fs"));
22
22
  const path_1 = __importDefault(require("path"));
23
23
  const DotPrinter_1 = require("./DotPrinter");
24
24
  const SourceFilePrinter_1 = require("./source/SourceFilePrinter");
25
25
  const JsonPrinter_1 = require("./JsonPrinter");
26
+ const ArkIRFilePrinter_1 = require("./arkir/ArkIRFilePrinter");
27
+ const BasePrinter_1 = require("./base/BasePrinter");
26
28
  /**
27
29
  * @example
28
30
  * // dump method IR to ts source
@@ -88,5 +90,56 @@ class PrinterBuilder {
88
90
  let printer = new JsonPrinter_1.JsonPrinter(arkFile);
89
91
  PrinterBuilder.dump(printer, filename);
90
92
  }
93
+ dumpToIR(arkFile, output = undefined) {
94
+ let filename = output;
95
+ if (filename === undefined) {
96
+ filename = path_1.default.join(this.getOutputDir(arkFile), arkFile.getName());
97
+ }
98
+ filename += '.ir';
99
+ fs_1.default.mkdirSync(path_1.default.dirname(filename), { recursive: true });
100
+ let printer = new ArkIRFilePrinter_1.ArkIRFilePrinter(arkFile);
101
+ PrinterBuilder.dump(printer, filename);
102
+ }
91
103
  }
92
104
  exports.PrinterBuilder = PrinterBuilder;
105
+ /**
106
+ * @example
107
+ * // dump scene
108
+ * let scenePrinter = new ScenePrinter(scene, 'output');
109
+ * scenePrinter.dumpToTs();
110
+ * scenePrinter.dumpToIR();
111
+ *
112
+ * @category save
113
+ */
114
+ class ScenePrinter {
115
+ constructor(scene, outputDir, option) {
116
+ this.scene = scene;
117
+ this.outputDir = outputDir;
118
+ this.printer = new PrinterBuilder(outputDir);
119
+ if (option) {
120
+ (0, BasePrinter_1.setPrinterOptions)(option);
121
+ }
122
+ }
123
+ dumpToDot() {
124
+ for (let f of this.scene.getFiles()) {
125
+ this.printer.dumpToDot(f);
126
+ }
127
+ }
128
+ dumpToTs() {
129
+ for (let f of this.scene.getFiles()) {
130
+ let relativePath = path_1.default.relative(f.getProjectDir(), f.getFilePath());
131
+ this.printer.dumpToTs(f, path_1.default.join(this.outputDir, relativePath));
132
+ }
133
+ }
134
+ dumpToJson() {
135
+ for (let f of this.scene.getFiles()) {
136
+ this.printer.dumpToJson(f);
137
+ }
138
+ }
139
+ dumpToIR() {
140
+ for (let f of this.scene.getFiles()) {
141
+ this.printer.dumpToIR(f);
142
+ }
143
+ }
144
+ }
145
+ exports.ScenePrinter = ScenePrinter;
@@ -0,0 +1,14 @@
1
+ import { ArkClass } from '../../core/model/ArkClass';
2
+ import { BasePrinter, Dump } from '../base/BasePrinter';
3
+ /**
4
+ * @category save
5
+ */
6
+ export declare class ArkIRClassPrinter extends BasePrinter {
7
+ protected cls: ArkClass;
8
+ constructor(cls: ArkClass, indent?: string);
9
+ getLine(): number;
10
+ dump(): string;
11
+ protected printMethods(): Dump[];
12
+ private printFields;
13
+ }
14
+ //# sourceMappingURL=ArkIRClassPrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkIRClassPrinter.d.ts","sourceRoot":"","sources":["../../../src/save/arkir/ArkIRClassPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAEL,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAE,MAAW;IAK9C,OAAO,IAAI,MAAM;IAIjB,IAAI,IAAI,MAAM;IA8CrB,SAAS,CAAC,YAAY,IAAI,IAAI,EAAE;IAkBhC,OAAO,CAAC,WAAW;CAOtB"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ArkIRClassPrinter = void 0;
18
+ const ArkMetadata_1 = require("../../core/model/ArkMetadata");
19
+ const BasePrinter_1 = require("../base/BasePrinter");
20
+ const ArkIRFieldPrinter_1 = require("./ArkIRFieldPrinter");
21
+ const ArkIRMethodPrinter_1 = require("./ArkIRMethodPrinter");
22
+ /**
23
+ * @category save
24
+ */
25
+ class ArkIRClassPrinter extends BasePrinter_1.BasePrinter {
26
+ constructor(cls, indent = '') {
27
+ super(indent);
28
+ this.cls = cls;
29
+ }
30
+ getLine() {
31
+ return this.cls.getLine();
32
+ }
33
+ dump() {
34
+ this.printer.clear();
35
+ const commentsMetadata = this.cls.getMetadata(ArkMetadata_1.ArkMetadataKind.LEADING_COMMENTS);
36
+ if (commentsMetadata instanceof ArkMetadata_1.CommentsMetadata) {
37
+ this.printComments(commentsMetadata);
38
+ }
39
+ this.printDecorator(this.cls.getDecorators());
40
+ // print export class name<> + extends c0 implements x1, x2 {
41
+ this.printer
42
+ .writeIndent()
43
+ .writeSpace(this.modifiersToString(this.cls.getModifiers()))
44
+ .write(`${this.classOriginTypeToString(this.cls.getCategory())} `);
45
+ this.printer.write(this.cls.getName());
46
+ const genericsTypes = this.cls.getGenericsTypes();
47
+ if (genericsTypes) {
48
+ this.printer.write(`<${genericsTypes.map((v) => v.toString()).join(', ')}>`);
49
+ }
50
+ if (this.cls.getSuperClassName() && !this.cls.hasComponentDecorator()) {
51
+ this.printer.write(` extends ${this.cls.getSuperClassName()}`);
52
+ }
53
+ if (this.cls.getImplementedInterfaceNames().length > 0) {
54
+ this.printer.write(` implements ${this.cls.getImplementedInterfaceNames().join(', ')}`);
55
+ }
56
+ this.printer.writeLine(' {');
57
+ this.printer.incIndent();
58
+ let items = [];
59
+ items.push(...this.printFields());
60
+ items.push(...this.printMethods());
61
+ items.sort((a, b) => a.getLine() - b.getLine());
62
+ items.forEach((v) => {
63
+ this.printer.write(v.dump());
64
+ });
65
+ this.printer.decIndent();
66
+ this.printer.writeIndent().writeLine('}');
67
+ return this.printer.toString();
68
+ }
69
+ printMethods() {
70
+ let items = [];
71
+ for (let method of this.cls.getMethods()) {
72
+ items.push(new ArkIRMethodPrinter_1.ArkIRMethodPrinter(method, this.printer.getIndent()));
73
+ }
74
+ let instanceInitMethod = this.cls.getInstanceInitMethod();
75
+ if (instanceInitMethod.getImplementationSignature()) {
76
+ items.push(new ArkIRMethodPrinter_1.ArkIRMethodPrinter(this.cls.getInstanceInitMethod(), this.printer.getIndent()));
77
+ }
78
+ let staticInitMethod = this.cls.getStaticInitMethod();
79
+ if (staticInitMethod.getImplementationSignature()) {
80
+ items.push(new ArkIRMethodPrinter_1.ArkIRMethodPrinter(this.cls.getStaticInitMethod(), this.printer.getIndent()));
81
+ }
82
+ return items;
83
+ }
84
+ printFields() {
85
+ let items = [];
86
+ for (let field of this.cls.getFields()) {
87
+ items.push(new ArkIRFieldPrinter_1.ArkIRFieldPrinter(field, this.printer.getIndent()));
88
+ }
89
+ return items;
90
+ }
91
+ }
92
+ exports.ArkIRClassPrinter = ArkIRClassPrinter;
@@ -0,0 +1,12 @@
1
+ import { ArkField } from '../../core/model/ArkField';
2
+ import { BasePrinter } from '../base/BasePrinter';
3
+ /**
4
+ * @category save
5
+ */
6
+ export declare class ArkIRFieldPrinter extends BasePrinter {
7
+ private field;
8
+ constructor(field: ArkField, indent?: string);
9
+ getLine(): number;
10
+ dump(): string;
11
+ }
12
+ //# sourceMappingURL=ArkIRFieldPrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkIRFieldPrinter.d.ts","sourceRoot":"","sources":["../../../src/save/arkir/ArkIRFieldPrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,QAAQ,EAAiB,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAC9C,OAAO,CAAC,KAAK,CAAW;gBAEL,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAE,MAAW;IAKhD,OAAO,IAAI,MAAM;IAGjB,IAAI,IAAI,MAAM;CAiCxB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ArkIRFieldPrinter = void 0;
18
+ const ArkField_1 = require("../../core/model/ArkField");
19
+ const Type_1 = require("../../core/base/Type");
20
+ const ArkMetadata_1 = require("../../core/model/ArkMetadata");
21
+ const BasePrinter_1 = require("../base/BasePrinter");
22
+ /**
23
+ * @category save
24
+ */
25
+ class ArkIRFieldPrinter extends BasePrinter_1.BasePrinter {
26
+ constructor(field, indent = '') {
27
+ super(indent);
28
+ this.field = field;
29
+ }
30
+ getLine() {
31
+ return this.field.getOriginPosition().getLineNo();
32
+ }
33
+ dump() {
34
+ this.printer.clear();
35
+ const commentsMetadata = this.field.getMetadata(ArkMetadata_1.ArkMetadataKind.LEADING_COMMENTS);
36
+ if (commentsMetadata instanceof ArkMetadata_1.CommentsMetadata) {
37
+ this.printComments(commentsMetadata);
38
+ }
39
+ this.printDecorator(this.field.getDecorators());
40
+ this.printer.writeIndent();
41
+ if (this.field.getCategory() !== ArkField_1.FieldCategory.ENUM_MEMBER) {
42
+ this.printer.writeSpace(this.modifiersToString(this.field.getModifiers()));
43
+ }
44
+ this.printer.write(this.field.getName());
45
+ if (this.field.getQuestionToken()) {
46
+ this.printer.write('?');
47
+ }
48
+ if (this.field.getExclamationToken()) {
49
+ this.printer.write('!');
50
+ }
51
+ // property.getInitializer() PropertyAccessExpression ArrowFunction ClassExpression FirstLiteralToken StringLiteral
52
+ if (!(this.field.getType() instanceof Type_1.UnknownType) && this.field.getCategory() !== ArkField_1.FieldCategory.ENUM_MEMBER) {
53
+ this.printer.write(`: ${this.field.getType().toString()}`);
54
+ }
55
+ if (this.field.getCategory() === ArkField_1.FieldCategory.ENUM_MEMBER) {
56
+ this.printer.writeLine(',');
57
+ }
58
+ else {
59
+ this.printer.writeLine(';');
60
+ }
61
+ return this.printer.toString();
62
+ }
63
+ }
64
+ exports.ArkIRFieldPrinter = ArkIRFieldPrinter;
@@ -0,0 +1,13 @@
1
+ import { ArkFile } from '../../core/model/ArkFile';
2
+ import { Dump } from '../base/BasePrinter';
3
+ import { Printer } from '../Printer';
4
+ /**
5
+ * @category save
6
+ */
7
+ export declare class ArkIRFilePrinter extends Printer {
8
+ arkFile: ArkFile;
9
+ items: Dump[];
10
+ constructor(arkFile: ArkFile);
11
+ dump(): string;
12
+ }
13
+ //# sourceMappingURL=ArkIRFilePrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkIRFilePrinter.d.ts","sourceRoot":"","sources":["../../../src/save/arkir/ArkIRFilePrinter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMrC;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,OAAO;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,IAAI,EAAE,CAAM;gBAEP,OAAO,EAAE,OAAO;IAKrB,IAAI,IAAI,MAAM;CAyBxB"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2025 Huawei Device Co., Ltd.
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ArkIRFilePrinter = void 0;
18
+ const Printer_1 = require("../Printer");
19
+ const ArkIRClassPrinter_1 = require("./ArkIRClassPrinter");
20
+ const ExportPrinter_1 = require("../base/ExportPrinter");
21
+ const ImportPrinter_1 = require("../base/ImportPrinter");
22
+ const ArkIRNamespacePrinter_1 = require("./ArkIRNamespacePrinter");
23
+ /**
24
+ * @category save
25
+ */
26
+ class ArkIRFilePrinter extends Printer_1.Printer {
27
+ constructor(arkFile) {
28
+ super();
29
+ this.items = [];
30
+ this.arkFile = arkFile;
31
+ }
32
+ dump() {
33
+ // print imports
34
+ this.items.push(...(0, ImportPrinter_1.printImports)(this.arkFile.getImportInfos(), this.printer.getIndent()));
35
+ // print namespace
36
+ for (let ns of this.arkFile.getNamespaces()) {
37
+ this.items.push(new ArkIRNamespacePrinter_1.ArkIRNamespacePrinter(ns));
38
+ }
39
+ // print class
40
+ for (let cls of this.arkFile.getClasses()) {
41
+ this.items.push(new ArkIRClassPrinter_1.ArkIRClassPrinter(cls));
42
+ }
43
+ // print export
44
+ for (let info of this.arkFile.getExportInfos()) {
45
+ this.items.push(new ExportPrinter_1.ExportPrinter(info));
46
+ }
47
+ this.items.sort((a, b) => a.getLine() - b.getLine());
48
+ this.items.forEach((v) => {
49
+ this.printer.write(v.dump());
50
+ });
51
+ return this.printer.toString();
52
+ }
53
+ }
54
+ exports.ArkIRFilePrinter = ArkIRFilePrinter;
@@ -0,0 +1,17 @@
1
+ import { ArkMethod } from '../../core/model/ArkMethod';
2
+ import { BasePrinter } from '../base/BasePrinter';
3
+ /**
4
+ * @category save
5
+ */
6
+ export declare class ArkIRMethodPrinter extends BasePrinter {
7
+ private method;
8
+ constructor(method: ArkMethod, indent?: string);
9
+ dump(): string;
10
+ getLine(): number;
11
+ private printMethod;
12
+ private printBody;
13
+ protected methodProtoToString(method: ArkMethod): string;
14
+ private printCfg;
15
+ private printBasicBlock;
16
+ }
17
+ //# sourceMappingURL=ArkIRMethodPrinter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArkIRMethodPrinter.d.ts","sourceRoot":"","sources":["../../../src/save/arkir/ArkIRMethodPrinter.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAKvD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIlD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAY;gBAEP,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,MAAW;IAKlD,IAAI,IAAI,MAAM;IAYd,OAAO,IAAI,MAAM;IAyBxB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,SAAS;IAMjB,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM;IAwCxD,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,eAAe;CA2B1B"}