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 25x 5x 5x 20x 20x 20x 25x 3x 2x 2x 1x 1x 17x 25x 1x 1x 16x 16x 25x 1x 1x 15x 15x 15x 15x 15x 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;
  }
 
}