UNPKG

@abaplint/transpiler

Version:
87 lines 3.78 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 exception = node.findDirectExpression(abaplint.Expressions.SimpleSource3); const str = exception?.findFirstExpression(abaplint.Expressions.Constant); if (str) { options.push("text: " + traversal.traverse(str).getCode()); } else { options.push("exception: " + traversal.traverse(exception).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.Source) { w.push(traversal.traverse(c).getCode()); } else if (withs === true && c.get() instanceof abaplint.Expressions.SimpleSource3) { w.push(traversal.traverse(c).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