All files / src/objects lock_object.ts

93.97% Statements 78/83
77.27% Branches 17/22
85.71% Functions 6/7
93.97% Lines 78/83

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 72 73 74 75 76 77 78 79 80 81 82 83 841x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 50x 50x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 6x 1x 1x 1x 1x 1x 1x 1x 8x 8x 8x 8x 8x 8x 4x 4x 3x 3x 3x 4x 1x 1x     4x 4x 4x 8x 1x 1x 16x 10x 10x 6x 6x 6x 6x 6x 6x 6x 16x 4x 4x 2x 16x 16x 16x 16x 16x 16x 1x 1x       1x  
import {UnknownType, VoidType} from "../abap/types/basic";
import {AbstractType} from "../abap/types/basic/_abstract_type";
import {DDIC} from "../ddic";
import {IObjectAndToken} from "../_iddic_references";
import {IRegistry} from "../_iregistry";
import {AbstractObject} from "./_abstract_object";
 
export class LockObject extends AbstractObject {
  private parsedXML: {
    primaryTable?: string,
    description?: string,
  } | undefined;
 
  public getType(): string {
    return "ENQU";
  }
 
  public getAllowedNaming() {
    return {
      maxLength: 16,
      allowNamespace: true,
    };
  }
 
  public setDirty(): void {
    this.parsedXML = undefined;
    super.setDirty();
  }
 
  public getPrimaryTable(): string | undefined {
    this.parse();
    return this.parsedXML?.primaryTable;
  }
 
  public parseType(reg: IRegistry): AbstractType {
    this.parse();
 
    const references: IObjectAndToken[] = [];
    const ddic = new DDIC(reg);
 
    if (this.parsedXML?.primaryTable) {
      const found = ddic.lookupTableOrView2(this.parsedXML.primaryTable);
      if (found) {
        references.push({object: found});
        reg.getDDICReferences().setUsing(this, references);
        return found.parseType(reg);
      } else if (ddic.inErrorNamespace(this.parsedXML.primaryTable)) {
        return new UnknownType(this.parsedXML.primaryTable + " not found");
      } else {
        return new VoidType(this.parsedXML.primaryTable);
      }
    } else {
      return new UnknownType("Parsing error");
    }
  }
 
  public parse() {
    if (this.parsedXML) {
      return {updated: false, runtime: 0};
    }
 
    const start = Date.now();
    this.parsedXML = {};
    const parsed = super.parseRaw2();
 
    if (parsed === undefined
        || parsed.abapGit === undefined
        || parsed.abapGit["asx:abap"]["asx:values"] === undefined) {
      return {updated: false, runtime: 0};
    }
 
    this.parsedXML.primaryTable = parsed.abapGit["asx:abap"]["asx:values"].DD25V?.ROOTTAB;
    this.parsedXML.description = parsed.abapGit["asx:abap"]["asx:values"].DD25V?.DDTEXT;
 
    const end = Date.now();
    return {updated: true, runtime: end - start};
  }
 
  public getDescription(): string | undefined {
    this.parse();
    return this.parsedXML?.description;
  }
}