UNPKG

@abaplint/transpiler

Version:
82 lines 3.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class MessageTranspiler { transpile(node, traversal) { const options = []; const into = node.findExpressionAfterToken("INTO"); if (into) { options.push("into: " + traversal.traverse(into).getCode()); } const messagesource = node.findDirectExpression(abaplint.Expressions.MessageSource); if (messagesource) { const id = messagesource.findExpressionAfterToken("ID"); if (id) { options.push("id: " + traversal.traverse(id).getCode()); } const cla = messagesource.findDirectExpression(abaplint.Expressions.MessageClass); if (cla) { options.push("id: \"" + cla.concatTokens() + "\""); } const type = messagesource.findExpressionAfterToken("TYPE"); if (type) { options.push("type: " + traversal.traverse(type).getCode()); } const number = messagesource.findExpressionAfterToken("NUMBER"); if (number) { options.push("number: " + traversal.traverse(number).getCode()); } const typeAndNumber = messagesource.findDirectExpression(abaplint.Expressions.MessageTypeAndNumber); if (typeAndNumber) { const str = typeAndNumber.getFirstToken().getStr(); options.push("number: \"" + str.substr(1, 3) + "\""); options.push("type: \"" + str.substr(0, 1).toUpperCase() + "\""); } const like = messagesource.findExpressionAfterToken("LIKE"); if (like) { options.push("displayLike: " + traversal.traverse(like).getCode()); } } else { // exception or constant based const source = node.findDirectExpression(abaplint.Expressions.MessageSourceSource)?.findDirectExpression(abaplint.Expressions.Source); if (source) { options.push("exceptionOrText: " + traversal.traverse(source).getCode()); } const type = node.findExpressionAfterToken("TYPE"); if (type) { options.push("type: " + traversal.traverse(type).getCode()); } const like = node.findExpressionAfterToken("LIKE"); if (like) { options.push("displayLike: " + traversal.traverse(like).getCode()); } } const w = []; let withs = false; for (const c of node.getChildren()) { if (c.getFirstToken().getStr().toUpperCase() === "WITH") { withs = true; } else if (withs === true && c.get() instanceof abaplint.Expressions.MessageSourceSource && c instanceof abaplint.Nodes.ExpressionNode) { w.push(traversal.traverse(c.getFirstChild()).getCode()); } else if (withs === true) { break; } } if (w.length > 0) { options.push("with: [" + w.join(",") + "]"); } return new chunk_1.Chunk() .append("await abap.statements.message({", node, traversal) .appendString(options.join(", ")) .append("});", node.getLastToken(), traversal); } } exports.MessageTranspiler = MessageTranspiler; //# sourceMappingURL=message.js.map