UNPKG

@abaplint/transpiler

Version:
60 lines 2.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MethodCallTranspiler = void 0; const core_1 = require("@abaplint/core"); const traversal_1 = require("../traversal"); const method_call_param_1 = require("./method_call_param"); const chunk_1 = require("../chunk"); class MethodCallTranspiler { transpile(node, traversal) { let post = ""; const nameToken = node.findDirectExpression(core_1.Expressions.MethodName)?.getFirstToken(); if (nameToken === undefined) { throw new Error("MethodCallTranspiler, name not found"); } const scope = traversal.findCurrentScopeByToken(nameToken); const m = traversal.findMethodReference(nameToken, scope); let name = nameToken.getStr().toLowerCase(); if (traversal.isBuiltinMethod(nameToken)) { // todo: this is not correct, the method name might be shadowed name = "abap.builtin." + name + "("; if (name === "abap.builtin.line_exists(" || name === "abap.builtin.line_index(") { name = `await ` + name; name += "async () => {"; post = "}"; } } else if (m?.name) { name = m.name.toLowerCase(); name = traversal_1.Traversal.escapeNamespace(name.replace("~", "$")); if (m?.def.getVisibility() === core_1.Visibility.Private && m.def.isStatic() === false) { const id = scope?.getParent()?.getParent()?.getIdentifier(); if (id?.stype === core_1.ScopeType.ClassImplementation && m.def.getClassName().toUpperCase() === id.sname.toUpperCase()) { name = "#" + name; } else { name = `FRIENDS_ACCESS_INSTANCE["${name}"]`; } } name = name + "("; } else { // todo: this should never happen? name = traversal_1.Traversal.escapeNamespace(name.replace("~", "$")); name = name + "("; } const step = node.findDirectExpression(core_1.Expressions.MethodCallParam); if (step === undefined) { throw new Error("MethodCallTranspiler, unexpected node"); } const ret = new chunk_1.Chunk(); ret.append(name, nameToken, traversal); ret.appendChunk(new method_call_param_1.MethodCallParamTranspiler(m?.def).transpile(step, traversal)); ret.appendString(post + ")"); return ret; } } exports.MethodCallTranspiler = MethodCallTranspiler; //# sourceMappingURL=method_call.js.map