Skip to content

Commit ba3e5f9

Browse files
authored
Fix output vsbuffer transfer via workspace edit. (microsoft#209358)
* Fix output vsbuffer transfer via workspace edit. * Adopt interface change.
1 parent de571f4 commit ba3e5f9

8 files changed

+26
-19
lines changed

src/vs/workbench/api/browser/mainThreadBulkEdits.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'
1212
import { IWorkspaceEditDto, IWorkspaceFileEditDto, MainContext, MainThreadBulkEditsShape } from 'vs/workbench/api/common/extHost.protocol';
1313
import { ResourceNotebookCellEdit } from 'vs/workbench/contrib/bulkEdit/browser/bulkCellEdits';
1414
import { IExtHostContext, extHostNamedCustomer } from 'vs/workbench/services/extensions/common/extHostCustomers';
15+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1516

1617

1718
@extHostNamedCustomer(MainContext.MainThreadBulkEdits)
@@ -26,8 +27,8 @@ export class MainThreadBulkEdits implements MainThreadBulkEditsShape {
2627

2728
dispose(): void { }
2829

29-
$tryApplyWorkspaceEdit(dto: IWorkspaceEditDto, undoRedoGroupId?: number, isRefactoring?: boolean): Promise<boolean> {
30-
const edits = reviveWorkspaceEditDto(dto, this._uriIdentService);
30+
$tryApplyWorkspaceEdit(dto: SerializableObjectWithBuffers<IWorkspaceEditDto>, undoRedoGroupId?: number, isRefactoring?: boolean): Promise<boolean> {
31+
const edits = reviveWorkspaceEditDto(dto.value, this._uriIdentService);
3132
return this._bulkEditService.apply(edits, { undoRedoGroupId, respectAutoSaveConfig: isRefactoring }).then((res) => res.isApplied, err => {
3233
this._logService.warn(`IGNORING workspace edit: ${err}`);
3334
return false;

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ export interface ITextDocumentShowOptions {
262262
}
263263

264264
export interface MainThreadBulkEditsShape extends IDisposable {
265-
$tryApplyWorkspaceEdit(workspaceEditDto: IWorkspaceEditDto, undoRedoGroupId?: number, respectAutoSaveConfig?: boolean): Promise<boolean>;
265+
$tryApplyWorkspaceEdit(workspaceEditDto: SerializableObjectWithBuffers<IWorkspaceEditDto>, undoRedoGroupId?: number, respectAutoSaveConfig?: boolean): Promise<boolean>;
266266
}
267267

268268
export interface MainThreadTextEditorsShape extends IDisposable {

src/vs/workbench/api/common/extHostBulkEdits.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { MainContext, MainThreadBulkEditsShape } from 'vs/workbench/api/common/e
88
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
99
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
1010
import { WorkspaceEdit } from 'vs/workbench/api/common/extHostTypeConverters';
11+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1112
import type * as vscode from 'vscode';
1213

1314
export class ExtHostBulkEdits {
@@ -28,7 +29,7 @@ export class ExtHostBulkEdits {
2829
}
2930

3031
applyWorkspaceEdit(edit: vscode.WorkspaceEdit, extension: IExtensionDescription, metadata: vscode.WorkspaceEditMetadata | undefined): Promise<boolean> {
31-
const dto = WorkspaceEdit.from(edit, this._versionInformationProvider);
32+
const dto = new SerializableObjectWithBuffers(WorkspaceEdit.from(edit, this._versionInformationProvider));
3233
return this._proxy.$tryApplyWorkspaceEdit(dto, undefined, metadata?.isRefactoring ?? false);
3334
}
3435
}

src/vs/workbench/api/common/extHostDocumentSaveParticipant.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import type * as vscode from 'vscode';
1515
import { LinkedList } from 'vs/base/common/linkedList';
1616
import { ILogService } from 'vs/platform/log/common/log';
1717
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
18+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1819

1920
type Listener = [Function, any, IExtensionDescription];
2021

@@ -165,7 +166,7 @@ export class ExtHostDocumentSaveParticipant implements ExtHostDocumentSavePartic
165166
}
166167

167168
if (version === document.version) {
168-
return this._mainThreadBulkEdits.$tryApplyWorkspaceEdit(dto);
169+
return this._mainThreadBulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers(dto));
169170
}
170171

171172
return Promise.reject(new Error('concurrent_edits'));

src/vs/workbench/api/common/extHostNotebookDocumentSaveParticipant.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebo
1313
import { TextDocumentSaveReason, WorkspaceEdit as WorksapceEditConverter } from 'vs/workbench/api/common/extHostTypeConverters';
1414
import { WorkspaceEdit } from 'vs/workbench/api/common/extHostTypes';
1515
import { SaveReason } from 'vs/workbench/common/editor';
16+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1617
import { NotebookDocumentWillSaveEvent } from 'vscode';
1718

1819
interface IExtensionListener<E> {
@@ -90,6 +91,6 @@ export class ExtHostNotebookDocumentSaveParticipant implements ExtHostNotebookDo
9091
dto.edits = dto.edits.concat(edits);
9192
}
9293

93-
return this._mainThreadBulkEdits.$tryApplyWorkspaceEdit(dto);
94+
return this._mainThreadBulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers(dto));
9495
}
9596
}

src/vs/workbench/api/test/browser/extHostBulkEdits.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { NullLogService } from 'vs/platform/log/common/log';
1313
import { ExtHostBulkEdits } from 'vs/workbench/api/common/extHostBulkEdits';
1414
import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1515
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
16+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1617

1718
suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {
1819

@@ -25,8 +26,8 @@ suite('ExtHostBulkEdits.applyWorkspaceEdit', () => {
2526

2627
const rpcProtocol = new TestRPCProtocol();
2728
rpcProtocol.set(MainContext.MainThreadBulkEdits, new class extends mock<MainThreadBulkEditsShape>() {
28-
override $tryApplyWorkspaceEdit(_workspaceResourceEdits: IWorkspaceEditDto): Promise<boolean> {
29-
workspaceResourceEdits = _workspaceResourceEdits;
29+
override $tryApplyWorkspaceEdit(_workspaceResourceEdits: SerializableObjectWithBuffers<IWorkspaceEditDto>): Promise<boolean> {
30+
workspaceResourceEdits = _workspaceResourceEdits.value;
3031
return Promise.resolve(true);
3132
}
3233
});

src/vs/workbench/api/test/browser/extHostDocumentSaveParticipant.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { mock } from 'vs/base/test/common/mock';
1616
import { NullLogService } from 'vs/platform/log/common/log';
1717
import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1818
import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils';
19+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
1920

2021
function timeout(n: number) {
2122
return new Promise(resolve => setTimeout(resolve, n));
@@ -257,8 +258,8 @@ suite('ExtHostDocumentSaveParticipant', () => {
257258

258259
let dto: IWorkspaceEditDto;
259260
const participant = new ExtHostDocumentSaveParticipant(nullLogService, documents, new class extends mock<MainThreadTextEditorsShape>() {
260-
$tryApplyWorkspaceEdit(_edits: IWorkspaceEditDto) {
261-
dto = _edits;
261+
$tryApplyWorkspaceEdit(_edits: SerializableObjectWithBuffers<IWorkspaceEditDto>) {
262+
dto = _edits.value;
262263
return Promise.resolve(true);
263264
}
264265
});
@@ -281,8 +282,8 @@ suite('ExtHostDocumentSaveParticipant', () => {
281282

282283
let edits: IWorkspaceEditDto;
283284
const participant = new ExtHostDocumentSaveParticipant(nullLogService, documents, new class extends mock<MainThreadTextEditorsShape>() {
284-
$tryApplyWorkspaceEdit(_edits: IWorkspaceEditDto) {
285-
edits = _edits;
285+
$tryApplyWorkspaceEdit(_edits: SerializableObjectWithBuffers<IWorkspaceEditDto>) {
286+
edits = _edits.value;
286287
return Promise.resolve(true);
287288
}
288289
});
@@ -318,9 +319,9 @@ suite('ExtHostDocumentSaveParticipant', () => {
318319
test('event delivery, two listeners -> two document states', () => {
319320

320321
const participant = new ExtHostDocumentSaveParticipant(nullLogService, documents, new class extends mock<MainThreadTextEditorsShape>() {
321-
$tryApplyWorkspaceEdit(dto: IWorkspaceEditDto) {
322+
$tryApplyWorkspaceEdit(dto: SerializableObjectWithBuffers<IWorkspaceEditDto>) {
322323

323-
for (const edit of dto.edits) {
324+
for (const edit of dto.value.edits) {
324325

325326
const uri = URI.revive((<IWorkspaceTextEditDto>edit).resource);
326327
const { text, range } = (<IWorkspaceTextEditDto>edit).textEdit;

src/vs/workbench/api/test/browser/mainThreadEditors.test.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import { BulkEditService } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditS
4848
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
4949
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
5050
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
51+
import { SerializableObjectWithBuffers } from 'vs/workbench/services/extensions/common/proxyIdentifier';
5152
import { LabelService } from 'vs/workbench/services/label/common/labelService';
5253
import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecycle';
5354
import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite';
@@ -204,7 +205,7 @@ suite('MainThreadEditors', () => {
204205
// Act as if the user edited the model
205206
model.applyEdits([EditOperation.insert(new Position(0, 0), 'something')]);
206207

207-
return bulkEdits.$tryApplyWorkspaceEdit({ edits: [workspaceResourceEdit] }).then((result) => {
208+
return bulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers({ edits: [workspaceResourceEdit] })).then((result) => {
208209
assert.strictEqual(result, false);
209210
});
210211
});
@@ -230,25 +231,25 @@ suite('MainThreadEditors', () => {
230231
}
231232
};
232233

233-
const p1 = bulkEdits.$tryApplyWorkspaceEdit({ edits: [workspaceResourceEdit1] }).then((result) => {
234+
const p1 = bulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers({ edits: [workspaceResourceEdit1] })).then((result) => {
234235
// first edit request succeeds
235236
assert.strictEqual(result, true);
236237
});
237-
const p2 = bulkEdits.$tryApplyWorkspaceEdit({ edits: [workspaceResourceEdit2] }).then((result) => {
238+
const p2 = bulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers({ edits: [workspaceResourceEdit2] })).then((result) => {
238239
// second edit request fails
239240
assert.strictEqual(result, false);
240241
});
241242
return Promise.all([p1, p2]);
242243
});
243244

244245
test(`applyWorkspaceEdit with only resource edit`, () => {
245-
return bulkEdits.$tryApplyWorkspaceEdit({
246+
return bulkEdits.$tryApplyWorkspaceEdit(new SerializableObjectWithBuffers({
246247
edits: [
247248
{ oldResource: resource, newResource: resource, options: undefined },
248249
{ oldResource: undefined, newResource: resource, options: undefined },
249250
{ oldResource: resource, newResource: undefined, options: undefined }
250251
]
251-
}).then((result) => {
252+
})).then((result) => {
252253
assert.strictEqual(result, true);
253254
assert.strictEqual(movedResources.get(resource), resource);
254255
assert.strictEqual(createdResources.has(resource), true);

0 commit comments

Comments
 (0)