All files / src/bdef/expressions bdef_use.ts

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

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 361x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {BDEFAssociationBody, BDEFDefaultFunction, BDEFName, BDEFOptions, BDEFParameter, BDEFResult, BDEFString} from ".";
import {altPrio, Expression, optPrio, seq, starPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
/** reuse in projections and interfaces, eg. "use action acceptTravel as accept;" */
export class BDEFUse extends Expression {
  public getRunnable(): IStatementRunnable {
    const end = altPrio(";", BDEFDefaultFunction);
 
    const operation = seq(altPrio("CREATE", "UPDATE", "DELETE"), optPrio(BDEFOptions), end);
 
    const actionTail = altPrio(
      seq("AS", BDEFName),
      seq("EXTERNAL", BDEFString),
      BDEFParameter,
      BDEFResult);
    const action = seq(altPrio("ACTION", "FUNCTION"), optPrio(BDEFOptions), BDEFName, starPrio(actionTail), end);
 
    const association = seq(
      "ASSOCIATION",
      optPrio(BDEFOptions),
      BDEFName,
      optPrio(seq("ABBREVIATION", BDEFName)),
      altPrio(";", BDEFAssociationBody));
 
    return seq("USE", altPrio(
      operation,
      action,
      association,
      seq("ETAG", ";"),
      seq("SIDE EFFECTS", ";"),
      seq("KEY", BDEFName, ";"),
      seq("EVENT", BDEFName, optPrio(BDEFParameter), ";")));
  }
}