All files / src/abap/types/basic structure_type.ts

86.89% Statements 53/61
92.31% Branches 12/13
85.71% Functions 6/7
86.89% Lines 53/61

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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 611x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 9483x 9483x     9483x 9483x 9483x 781250x 781250x 1x 1x 781249x 781249x 9482x 9482x 1x 1x 753x 753x 1x 1x 130x 130x 1x 1x 4x 4x 89x 89x 4x 4x 4x 1x 1x 7x 7x 1x 1x             1x 1x 9x 9x 1x
import {AbstractType} from "./_abstract_type";
 
export interface IStructureComponent {
  name: string;
  type: AbstractType;
}
 
export class StructureType extends AbstractType {
  private readonly indexed: {[index: string]: AbstractType};
  private readonly components: IStructureComponent[];
 
  public constructor(components: IStructureComponent[], name?: string) {
    super(name);
    if (components.length === 0) {
      throw new Error("Structure does not contain any components");
    }
 
    this.indexed = {};
    for (const c of components) {
      const upper = c.name.toUpperCase();
      if (this.indexed[upper] !== undefined) {
        throw new Error("Structure, duplicate field name \"" + upper + "\", " + name);
      }
      this.indexed[upper] = c.type;
    }
    this.components = components;
  }
 
  public getComponents(): IStructureComponent[] {
    return this.components;
  }
 
  public getComponentByName(name: string): AbstractType | undefined {
    return this.indexed[name.toUpperCase()];
  }
 
  public toText(level: number) {
    const compo: string[] = [];
    for (const c of this.components) {
      compo.push(c.name + " TYPE " + c.type.toText(level + 1));
    }
    const spaces = "  ".repeat(level);
    return "Structure\n" + spaces + "* " + compo.join("\n" + spaces + "* ");
  }
 
  public isGeneric() {
    return false;
  }
 
  public toABAP(): string {
    const ret = this.getQualifiedName();
    if (ret) {
      return ret;
    }
    return "StructureTypetoABAPtodo";
  }
 
  public containsVoid() {
    return this.getComponents().some(c => { c.type.containsVoid(); });
  }
}