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

Strict null work in files/browser

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