All files / src/abap/2_statements/statements raise.ts

100% Statements 38/38
100% Branches 1/1
100% Functions 1/1
100% Lines 38/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 381x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, ver, optPrio, altPrio, AlsoIn, verNotLang} from "../combi";
import {Release, LanguageVersion} from "../../../version";
import {Source, ParameterListS, ClassName, MessageSource, SimpleSource2, RaiseWith, MessageNumber, ExceptionName} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
 
export class Raise implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const mess = seq("MESSAGE",
                     MessageSource,
                     opt(RaiseWith));
 
    const messid = seq("MESSAGE ID",
                       Source,
                       "NUMBER",
                       altPrio(MessageNumber, Source),
                       optPrio(RaiseWith));
 
    const exporting = seq("EXPORTING", ParameterListS);
 
    const from = seq("TYPE",
                     ClassName,
                     opt(alt(ver(Release.v750, alt(mess, messid), {also: AlsoIn.OpenABAP}), ver(Release.v752, "USING MESSAGE"))),
                     optPrio(exporting));
 
    const pre = altPrio(seq(optPrio("RESUMABLE"), "EXCEPTION"), "SHORTDUMP");
 
    const clas = seq(pre,
                     altPrio(from, ver(Release.v752, Source, {also: AlsoIn.OpenABAP}), SimpleSource2));
 
    // Old form "RAISE exception_name" blocked in KeyUser
    const ret = seq("RAISE", altPrio(clas, verNotLang(LanguageVersion.KeyUser, ExceptionName)));
 
    return ret;
  }
 
}