All files / src/abap/5_syntax/statements call_function.ts

95.12% Statements 39/41
75% Branches 9/12
100% Functions 1/1
95.12% Lines 39/41

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 38 39 40 411x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 17x 17x 17x 17x 17x 1x 17x 16x 1x 1x 1x 1x 1x 1x 1x 16x 17x 1x 1x 17x     16x 16x 17x 13x 13x 17x 1x
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {Source} from "../expressions/source";
import {FieldChain} from "../expressions/field_chain";
import {ReferenceType} from "../_reference";
import {StatementSyntax} from "../_statement_syntax";
import {Version} from "../../../version";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
import {FunctionParameters} from "../expressions/function_parameters";
 
export class CallFunction implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
    // todo, lots of work here, similar to receive.ts
 
    const name = node.findFirstExpression(Expressions.FunctionName);
    const chain = name?.findFirstExpression(Expressions.FieldChain);
    if (chain) {
      FieldChain.runSyntax(chain, input, ReferenceType.DataReadReference);
    } else if (input.scope.getVersion() === Version.Cloud
        && node.findDirectExpression(Expressions.Destination) === undefined) {
      const functionName = name?.concatTokens().replace(/'/g, "");
      if (input.scope.findFunctionModule(functionName) === undefined) {
        const message = `Function module "${functionName}" not found/released`;
        input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
        return;
      }
    }
 
    for (const s of node.findDirectExpressions(Expressions.SimpleSource2)) {
      Source.runSyntax(s, input);
    }
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      Source.runSyntax(s, input);
    }
 
    const fp = node.findDirectExpression(Expressions.FunctionParameters);
    if (fp) {
      FunctionParameters.runSyntax(fp, input);
    }
  }
}