提交 ff1d5301 编写于 作者: M Matt Bierner

Strict null work in files/browser

上级 db9a994d
......@@ -832,7 +832,7 @@ export class ShowActiveFileInExplorer extends Action {
}
public run(): Promise<any> {
const resource = toResource(this.editorService.activeEditor, { supportSideBySide: true });
const resource = toResource(this.editorService.activeEditor || null, { supportSideBySide: true });
if (resource) {
this.commandService.executeCommand(REVEAL_IN_EXPLORER_COMMAND_ID, resource);
} else {
......@@ -904,7 +904,7 @@ export class ShowOpenedFileInNewWindow extends Action {
}
public run(): Promise<any> {
const fileResource = toResource(this.editorService.activeEditor, { supportSideBySide: true });
const fileResource = toResource(this.editorService.activeEditor || null, { supportSideBySide: true });
if (fileResource) {
if (this.fileService.canHandleResource(fileResource)) {
this.windowService.openWindow([{ uri: fileResource, typeHint: 'file' }], { forceNewWindow: true, forceOpenWorkspaceAsFile: true });
......@@ -1007,7 +1007,7 @@ export class CompareWithClipboardAction extends Action {
}
public run(): Promise<any> {
const resource = toResource(this.editorService.activeEditor, { supportSideBySide: true });
const resource = toResource(this.editorService.activeEditor || null, { supportSideBySide: true });
if (resource && (this.fileService.canHandleResource(resource) || resource.scheme === Schemas.untitled)) {
if (!this.registrationDisposal) {
const provider = this.instantiationService.createInstance(ClipboardContentProvider);
......@@ -1076,7 +1076,7 @@ function openExplorerAndRunAction(accessor: ServicesAccessor, constructor: ICons
return explorerPromise.then((explorer: ExplorerViewlet) => {
const explorerView = explorer.getExplorerView();
if (explorerView && explorerView.isBodyVisible()) {
if (explorerView && explorerView.isBodyVisible() && listService.lastFocusedList) {
explorerView.focus();
const { stat } = getContext(listService.lastFocusedList);
const action = instantationService.createInstance(constructor, () => stat);
......@@ -1106,6 +1106,10 @@ export const renameHandler = (accessor: ServicesAccessor) => {
const listService = accessor.get(IListService);
const explorerService = accessor.get(IExplorerService);
const textFileService = accessor.get(ITextFileService);
if (!listService.lastFocusedList) {
return;
}
const { stat } = getContext(listService.lastFocusedList);
explorerService.setEditable(stat, {
......@@ -1124,6 +1128,9 @@ export const renameHandler = (accessor: ServicesAccessor) => {
export const moveFileToTrashHandler = (accessor: ServicesAccessor) => {
const instantationService = accessor.get(IInstantiationService);
const listService = accessor.get(IListService);
if (!listService.lastFocusedList) {
return Promise.resolve();
}
const explorerContext = getContext(listService.lastFocusedList);
const stats = explorerContext.selection.length > 1 ? explorerContext.selection : [explorerContext.stat];
......@@ -1134,6 +1141,9 @@ export const moveFileToTrashHandler = (accessor: ServicesAccessor) => {
export const deleteFileHandler = (accessor: ServicesAccessor) => {
const instantationService = accessor.get(IInstantiationService);
const listService = accessor.get(IListService);
if (!listService.lastFocusedList) {
return Promise.resolve();
}
const explorerContext = getContext(listService.lastFocusedList);
const stats = explorerContext.selection.length > 1 ? explorerContext.selection : [explorerContext.stat];
......@@ -1143,6 +1153,9 @@ export const deleteFileHandler = (accessor: ServicesAccessor) => {
export const copyFileHandler = (accessor: ServicesAccessor) => {
const listService = accessor.get(IListService);
if (!listService.lastFocusedList) {
return;
}
const explorerContext = getContext(listService.lastFocusedList);
const explorerService = accessor.get(IExplorerService);
const stats = explorerContext.selection.length > 1 ? explorerContext.selection : [explorerContext.stat];
......@@ -1152,6 +1165,9 @@ export const copyFileHandler = (accessor: ServicesAccessor) => {
export const cutFileHandler = (accessor: ServicesAccessor) => {
const listService = accessor.get(IListService);
if (!listService.lastFocusedList) {
return;
}
const explorerContext = getContext(listService.lastFocusedList);
const explorerService = accessor.get(IExplorerService);
const stats = explorerContext.selection.length > 1 ? explorerContext.selection : [explorerContext.stat];
......@@ -1163,6 +1179,9 @@ export const pasteFileHandler = (accessor: ServicesAccessor) => {
const instantationService = accessor.get(IInstantiationService);
const listService = accessor.get(IListService);
const clipboardService = accessor.get(IClipboardService);
if (!listService.lastFocusedList) {
return Promise.resolve();
}
const explorerContext = getContext(listService.lastFocusedList);
return sequence(resources.distinctParents(clipboardService.readResources(), r => r).map(toCopy => {
......
......@@ -111,7 +111,7 @@ function save(
// Save As (or Save untitled with associated path)
if (isSaveAs || resource.scheme === Schemas.untitled) {
let encodingOfSource: string;
let encodingOfSource: string | undefined;
if (resource.scheme === Schemas.untitled) {
encodingOfSource = untitledEditorService.getEncoding(resource);
} else if (fileService.canHandleResource(resource)) {
......@@ -119,17 +119,17 @@ function save(
encodingOfSource = textModel && textModel.getEncoding(); // text model can be null e.g. if this is a binary file!
}
let viewStateOfSource: IEditorViewState;
let viewStateOfSource: IEditorViewState | null;
const activeTextEditorWidget = getCodeEditor(editorService.activeTextEditorWidget);
if (activeTextEditorWidget) {
const activeResource = toResource(editorService.activeEditor, { supportSideBySide: true });
const activeResource = toResource(editorService.activeEditor || null, { supportSideBySide: true });
if (activeResource && (fileService.canHandleResource(activeResource) || resource.scheme === Schemas.untitled) && activeResource.toString() === resource.toString()) {
viewStateOfSource = activeTextEditorWidget.saveViewState();
}
}
// Special case: an untitled file with associated path gets saved directly unless "saveAs" is true
let savePromise: Promise<URI>;
let savePromise: Promise<URI | null>;
if (!isSaveAs && resource.scheme === Schemas.untitled && untitledEditorService.hasAssociatedFilePath(resource)) {
savePromise = textFileService.save(resource, options).then((result) => {
if (result) {
......@@ -152,7 +152,7 @@ function save(
return savePromise.then((target) => {
if (!target || target.toString() === resource.toString()) {
return undefined; // save canceled or same resource used
return false; // save canceled or same resource used
}
const replacement: IResourceInput = {
......@@ -175,7 +175,7 @@ function save(
// Pin the active editor if we are saving it
const activeControl = editorService.activeControl;
const activeEditorResource = activeControl && activeControl.input && activeControl.input.getResource();
if (activeEditorResource && activeEditorResource.toString() === resource.toString()) {
if (activeControl && activeEditorResource && activeEditorResource.toString() === resource.toString()) {
activeControl.group.pinEditor(activeControl.input);
}
......@@ -203,7 +203,7 @@ function saveAll(saveAllArguments: any, editorService: IEditorService, untitledE
groupIdToUntitledResourceInput.set(g.id, []);
}
groupIdToUntitledResourceInput.get(g.id).push({
groupIdToUntitledResourceInput.get(g.id)!.push({
encoding: untitledEditorService.getEncoding(resource),
resource,
options: {
......
......@@ -9,7 +9,7 @@ import { basename } from 'vs/base/common/resources';
import { Action } from 'vs/base/common/actions';
import { URI } from 'vs/base/common/uri';
import { FileOperationError, FileOperationResult } from 'vs/platform/files/common/files';
import { ITextFileService, ISaveErrorHandler, ITextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles';
import { ITextFileService, ISaveErrorHandler, ITextFileEditorModel, IResolvedTextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles';
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
......@@ -321,7 +321,7 @@ export const acceptLocalChangesCommand = (accessor: ServicesAccessor, resource:
const group = control.group;
resolverService.createModelReference(resource).then(reference => {
const model = reference.object as ITextFileEditorModel;
const model = reference.object as IResolvedTextFileEditorModel;
const localModelSnapshot = model.createSnapshot();
clearPendingResolveSaveConflictMessages(); // hide any previously shown message about how to use these actions
......
......@@ -36,7 +36,7 @@ export interface IOpenEditorOverride {
* If defined, will prevent the opening of an editor and replace the resulting
* promise with the provided promise for the openEditor() call.
*/
override?: Promise<IEditor | null>;
override?: Promise<IEditor | null | undefined>;
}
export interface IActiveEditor extends IEditor {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册