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

78.94% Statements 30/38
88.88% Branches 8/9
100% Functions 1/1
78.94% Lines 30/38

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 381x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1802x 1802x 366x 366x 1436x 1436x 1436x 1802x 26x 26x 1436x 1436x 1802x 1434x 25x 1434x 1409x 1409x 1434x                 1x
import {ExpressionNode} from "../../nodes";
import * as Expressions from "../../2_statements/expressions";
import {CurrentScope} from "../_current_scope";
import {TypedIdentifier} from "../../types/_typed_identifier";
import {UnknownType} from "../../types/basic";
import {BasicTypes} from "../basic_types";
import {TypeTable} from "./type_table";
 
export class DataDefinition {
  public runSyntax(node: ExpressionNode, scope: CurrentScope, filename: string): TypedIdentifier | undefined {
    const tt = node.findFirstExpression(Expressions.TypeTable);
    if (tt) {
      return new TypeTable().runSyntax(node, scope, filename);
    }
 
    const valueNode = node.findFirstExpression(Expressions.Value);
    let value: string | undefined = undefined;
    if (valueNode) {
      value = new BasicTypes(filename, scope).findValue(node);
    }
 
    const bfound = new BasicTypes(filename, scope).simpleType(node);
    if (bfound) {
      if (value) {
        return new TypedIdentifier(bfound.getToken(), filename, bfound.getType(), bfound.getMeta(), value);
      } else {
        return bfound;
      }
    }

    const name = node.findFirstExpression(Expressions.DefinitionName);
    if (name) {
      return new TypedIdentifier(name.getFirstToken(), filename, new UnknownType("DataDefinition, fallback"));
    }

    return undefined;
  }
}