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

78.94% Statements 30/38
66.66% Branches 4/6
100% Functions 1/1
78.94% Lines 30/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 38 391x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 10x 10x 10x         10x 10x 10x 10x 10x 10x 10x 1x 1x 1x 1x 1x         1x 10x 1x  
import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {Source} from "../expressions/source";
import {Target} from "../expressions/target";
import {StatementSyntax} from "../_statement_syntax";
import {Version} from "../../../version";
import {TableType} from "../../types/basic";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
 
export class MoveCorresponding implements StatementSyntax {
  public runSyntax(node: StatementNode, input: SyntaxInput): void {
 
    const s = node.findDirectExpression(Expressions.Source);
    const t = node.findDirectExpression(Expressions.SimpleTarget);
    if (s === undefined || t === undefined) {
      const message = "MoveCorresponding, source or target not found";
      input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
      return;
    }
 
    const sourceType = Source.runSyntax(s, input);
    const targetType = Target.runSyntax(t, input);
 
    if (input.scope.getVersion() < Version.v740sp05
        && input.scope.getVersion() !== Version.Cloud
        && input.scope.getVersion() !== Version.OpenABAP) {
      if (sourceType instanceof TableType && sourceType.isWithHeader() === false) {
        const message = "MOVE-CORRESPONDING with tables possible from v740sp05";
        input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
        return;
      } else if (targetType instanceof TableType && targetType.isWithHeader() === false) {
        const message = "MOVE-CORRESPONDING with tables possible from v740sp05";
        input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
        return;
      }
    }
  }
}