All files / src/objects lock_object.ts

94.11% Statements 80/85
78.26% Branches 18/23
85.71% Functions 6/7
94.11% Lines 80/85

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 84 85 861x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 53x 53x 1x 1x 2x 2x 2x 2x 2x 2x 1x 1x 7x 7x 7x 1x 1x 1x 1x 1x 1x 1x 9x 9x 9x 9x 9x 9x 4x 4x 3x 3x 3x 4x 1x 1x     9x 5x 5x 9x 1x 1x 18x 11x 11x 7x 7x 7x 7x 7x 7x 7x 18x 5x 5x 2x 18x 18x 18x 18x 18x 18x 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";
import {IAllowedNaming} from "./_iobject";
 
export class LockObject extends AbstractObject {
  private parsedXML: {
    primaryTable?: string,
    description?: string,
  } | undefined;
 
  public getType(): string {
    return "ENQU";
  }
 
  public getAllowedNaming(): IAllowedNaming {
    return {
      maxLength: 16,
      customRegex: /^(\/[A-Z_\d]{3,8}\/)?E[A-Z0-9_]+$/i,
      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 VoidType.get(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;
  }
}