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

79.54% Statements 35/44
66.66% Branches 8/12
100% Functions 1/1
79.54% Lines 35/44

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 41 42 43 441x 1x 1x 1x 1x 1x 1x 392x 80x 80x 312x 312x 312x 312x 392x 309x 309x 3x 3x 3x 306x 306x 3x 392x 3x 3x   3x   3x 3x 3x       3x 3x 3x         1x 1x
import {INode} from "../../nodes/_inode";
import {AbstractType} from "../../types/basic/_abstract_type";
import * as Basic from "../../types/basic";
import {CheckSyntaxKey, SyntaxInput, syntaxIssue} from "../_syntax_input";
 
export class ComponentName {
  public runSyntax(context: AbstractType | undefined, node: INode, input: SyntaxInput): AbstractType | undefined {
    if (context instanceof Basic.VoidType) {
      return context;
    }
 
    const nameToken = node.getFirstToken();
    const name = nameToken.getStr();
 
    if (context instanceof Basic.StructureType) {
      const ret = context.getComponentByName(name);
      if (ret === undefined) {
        input.issues.push(syntaxIssue(input, nameToken, "Component \"" + name + "\" not found in structure"));
        return new Basic.VoidType(CheckSyntaxKey);
      }
      return ret;
    }
 
    if (context instanceof Basic.TableType && context.isWithHeader() === true) {
      const rowType = context.getRowType();
      if (rowType instanceof Basic.VoidType) {
        return context;
      } else if (name.toUpperCase() === "TABLE_LINE") {
        return rowType;
      } else if (rowType instanceof Basic.StructureType) {
        const ret = rowType.getComponentByName(name);
        if (ret === undefined) {
          input.issues.push(syntaxIssue(input, nameToken, "Component \"" + name + "\" not found in structure"));
          return new Basic.VoidType(CheckSyntaxKey);
        }
        return ret;
      }
    }

    input.issues.push(syntaxIssue(input, nameToken, "Not a structure, ComponentName, \"" + name + "\""));
    return new Basic.VoidType(CheckSyntaxKey);
  }
 
}