@abaplint/transpiler 2.7.119 → 2.7.121

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.
@@ -4,6 +4,8 @@ import { Traversal } from "../traversal";
4
4
  import { Chunk } from "../chunk";
5
5
  export declare class MethodImplementationTranspiler implements IStatementTranspiler {
6
6
  transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk;
7
+ private buildDefault;
8
+ private buildDefaultFallback;
7
9
  private findMethod;
8
10
  private findMethodParameters;
9
11
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MethodImplementationTranspiler = void 0;
4
+ /* eslint-disable max-len */
4
5
  const abaplint = require("@abaplint/core");
5
6
  const transpile_types_1 = require("../transpile_types");
6
7
  const traversal_1 = require("../traversal");
@@ -9,7 +10,7 @@ const chunk_1 = require("../chunk");
9
10
  const unique_identifier_1 = require("../unique_identifier");
10
11
  class MethodImplementationTranspiler {
11
12
  transpile(node, traversal) {
12
- var _a, _b;
13
+ var _a, _b, _c;
13
14
  const token = node.findFirstExpression(abaplint.Expressions.MethodName).getFirstToken();
14
15
  let methodName = token.getStr();
15
16
  const scope = traversal.findCurrentScopeByToken(token);
@@ -41,13 +42,27 @@ class MethodImplementationTranspiler {
41
42
  unique = "INPUT";
42
43
  }
43
44
  const parameterDefault = methodDef === null || methodDef === void 0 ? void 0 : methodDef.getParameterDefault(varName);
44
- // const isOptional = methodDef?.getOptional().includes(varName.toUpperCase());
45
+ const isOptional = methodDef === null || methodDef === void 0 ? void 0 : methodDef.getOptional().includes(varName.toUpperCase());
45
46
  const passByValue = identifier.getMeta().includes("pass_by_value" /* abaplint.IdentifierMeta.PassByValue */);
46
47
  const type = identifier.getType();
47
48
  if (identifier.getMeta().includes("exporting" /* abaplint.IdentifierMeta.MethodExporting */)) {
48
49
  after += `let ${varName} = ${unique}?.${varName} || ${new transpile_types_1.TranspileTypes().toType(identifier.getType())};\n`;
50
+ // begin new
51
+ }
52
+ else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */)
53
+ && parameterDefault === undefined
54
+ && passByValue === false
55
+ && isOptional === false
56
+ && type.isGeneric() === false) {
57
+ after += `let ${varName} = ${unique}?.${varName};\n`;
58
+ if (identifier.getType().getQualifiedName() !== undefined && identifier.getType().getQualifiedName() !== "") {
59
+ after += `if (${varName}.getQualifiedName() !== "${(_a = identifier.getType().getQualifiedName()) === null || _a === void 0 ? void 0 : _a.toUpperCase()}") { ${varName} = undefined; }\n`;
60
+ }
61
+ after += `if (${varName} === undefined) { ${varName} = ${new transpile_types_1.TranspileTypes().toType(identifier.getType())}.set(${unique}.${varName}); }\n`;
62
+ // end new
49
63
  }
50
- else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */) && type.isGeneric() === false) {
64
+ else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */)
65
+ && type.isGeneric() === false) {
51
66
  after += new transpile_types_1.TranspileTypes().declare(identifier) + "\n";
52
67
  // note: it might be nessesary to do a type conversion, eg char is passed to xstring parameter
53
68
  after += "if (" + unique + " && " + unique + "." + varName + ") {" + varName + ".set(" + unique + "." + varName + ");}\n";
@@ -57,67 +72,7 @@ class MethodImplementationTranspiler {
57
72
  after += "if (" + unique + " && " + unique + "." + varName + ") {" + varName + " = " + unique + "." + varName + ";}\n";
58
73
  }
59
74
  if (parameterDefault) {
60
- let val = "";
61
- if (parameterDefault.get() instanceof abaplint.Expressions.Constant) {
62
- val = new expressions_1.ConstantTranspiler().transpile(parameterDefault, traversal).getCode();
63
- }
64
- else if (parameterDefault.get() instanceof abaplint.Expressions.FieldChain) {
65
- if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_true") {
66
- val = "abap.builtin.abap_true";
67
- }
68
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_false") {
69
- val = "abap.builtin.abap_false";
70
- }
71
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_undefined") {
72
- val = "abap.builtin.abap_undefined";
73
- }
74
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "space") {
75
- val = "abap.builtin.space";
76
- }
77
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-langu") {
78
- val = "abap.builtin.sy.get().langu";
79
- }
80
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-mandt") {
81
- val = "abap.builtin.sy.get().mandt";
82
- }
83
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-uname") {
84
- val = "abap.builtin.sy.get().uname";
85
- }
86
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-sysid") {
87
- val = "abap.builtin.sy.get().sysid";
88
- }
89
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgid") {
90
- val = "abap.builtin.sy.get().msgid";
91
- }
92
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgty") {
93
- val = "abap.builtin.sy.get().msgty";
94
- }
95
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgno") {
96
- val = "abap.builtin.sy.get().msgno";
97
- }
98
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv1") {
99
- val = "abap.builtin.sy.get().msgv1";
100
- }
101
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv2") {
102
- val = "abap.builtin.sy.get().msgv2";
103
- }
104
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv3") {
105
- val = "abap.builtin.sy.get().msgv3";
106
- }
107
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv4") {
108
- val = "abap.builtin.sy.get().msgv4";
109
- }
110
- else {
111
- // note: this can be difficult, the "def" might be from an interface, ie. a different scope than the method
112
- val = new expressions_1.FieldChainTranspiler().transpile(parameterDefault, traversal, true, methodDef === null || methodDef === void 0 ? void 0 : methodDef.getFilename(), true).getCode();
113
- if (val.startsWith(parameterDefault.getFirstToken().getStr().toLowerCase()) === true) {
114
- val = "this." + val;
115
- }
116
- }
117
- }
118
- else {
119
- throw new Error("MethodImplementationTranspiler, unknown default param type");
120
- }
75
+ const val = this.buildDefault(parameterDefault, traversal, methodDef === null || methodDef === void 0 ? void 0 : methodDef.getFilename());
121
76
  if (passByValue === true || identifier.getMeta().includes("changing" /* abaplint.IdentifierMeta.MethodChanging */)) {
122
77
  after += "if (" + unique + " === undefined || " + unique + "." + varName + " === undefined) {" + varName + ".set(" + val + ");}\n";
123
78
  }
