@abaplint/transpiler
Version:
82 lines • 3.59 kB
JavaScript
;
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