diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index baa81ebf30d..ced2d157ff3 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -371,19 +371,14 @@ export const enum FileOperation { export class FileOperationEvent { - constructor(private _resource: URI, private _operation: FileOperation, private _target?: IFileStatWithMetadata) { - } + constructor(resource: URI, operation: FileOperation.DELETE); + constructor(resource: URI, operation: FileOperation.CREATE | FileOperation.MOVE | FileOperation.COPY, target: IFileStatWithMetadata); + constructor(public readonly resource: URI, public readonly operation: FileOperation, public readonly target?: IFileStatWithMetadata) { } - get resource(): URI { - return this._resource; - } - - get target(): IFileStat | undefined { - return this._target; - } - - get operation(): FileOperation { - return this._operation; + isOperation(operation: FileOperation.DELETE): boolean; + isOperation(operation: FileOperation.MOVE | FileOperation.COPY | FileOperation.CREATE): this is { readonly target: IFileStatWithMetadata }; + isOperation(operation: FileOperation): boolean { + return this.operation === operation; } } diff --git a/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts b/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts index bd1d2139202..e35329a9dba 100644 --- a/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts +++ b/src/vs/workbench/api/browser/mainThreadFileSystemEventService.ts @@ -51,8 +51,8 @@ export class MainThreadFileSystemEventService { // file operation events - (changes the editor makes) fileService.onAfterOperation(e => { - if (e.operation === FileOperation.MOVE) { - proxy.$onFileRename(e.resource, e.target!.resource); + if (e.isOperation(FileOperation.MOVE)) { + proxy.$onFileRename(e.resource, e.target.resource); } }, undefined, this._listener); diff --git a/src/vs/workbench/contrib/files/browser/editors/fileEditorTracker.ts b/src/vs/workbench/contrib/files/browser/editors/fileEditorTracker.ts index 2f51891a957..9bac952ee64 100644 --- a/src/vs/workbench/contrib/files/browser/editors/fileEditorTracker.ts +++ b/src/vs/workbench/contrib/files/browser/editors/fileEditorTracker.ts @@ -111,12 +111,12 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut private onFileOperation(e: FileOperationEvent): void { // Handle moves specially when file is opened - if (e.operation === FileOperation.MOVE && e.target) { + if (e.isOperation(FileOperation.MOVE)) { this.handleMovedFileInOpenedEditors(e.resource, e.target.resource); } // Handle deletes - if (e.operation === FileOperation.DELETE || e.operation === FileOperation.MOVE) { + if (e.isOperation(FileOperation.DELETE) || e.isOperation(FileOperation.MOVE)) { this.handleDeletes(e.resource, false, e.target ? e.target.resource : undefined); } } diff --git a/src/vs/workbench/contrib/files/common/explorerService.ts b/src/vs/workbench/contrib/files/common/explorerService.ts index 46d87e4d7a8..83421a1613d 100644 --- a/src/vs/workbench/contrib/files/common/explorerService.ts +++ b/src/vs/workbench/contrib/files/common/explorerService.ts @@ -182,8 +182,8 @@ export class ExplorerService implements IExplorerService { private onFileOperation(e: FileOperationEvent): void { // Add - if (e.operation === FileOperation.CREATE || e.operation === FileOperation.COPY) { - const addedElement = e.target!; + if (e.isOperation(FileOperation.CREATE) || e.isOperation(FileOperation.COPY)) { + const addedElement = e.target; const parentResource = dirname(addedElement.resource)!; const parents = this.model.findAll(parentResource); @@ -212,9 +212,9 @@ export class ExplorerService implements IExplorerService { } // Move (including Rename) - else if (e.operation === FileOperation.MOVE) { + else if (e.isOperation(FileOperation.MOVE)) { const oldResource = e.resource; - const newElement = e.target!; + const newElement = e.target; const oldParentResource = dirname(oldResource); const newParentResource = dirname(newElement.resource); @@ -246,7 +246,7 @@ export class ExplorerService implements IExplorerService { } // Delete - else if (e.operation === FileOperation.DELETE) { + else if (e.isOperation(FileOperation.DELETE)) { const modelElements = this.model.findAll(e.resource); modelElements.forEach(element => { if (element.parent) {