src/vs/workbench/contrib/mergeEditor/browser/view/mergeEditor.ts/MergeEditor/setInput
class MergeEditor:	override async setInput(input: EditorInput, options: IEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise<void> {
		if (!(input instanceof MergeEditorInput)) {
			throw new BugIndicatingError('ONLY MergeEditorInput is supported');
		}
		await super.setInput(input, options, context, token);

		this._sessionDisposables.clear();
		this._toggleEditorOverwrite(true);

		const model = await input.resolve();
		this._model = model;

		const viewModel = new MergeEditorViewModel(model, this.input1View, this.input2View, this.inputResultView);

		this.input1View.setModel(viewModel, model.input1, model.input1Title || localize('input1', 'Input 1'), model.input1Detail, model.input1Description);
		this.input2View.setModel(viewModel, model.input2, model.input2Title || localize('input2', 'Input 2',), model.input2Detail, model.input2Description);
		this.inputResultView.setModel(viewModel, model.result, localize('result', 'Result',), this._labelService.getUriLabel(model.result.uri, { relative: true }), undefined);
		this._ctxBaseResourceScheme.set(model.base.uri.scheme);

		const viewState = this.loadEditorViewState(input, context);
		this._applyViewState(viewState);

		this._sessionDisposables.add(thenIfNotDisposed(model.onInitialized, () => {
			const firstConflict = model.modifiedBaseRanges.get().find(r => r.isConflicting);
			if (!firstConflict) {
				return;
			}

			this.input1View.editor.revealLineInCenter(firstConflict.input1Range.startLineNumber);
		}));


		this._sessionDisposables.add(autorunWithStore((reader, store) => {
			const input1ViewZoneIds: string[] = [];
			const input2ViewZoneIds: string[] = [];
			for (const m of model.modifiedBaseRanges.read(reader)) {
				const max = Math.max(m.input1Range.lineCount, m.input2Range.lineCount, 1);

				this.input1View.editor.changeViewZones(a => {
					input1ViewZoneIds.push(a.addZone({
						afterLineNumber: m.input1Range.endLineNumberExclusive - 1,
						heightInLines: max - m.input1Range.lineCount,
						domNode: $('div.diagonal-fill'),
					}));
				});

				this.input2View.editor.changeViewZones(a => {
					input2ViewZoneIds.push(a.addZone({
						afterLineNumber: m.input2Range.endLineNumberExclusive - 1,
						heightInLines: max - m.input2Range.lineCount,
						domNode: $('div.diagonal-fill'),
					}));
				});
			}

			store.add({
				dispose: () => {
					this.input1View.editor.changeViewZones(a => {
						for (const zone of input1ViewZoneIds) {
							a.removeZone(zone);
						}
					});
					this.input2View.editor.changeViewZones(a => {
						for (const zone of input2ViewZoneIds) {
							a.removeZone(zone);
						}
					});
				}
			});
		}, 'update alignment view zones'));
	}