@@ -150,7 +105,7 @@ class MethodImplementationTranspiler {
150
105
  }
151
106
  if (method && method.isStatic()) {
152
107
  // in ABAP static methods can be called with instance arrows, "->"
153
- const className = (_b = (_a = scope.getParent()) === null || _a === void 0 ? void 0 : _a.getIdentifier().sname) === null || _b === void 0 ? void 0 : _b.toLowerCase();
108
+ const className = (_c = (_b = scope.getParent()) === null || _b === void 0 ? void 0 : _b.getIdentifier().sname) === null || _c === void 0 ? void 0 : _c.toLowerCase();
154
109
  staticMethod = "async " + traversal_1.Traversal.escapeNamespace(methodName) + "(" + unique + ") {\n" +
155
110
  "return " + traversal_1.Traversal.escapeNamespace(className) + "." + traversal_1.Traversal.escapeNamespace(methodName) + "(" + unique + ");\n" +
156
111
  "}\n" + "static ";
@@ -160,6 +115,77 @@ class MethodImplementationTranspiler {
160
115
  return new chunk_1.Chunk().append(str, node, traversal);
161
116
  }
162
117
  /////////////////////////////
118
+ buildDefault(parameterDefault, traversal, filename) {
119
+ let val = "";
120
+ if (parameterDefault.get() instanceof abaplint.Expressions.Constant) {
121
+ val = new expressions_1.ConstantTranspiler().transpile(parameterDefault, traversal).getCode();
122
+ }
123
+ else if (parameterDefault.get() instanceof abaplint.Expressions.FieldChain) {
124
+ val = this.buildDefaultFallback(parameterDefault, traversal, filename);
125
+ }
126
+ else {
127
+ throw new Error("MethodImplementationTranspiler, unknown default param type");
128
+ }
129
+ return val;
130
+ }
131
+ buildDefaultFallback(parameterDefault, traversal, filename) {
132
+ let val = "";
133
+ const firstTokenLower = parameterDefault.getFirstToken().getStr().toLowerCase();
134
+ const concat = parameterDefault.concatTokens().toLowerCase();
135
+ if (firstTokenLower === "abap_true") {
136
+ val = "abap.builtin.abap_true";
137
+ }
138
+ else if (firstTokenLower === "abap_false") {
139
+ val = "abap.builtin.abap_false";
140
+ }
141
+ else if (firstTokenLower === "abap_undefined") {
142
+ val = "abap.builtin.abap_undefined";
143
+ }
144
+ else if (firstTokenLower === "space") {
145
+ val = "abap.builtin.space";
146
+ }
147
+ else if (concat === "sy-langu") {
148
+ val = "abap.builtin.sy.get().langu";
149
+ }
150
+ else if (concat === "sy-mandt") {
151
+ val = "abap.builtin.sy.get().mandt";
152
+ }
153
+ else if (concat === "sy-uname") {
154
+ val = "abap.builtin.sy.get().uname";
155
+ }
156
+ else if (concat === "sy-sysid") {
157
+ val = "abap.builtin.sy.get().sysid";
158
+ }
159
+ else if (concat === "sy-msgid") {
160
+ val = "abap.builtin.sy.get().msgid";
161
+ }
162
+ else if (concat === "sy-msgty") {
163
+ val = "abap.builtin.sy.get().msgty";
164
+ }
165
+ else if (concat === "sy-msgno") {
166
+ val = "abap.builtin.sy.get().msgno";
167
+ }
168
+ else if (concat === "sy-msgv1") {
169
+ val = "abap.builtin.sy.get().msgv1";
170
+ }
171
+ else if (concat === "sy-msgv2") {
172
+ val = "abap.builtin.sy.get().msgv2";
173
+ }
174
+ else if (concat === "sy-msgv3") {
175
+ val = "abap.builtin.sy.get().msgv3";
176
+ }
177
+ else if (concat === "sy-msgv4") {
178
+ val = "abap.builtin.sy.get().msgv4";
179
+ }
180
+ else {
181
+ // note: this can be difficult, the "def" might be from an interface, ie. a different scope than the method
182
+ val = new expressions_1.FieldChainTranspiler().transpile(parameterDefault, traversal, true, filename, true).getCode();
183
+ if (val.startsWith(parameterDefault.getFirstToken().getStr().toLowerCase()) === true) {
184
+ val = "this." + val;
185
+ }
186
+ }
187
+ return val;
188
+ }
163
189
  findMethod(name, cdef, traversal) {
164
190
  var _a, _b;
165
191
  if (cdef === undefined) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.7.119",
3
+ "version": "2.7.121",
4
4
  "description": "Transpiler",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/src/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "author": "abaplint",
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
- "@abaplint/core": "^2.102.60",
32
+ "@abaplint/core": "^2.102.61",
33
33
  "source-map": "^0.7.4"
34
34
  },
35
35
  "devDependencies": {