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

100% Statements 35/35
100% Branches 11/11
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 351x 1x 1x 1x 1x 1x 1x 11x 2x 2x 9x 9x 9x 11x 3x 2x 2x 1x 1x 6x 11x 1x 1x 5x 5x 11x 1x 1x 4x 4x 4x 4x 4x 1x 1x
import {INode} from "../../nodes/_inode";
import {AbstractType} from "../../types/basic/_abstract_type";
import {VoidType} from "../../types/basic/void_type";
import {StructureType} from "../../types/basic/structure_type";
 
export class ComponentChain {
  public runSyntax(context: AbstractType | undefined, node: INode): AbstractType | undefined {
    if (context instanceof VoidType) {
      return context;
    }
 
    const name = node.getFirstToken().getStr();
 
    if (!(context instanceof StructureType)) {
      if (name.toUpperCase() === "TABLE_LINE") {
        return context;
      }
      throw new Error("ComponentChain, not a structure");
    }
 
    if (name.toUpperCase() === "TABLE_LINE") {
      return context;
    }
 
    const ret = context.getComponentByName(name);
    if (ret === undefined) {
      throw new Error("Component \"" + name + "\" not found in structure");
    }
 
// todo, add more here
 
    return ret;
  }
 
}