All files / src/objects/rename rename_message_class.ts

91.3% Statements 42/46
60% Branches 3/5
100% Functions 2/2
91.3% Lines 42/46

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 461x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x 2x     2x 2x 2x 2x 2x 2x 2x 2x 1x 1x     1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 1x 1x
import {IRegistry} from "../../_iregistry";
import {Range, TextEdit, WorkspaceEdit, TextDocumentEdit, CreateFile, RenameFile, DeleteFile} from "vscode-languageserver-types";
import {MessageClass} from "..";
import {ObjectRenamer} from "./_object_renamer";
import {IObject} from "../_iobject";
import {RenamerHelper} from "./renamer_helper";
 
export class RenameMessageClass implements ObjectRenamer {
  private readonly reg: IRegistry;
 
  public constructor(reg: IRegistry) {
    this.reg = reg;
  }
 
  public buildEdits(obj: IObject, oldName: string, newName: string): WorkspaceEdit | undefined {
    if (!(obj instanceof MessageClass)) {
      throw new Error("RenameMessageClass, not a message class");
    }
 
    let changes: (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[] = [];
    const helper = new RenamerHelper(this.reg);
    changes = changes.concat(helper.buildXMLFileEdits(obj, "ARBGB", oldName, newName));
    changes = changes.concat(helper.renameFiles(obj, oldName, newName));
 
    for (const message of obj.getMessages()) {
      for (const ref of this.reg.getMSAGReferences().listByMessage(obj.getName(), message.getNumber())) {
        const file = this.reg.getFileByName(ref.filename);
        if (file === undefined) {
          continue;
        }
        const rows = file.getRawRows();
        const i = ref.token.getRow() - 1;
        const index = rows[i].indexOf(oldName.toLowerCase());
        if (index >= 0) {
          const range = Range.create(i, index, i, index + oldName.length);
          changes.push(TextDocumentEdit.create({uri: file.getFilename(), version: 1}, [TextEdit.replace(range, newName.toLowerCase())]));
        }
      }
    }
 
    return {
      documentChanges: changes,
    };
  }
 
}