All files / src/abap/5_syntax/structures class_data.ts

100% Statements 30/30
100% Branches 3/3
100% Functions 1/1
100% Lines 30/30

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 301x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 12x 12x 4x 4x 4x 4x 4x 4x 12x 12x 4x 4x 4x 1x
import * as Expressions from "../../2_statements/expressions";
import * as Statements from "../../2_statements/statements";
import {StructureNode, StatementNode} from "../../nodes";
import {IdentifierMeta, TypedIdentifier} from "../../types/_typed_identifier";
import {IStructureComponent} from "../../types/basic";
import * as Basic from "../../types/basic";
import {ClassData as ClassDataSyntax} from "../statements/class_data";
import {SyntaxInput} from "../_syntax_input";
 
export class ClassData {
  public runSyntax(node: StructureNode, input: SyntaxInput): TypedIdentifier | undefined {
    const name = node.findFirstExpression(Expressions.NamespaceSimpleName)!.getFirstToken();
    const values: {[index: string]: string} = {};
 
    const components: IStructureComponent[] = [];
    for (const c of node.getChildren()) {
      const ctyp = c.get();
      if (c instanceof StatementNode && ctyp instanceof Statements.ClassData) {
        const found = new ClassDataSyntax().runSyntax(c, input);
        if (found) {
          components.push({name: found.getName(), type: found.getType()});
          values[found.getName()] = found.getValue() as string;
        }
      }
      // todo, nested structures and INCLUDES
    }
 
    return new TypedIdentifier(name, input.filename, new Basic.StructureType(components), [IdentifierMeta.Static], values);
  }
}