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

81.81% Statements 36/44
91.66% Branches 11/12
100% Functions 1/1
81.81% Lines 36/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 1x 1x 1x 2013x 2013x 398x 398x 1615x 1615x 1615x 2013x 28x 28x 1615x 1615x 1615x 2013x 1x 1x 1614x 1614x 2013x 1612x 27x 1612x 1585x 1585x 1612x                 1x
import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {UnknownType, VoidType} from "../../types/basic";
import {BasicTypes} from "../basic_types";
import {TypeTable} from "./type_table";
import {SyntaxInput} from "../_syntax_input";
 
export class DataDefinition {
  public runSyntax(node: ExpressionNode, input: SyntaxInput): TypedIdentifier | undefined {
    const tt = node.findFirstExpression(Expressions.TypeTable);
    if (tt) {
      return new TypeTable().runSyntax(node, input);
    }
 
    const valueNode = node.findFirstExpression(Expressions.Value);
    let value: string | undefined = undefined;
    if (valueNode) {
      value = new BasicTypes(input).findValue(node);
    }
 
    const name = node.findFirstExpression(Expressions.DefinitionName);
    const typeStructure = node.findFirstExpression(Expressions.TypeStructure);
    if (typeStructure && name) {
      return new TypedIdentifier(name.getFirstToken(), input.filename, new VoidType("DataDefinition, TypeStructure"));
    }
 
    const bfound = new BasicTypes(input).simpleType(node);
    if (bfound) {
      if (value) {
        return new TypedIdentifier(bfound.getToken(), input.filename, bfound.getType(), bfound.getMeta(), value);
      } else {
        return bfound;
      }
    }

    if (name) {
      console.dir("undef");
      return new TypedIdentifier(name.getFirstToken(), input.filename, new UnknownType("DataDefinition, fallback"));
    }

    return undefined;
  }
}