Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d (#5949)

* Merge from vscode 81d7885dc2e9dc617e1522697a2966bc4025a45d

* Fix vs unit tests and hygiene issue

* Fix strict null check issue
This commit is contained in:
Chris LaFreniere
2019-06-10 18:27:09 -07:00
committed by GitHub
parent ff38bc8143
commit d15a3fcc98
926 changed files with 19529 additions and 11383 deletions

View File

@@ -6,7 +6,7 @@
import 'vs/css!./media/compositepart';
import * as nls from 'vs/nls';
import { defaultGenerator } from 'vs/base/common/idGenerator';
import { IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
import { IDisposable, dispose, DisposableStore } from 'vs/base/common/lifecycle';
import * as strings from 'vs/base/common/strings';
import { Emitter } from 'vs/base/common/event';
import * as errors from 'vs/base/common/errors';
@@ -18,13 +18,13 @@ import { IAction } from 'vs/base/common/actions';
import { Part, IPartOptions } from 'vs/workbench/browser/part';
import { Composite, CompositeRegistry } from 'vs/workbench/browser/composite';
import { IComposite } from 'vs/workbench/common/composite';
import { ScopedProgressService } from 'vs/workbench/services/progress/browser/progressService';
import { ScopedProgressService } from 'vs/workbench/services/progress/browser/localProgressService';
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { IProgressService } from 'vs/platform/progress/common/progress';
import { ILocalProgressService } from 'vs/platform/progress/common/progress';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IThemeService } from 'vs/platform/theme/common/themeService';
@@ -50,7 +50,7 @@ export interface ICompositeTitleLabel {
interface CompositeItem {
composite: Composite;
disposable: IDisposable;
progressService: IProgressService;
localProgressService: ILocalProgressService;
}
export abstract class CompositePart<T extends Composite> extends Part {
@@ -60,8 +60,8 @@ export abstract class CompositePart<T extends Composite> extends Part {
protected toolBar: ToolBar;
private mapCompositeToCompositeContainer: { [compositeId: string]: HTMLElement; };
private mapActionsBindingToComposite: { [compositeId: string]: () => void; };
private mapCompositeToCompositeContainer = new Map<string, HTMLElement>();
private mapActionsBindingToComposite = new Map<string, () => void>();
private activeComposite: Composite | null;
private lastActiveCompositeId: string;
private instantiatedCompositeItems: Map<string, CompositeItem>;
@@ -91,8 +91,6 @@ export abstract class CompositePart<T extends Composite> extends Part {
) {
super(id, options, themeService, storageService, layoutService);
this.mapCompositeToCompositeContainer = {};
this.mapActionsBindingToComposite = {};
this.activeComposite = null;
this.instantiatedCompositeItems = new Map<string, CompositeItem>();
this.lastActiveCompositeId = storageService.get(activeCompositeSettingsKey, StorageScope.WORKSPACE, this.defaultCompositeId);
@@ -171,17 +169,17 @@ export abstract class CompositePart<T extends Composite> extends Part {
// Instantiate composite from registry otherwise
const compositeDescriptor = this.registry.getComposite(id);
if (compositeDescriptor) {
const progressService = this.instantiationService.createInstance(ScopedProgressService, this.progressBar, compositeDescriptor.id, isActive);
const compositeInstantiationService = this.instantiationService.createChild(new ServiceCollection([IProgressService, progressService]));
const localProgressService = this.instantiationService.createInstance(ScopedProgressService, this.progressBar, compositeDescriptor.id, isActive);
const compositeInstantiationService = this.instantiationService.createChild(new ServiceCollection([ILocalProgressService, localProgressService]));
const composite = compositeDescriptor.instantiate(compositeInstantiationService);
const disposables: IDisposable[] = [];
const disposables = new DisposableStore();
// Remember as Instantiated
this.instantiatedCompositeItems.set(id, { composite, disposable: toDisposable(() => dispose(disposables)), progressService });
this.instantiatedCompositeItems.set(id, { composite, disposable: disposables, localProgressService });
// Register to title area update events from the composite
composite.onTitleAreaUpdate(() => this.onTitleAreaUpdate(composite.getId()), this, disposables);
disposables.add(composite.onTitleAreaUpdate(() => this.onTitleAreaUpdate(composite.getId()), this));
return composite;
}
@@ -206,7 +204,7 @@ export abstract class CompositePart<T extends Composite> extends Part {
this.lastActiveCompositeId = this.activeComposite.getId();
// Composites created for the first time
let compositeContainer = this.mapCompositeToCompositeContainer[composite.getId()];
let compositeContainer = this.mapCompositeToCompositeContainer.get(composite.getId());
if (!compositeContainer) {
// Build Container off-DOM
@@ -218,13 +216,7 @@ export abstract class CompositePart<T extends Composite> extends Part {
composite.updateStyles();
// Remember composite container
this.mapCompositeToCompositeContainer[composite.getId()] = compositeContainer;
}
// Report progress for slow loading composites (but only if we did not create the composites before already)
const compositeItem = this.instantiatedCompositeItems.get(composite.getId());
if (compositeItem && !compositeContainer) {
compositeItem.progressService.showWhile(Promise.resolve(), this.layoutService.isRestored() ? 800 : 3200 /* less ugly initial startup */);
this.mapCompositeToCompositeContainer.set(composite.getId(), compositeContainer);
}
// Fill Content and Actions
@@ -250,10 +242,10 @@ export abstract class CompositePart<T extends Composite> extends Part {
}
// Handle Composite Actions
let actionsBinding = this.mapActionsBindingToComposite[composite.getId()];
let actionsBinding = this.mapActionsBindingToComposite.get(composite.getId());
if (!actionsBinding) {
actionsBinding = this.collectCompositeActions(composite);
this.mapActionsBindingToComposite[composite.getId()] = actionsBinding;
this.mapActionsBindingToComposite.set(composite.getId(), actionsBinding);
}
actionsBinding();
@@ -306,13 +298,13 @@ export abstract class CompositePart<T extends Composite> extends Part {
// Actions
const actionsBinding = this.collectCompositeActions(this.activeComposite);
this.mapActionsBindingToComposite[this.activeComposite.getId()] = actionsBinding;
this.mapActionsBindingToComposite.set(this.activeComposite.getId(), actionsBinding);
actionsBinding();
}
// Otherwise invalidate actions binding for next time when the composite becomes visible
else {
delete this.mapActionsBindingToComposite[compositeId];
this.mapActionsBindingToComposite.delete(compositeId);
}
}
@@ -366,14 +358,16 @@ export abstract class CompositePart<T extends Composite> extends Part {
const composite = this.activeComposite;
this.activeComposite = null;
const compositeContainer = this.mapCompositeToCompositeContainer[composite.getId()];
const compositeContainer = this.mapCompositeToCompositeContainer.get(composite.getId());
// Indicate to Composite
composite.setVisible(false);
// Take Container Off-DOM and hide
compositeContainer.remove();
hide(compositeContainer);
if (compositeContainer) {
compositeContainer.remove();
hide(compositeContainer);
}
// Clear any running Progress
this.progressBar.stop().hide();
@@ -462,17 +456,17 @@ export abstract class CompositePart<T extends Composite> extends Part {
return contentContainer;
}
getProgressIndicator(id: string): IProgressService | null {
getProgressIndicator(id: string): ILocalProgressService | null {
const compositeItem = this.instantiatedCompositeItems.get(id);
return compositeItem ? compositeItem.progressService : null;
return compositeItem ? compositeItem.localProgressService : null;
}
protected getActions(): IAction[] {
protected getActions(): ReadonlyArray<IAction> {
return [];
}
protected getSecondaryActions(): IAction[] {
protected getSecondaryActions(): ReadonlyArray<IAction> {
return [];
}
@@ -496,8 +490,8 @@ export abstract class CompositePart<T extends Composite> extends Part {
return false; // do not remove active composite
}
delete this.mapCompositeToCompositeContainer[compositeId];
delete this.mapActionsBindingToComposite[compositeId];
this.mapCompositeToCompositeContainer.delete(compositeId);
this.mapActionsBindingToComposite.delete(compositeId);
const compositeItem = this.instantiatedCompositeItems.get(compositeId);
if (compositeItem) {
compositeItem.composite.dispose();
@@ -509,8 +503,8 @@ export abstract class CompositePart<T extends Composite> extends Part {
}
dispose(): void {
this.mapCompositeToCompositeContainer = null!; // StrictNullOverride: nulling out ok in dispose
this.mapActionsBindingToComposite = null!; // StrictNullOverride: nulling out ok in dispose
this.mapCompositeToCompositeContainer.clear();
this.mapActionsBindingToComposite.clear();
this.instantiatedCompositeItems.forEach(compositeItem => {
compositeItem.composite.dispose();