@abaplint/transpiler 2.7.120 → 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
|
-
|
|
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 */)
|
|
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
|
-
|
|
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 = (
|
|
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.
|
|
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.
|
|
32
|
+
"@abaplint/core": "^2.102.61",
|
|
33
33
|
"source-map": "^0.7.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|