66import 'vs/css!./media/views' ;
77import Event , { Emitter } from 'vs/base/common/event' ;
88import * as errors from 'vs/base/common/errors' ;
9- import { IDisposable , Disposable } from 'vs/base/common/lifecycle' ;
9+ import { IDisposable , Disposable , dispose } from 'vs/base/common/lifecycle' ;
1010import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation' ;
1111import { TPromise } from 'vs/base/common/winjs.base' ;
1212import * as DOM from 'vs/base/browser/dom' ;
@@ -52,14 +52,6 @@ export class CustomViewsService extends Disposable implements ICustomViewsServic
5252 return this . viewers . get ( id ) ;
5353 }
5454
55- registerTreeViewDataProvider ( id : string , dataProvider : ITreeViewDataProvider ) : void {
56- const treeViewer = < CustomTreeViewer > this . getTreeViewer ( id ) ;
57- if ( treeViewer ) {
58- treeViewer . setDataProvider ( dataProvider ) ;
59- dataProvider . onDispose ( ( ) => treeViewer . setDataProvider ( null ) ) ;
60- }
61- }
62-
6355 private createViewers ( viewDescriptors : IViewDescriptor [ ] ) : void {
6456 for ( const viewDescriptor of viewDescriptors ) {
6557 if ( ( < ICustomViewDescriptor > viewDescriptor ) . treeView ) {
@@ -104,7 +96,7 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
10496 private refreshing = 0 ;
10597
10698 private _dataProvider : ITreeViewDataProvider ;
107- private dataProviderElementChangeListener : IDisposable ;
99+ private dataProviderDisposables : IDisposable [ ] = [ ] ;
108100
109101 constructor (
110102 private id : string ,
@@ -123,10 +115,8 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
123115 return this . _dataProvider ;
124116 }
125117
126- setDataProvider ( dataProvider : ITreeViewDataProvider ) {
127- if ( this . dataProviderElementChangeListener ) {
128- this . dataProviderElementChangeListener . dispose ( ) ;
129- }
118+ set dataProvider ( dataProvider : ITreeViewDataProvider ) {
119+ dispose ( this . dataProviderDisposables ) ;
130120 if ( dataProvider ) {
131121 const customTreeView : CustomTreeViewer = this ;
132122 this . _dataProvider = new class implements ITreeViewDataProvider {
@@ -146,7 +136,8 @@ class CustomTreeViewer extends Disposable implements ITreeViewer {
146136 } ) ;
147137 }
148138 } ;
149- this . dataProviderElementChangeListener = this . _register ( dataProvider . onDidChange ( elements => this . refresh ( elements ) ) ) ;
139+ this . _register ( dataProvider . onDidChange ( elements => this . refresh ( elements ) , this , this . dataProviderDisposables ) ) ;
140+ this . _register ( dataProvider . onDispose ( ( ) => this . dataProvider = null , this , this . dataProviderDisposables ) ) ;
150141 } else {
151142 this . _dataProvider = null ;
152143 }
0 commit comments