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 61 62 63 64 65 66 67 68 69 70 71 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1064x 1064x 1064x 1064x 1064x 1064x 1064x 1064x 1064x 2710x 2710x 1x 1x 2709x 2709x 1063x 1063x 1x 1x 2138x 2138x 1x 1x 829x 829x 1x 1x 16x 16x 204x 204x 16x 16x 16x 1x 1x 774x 774x 1x 1x 14x 14x 14x 14x 1x 1x 37x 37x 1x 1x 1x | import {AbstractType} from "./_abstract_type";
export interface IStructureComponent {
name: string;
type: AbstractType;
asInclude?: boolean;
suffix?: string;
}
export class StructureType extends AbstractType {
private readonly indexed: {[index: string]: AbstractType};
private readonly components: IStructureComponent[];
public constructor(components: IStructureComponent[], qualifiedName?: string, ddicName?: string, description?: string) {
super({
qualifiedName: qualifiedName,
ddicName: ddicName,
description: description,
});
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 + "\", " + qualifiedName);
}
this.indexed[upper] = c.type;
}
this.components = components;
}
public getComponents(): readonly 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 => { return c.type.containsVoid(); });
}
public toCDS() {
return "abap.TODO_STRUCTURE";
}
} |