debug: dispose created internal source models on debug session end

#18148
This commit is contained in:
isidor 2017-01-05 22:10:50 +01:00
parent 9eb91d2de4
commit 5ab7523103

View file

@ -3,6 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as lifecycle from 'vs/base/common/lifecycle';
import uri from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { guessMimeTypes } from 'vs/base/common/mime';
@ -10,13 +11,15 @@ import { IModel } from 'vs/editor/common/editorCommon';
import { IModelService } from 'vs/editor/common/services/modelService';
import { IModeService } from 'vs/editor/common/services/modeService';
import { ITextModelResolverService, ITextModelContentProvider } from 'vs/editor/common/services/resolverService';
import { DEBUG_SCHEME, IDebugService } from 'vs/workbench/parts/debug/common/debug';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { DEBUG_SCHEME, IDebugService, State } from 'vs/workbench/parts/debug/common/debug';
import { Model } from 'vs/workbench/parts/debug/common/debugModel';
import { Source } from 'vs/workbench/parts/debug/common/debugSource';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
export class DebugContentProvider implements IWorkbenchContribution, ITextModelContentProvider {
private modelsToDispose: IModel[];
constructor(
@ITextModelResolverService textModelResolverService: ITextModelResolverService,
@IDebugService private debugService: IDebugService,
@ -24,6 +27,12 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC
@IModeService private modeService: IModeService
) {
textModelResolverService.registerTextModelContentProvider(DEBUG_SCHEME, this);
this.modelsToDispose = [];
this.debugService.onDidChangeState(() => {
if (this.debugService.state === State.Inactive) {
this.modelsToDispose = lifecycle.dispose(this.modelsToDispose);
}
});
}
public getId(): string {
@ -39,8 +48,10 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC
return process.session.source({ sourceReference: Source.getSourceReference(resource) }).then(response => {
const mime = response.body.mimeType || guessMimeTypes(resource.toString())[0];
const modePromise = this.modeService.getOrCreateMode(mime);
const model = this.modelService.createModel(response.body.content, modePromise, resource);
this.modelsToDispose.push(model);
return this.modelService.createModel(response.body.content, modePromise, resource);
return model;
}, err => {
(<Model>this.debugService.getModel()).sourceIsUnavailable(resource);
return err;