All files / src/abap/5_syntax/expressions filter_body.ts

94.59% Statements 35/37
62.5% Branches 5/8
100% Functions 1/1
94.59% Lines 35/37

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 371x 1x 1x 1x 1x 1x 1x 1x 1x 1x 7x 7x 7x 7x 7x     7x 7x 7x 8x 7x 8x 1x 1x 8x 7x 7x 7x 6x 6x 6x 7x 7x 7x 7x 1x
import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {Source} from "./source";
import {AbstractType} from "../../types/basic/_abstract_type";
import {SyntaxInput} from "../_syntax_input";
import {ComponentCond} from "./component_cond";
import {TableType} from "../../types/basic";
 
export class FilterBody {
  public static runSyntax(
    node: ExpressionNode | undefined,
    input: SyntaxInput,
    targetType: AbstractType | undefined): AbstractType | undefined {
 
    if (node === undefined) {
      return targetType;
    }
 
    let type: AbstractType | undefined = undefined;
    for (const s of node.findDirectExpressions(Expressions.Source)) {
      if (type === undefined) {
        type = Source.runSyntax(s, input);
      } else {
        Source.runSyntax(s, input);
      }
    }
 
    // todo
    if (node.findDirectTokenByText("EXCEPT") === undefined) {
      const rowType = type instanceof TableType ? type.getRowType() : undefined;
      ComponentCond.runSyntax(node.findDirectExpression(Expressions.ComponentCond)!, input, rowType);
    }
 
 
    return type ? type : targetType;
  }
}