UNPKG

@abaplint/transpiler

Version:
51 lines 2.29 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"); const feature_flags_1 = require("../feature_flags"); class MethodCallTranspiler { transpile(node, traversal) { const nameToken = node.findDirectExpression(core_1.Expressions.MethodName)?.getFirstToken(); if (nameToken === undefined) { throw new Error("MethodCallTranspiler, name not found"); } let name = nameToken.getStr().toLowerCase(); if (traversal.isBuiltinMethod(nameToken)) { name = "abap.builtin." + name; } const scope = traversal.findCurrentScopeByToken(nameToken); // it might be aliased? const m = traversal.findMethodReference(nameToken, scope); if (m?.name && traversal.isBuiltinMethod(nameToken) === false) { name = m.name.toLowerCase(); } name = traversal_1.Traversal.escapeNamespace(name.replace("~", "$")); if (feature_flags_1.FEATURE_FLAGS.private === true && 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 + "("; 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(")"); return ret; } } exports.MethodCallTranspiler = MethodCallTranspiler; //# sourceMappingURL=method_call.js.map