src/vs/workbench/contrib/bulkEdit/browser/preview/bulkEditPreview.ts/BulkEditPreviewProvider/_getOrCreatePreviewModel
class BulkEditPreviewProvider:	private async _getOrCreatePreviewModel(uri: URI) {
		const previewUri = BulkEditPreviewProvider.asPreviewUri(uri);
		let model = this._modelService.getModel(previewUri);
		if (!model) {
			try {
				// try: copy existing
				const ref = await this._textModelResolverService.createModelReference(uri);
				const sourceModel = ref.object.textEditorModel;
				model = this._modelService.createModel(
					createTextBufferFactoryFromSnapshot(sourceModel.createSnapshot()),
					this._modeService.create(sourceModel.getLanguageIdentifier().language),
					previewUri
				);
				ref.dispose();

			} catch {
				// create NEW model
				model = this._modelService.createModel(
					'',
					this._modeService.createByFilepathOrFirstLine(previewUri),
					previewUri
				);
			}
			// this is a little weird but otherwise editors and other cusomers
			// will dispose my models before they should be disposed...
			// And all of this is off the eventloop to prevent endless recursion
			new Promise(async () => this._disposables.add(await this._textModelResolverService.createModelReference(model!.uri)));
		}
		return model;
	}