提交 8e28611a 编写于 作者: S Sandeep Somavarapu

#78168 strict init

上级 c08cfdf1
...@@ -156,7 +156,7 @@ export class UnknownExtensionRenderer implements IListRenderer<ITreeNode<IExtens ...@@ -156,7 +156,7 @@ export class UnknownExtensionRenderer implements IListRenderer<ITreeNode<IExtens
class OpenExtensionAction extends Action { class OpenExtensionAction extends Action {
private _extensionData: IExtensionData; private _extensionData: IExtensionData | undefined;
constructor(@IExtensionsWorkbenchService private readonly extensionsWorkdbenchService: IExtensionsWorkbenchService) { constructor(@IExtensionsWorkbenchService private readonly extensionsWorkdbenchService: IExtensionsWorkbenchService) {
super('extensions.action.openExtension', ''); super('extensions.action.openExtension', '');
...@@ -166,12 +166,11 @@ class OpenExtensionAction extends Action { ...@@ -166,12 +166,11 @@ class OpenExtensionAction extends Action {
this._extensionData = extension; this._extensionData = extension;
} }
public get extensionData(): IExtensionData {
return this._extensionData;
}
run(sideByside: boolean): Promise<any> { run(sideByside: boolean): Promise<any> {
return this.extensionsWorkdbenchService.open(this.extensionData.extension, sideByside); if (this._extensionData) {
return this.extensionsWorkdbenchService.open(this._extensionData.extension, sideByside);
}
return Promise.resolve();
} }
} }
...@@ -263,4 +262,4 @@ export class ExtensionData implements IExtensionData { ...@@ -263,4 +262,4 @@ export class ExtensionData implements IExtensionData {
} }
return null; return null;
} }
} }
\ No newline at end of file
...@@ -74,14 +74,15 @@ class ExtensionListViewWarning extends Error { } ...@@ -74,14 +74,15 @@ class ExtensionListViewWarning extends Error { }
export class ExtensionsListView extends ViewletPanel { export class ExtensionsListView extends ViewletPanel {
protected readonly server: IExtensionManagementServer | undefined; protected readonly server: IExtensionManagementServer | undefined;
private messageContainer: HTMLElement; private bodyTemplate: {
private messageSeverityIcon: HTMLElement; messageContainer: HTMLElement;
private messageBox: HTMLElement; messageSeverityIcon: HTMLElement;
private extensionsList: HTMLElement; messageBox: HTMLElement;
private badge: CountBadge; extensionsList: HTMLElement;
protected badgeContainer: HTMLElement; } | undefined;
private list: WorkbenchPagedList<IExtension> | null; private badge: CountBadge | undefined;
private queryRequest: { query: string, request: CancelablePromise<IPagedModel<IExtension>> } | null; private list: WorkbenchPagedList<IExtension> | null = null;
private queryRequest: { query: string, request: CancelablePromise<IPagedModel<IExtension>> } | null = null;
constructor( constructor(
options: ExtensionsListViewOptions, options: ExtensionsListViewOptions,
...@@ -111,20 +112,19 @@ export class ExtensionsListView extends ViewletPanel { ...@@ -111,20 +112,19 @@ export class ExtensionsListView extends ViewletPanel {
addClass(container, 'extension-view-header'); addClass(container, 'extension-view-header');
super.renderHeader(container); super.renderHeader(container);
this.badgeContainer = append(container, $('.count-badge-wrapper')); this.badge = new CountBadge(append(container, $('.count-badge-wrapper')));
this.badge = new CountBadge(this.badgeContainer);
this._register(attachBadgeStyler(this.badge, this.themeService)); this._register(attachBadgeStyler(this.badge, this.themeService));
} }
renderBody(container: HTMLElement): void { renderBody(container: HTMLElement): void {
this.extensionsList = append(container, $('.extensions-list')); const extensionsList = append(container, $('.extensions-list'));
this.messageContainer = append(container, $('.message-container')); const messageContainer = append(container, $('.message-container'));
this.messageSeverityIcon = append(this.messageContainer, $('')); const messageSeverityIcon = append(messageContainer, $(''));
this.messageBox = append(this.messageContainer, $('.message')); const messageBox = append(messageContainer, $('.message'));
const delegate = new Delegate(); const delegate = new Delegate();
const extensionsViewState = new ExtensionsViewState(); const extensionsViewState = new ExtensionsViewState();
const renderer = this.instantiationService.createInstance(Renderer, extensionsViewState); const renderer = this.instantiationService.createInstance(Renderer, extensionsViewState);
this.list = this.instantiationService.createInstance(WorkbenchPagedList, this.extensionsList, delegate, [renderer], { this.list = this.instantiationService.createInstance(WorkbenchPagedList, extensionsList, delegate, [renderer], {
ariaLabel: localize('extensions', "Extensions"), ariaLabel: localize('extensions', "Extensions"),
multipleSelectionSupport: false, multipleSelectionSupport: false,
setRowLineHeight: false, setRowLineHeight: false,
...@@ -144,10 +144,19 @@ export class ExtensionsListView extends ViewletPanel { ...@@ -144,10 +144,19 @@ export class ExtensionsListView extends ViewletPanel {
.map(e => e.elements[0]) .map(e => e.elements[0])
.filter(e => !!e) .filter(e => !!e)
.on(this.pin, this)); .on(this.pin, this));
this.bodyTemplate = {
extensionsList,
messageBox,
messageContainer,
messageSeverityIcon
};
} }
protected layoutBody(height: number, width: number): void { protected layoutBody(height: number, width: number): void {
this.extensionsList.style.height = height + 'px'; if (this.bodyTemplate) {
this.bodyTemplate.extensionsList.style.height = height + 'px';
}
if (this.list) { if (this.list) {
this.list.layout(height, width); this.list.layout(height, width);
} }
...@@ -479,7 +488,7 @@ export class ExtensionsListView extends ViewletPanel { ...@@ -479,7 +488,7 @@ export class ExtensionsListView extends ViewletPanel {
} }
private _searchExperiments: Promise<IExperiment[]>; private _searchExperiments: Promise<IExperiment[]> | undefined;
private getSearchExperiments(): Promise<IExperiment[]> { private getSearchExperiments(): Promise<IExperiment[]> {
if (!this._searchExperiments) { if (!this._searchExperiments) {
this._searchExperiments = this.experimentService.getExperimentsByType(ExperimentActionType.ExtensionSearchResults); this._searchExperiments = this.experimentService.getExperimentsByType(ExperimentActionType.ExtensionSearchResults);
...@@ -690,24 +699,27 @@ export class ExtensionsListView extends ViewletPanel { ...@@ -690,24 +699,27 @@ export class ExtensionsListView extends ViewletPanel {
this.list.scrollTop = 0; this.list.scrollTop = 0;
const count = this.count(); const count = this.count();
toggleClass(this.extensionsList, 'hidden', count === 0); if (this.bodyTemplate && this.badge) {
toggleClass(this.messageContainer, 'hidden', count > 0);
this.badge.setCount(count);
if (count === 0 && this.isBodyVisible()) { toggleClass(this.bodyTemplate.extensionsList, 'hidden', count === 0);
if (error) { toggleClass(this.bodyTemplate.messageContainer, 'hidden', count > 0);
if (error instanceof ExtensionListViewWarning) { this.badge.setCount(count);
this.messageSeverityIcon.className = SeverityIcon.className(Severity.Warning);
this.messageBox.textContent = getErrorMessage(error); if (count === 0 && this.isBodyVisible()) {
if (error) {
if (error instanceof ExtensionListViewWarning) {
this.bodyTemplate.messageSeverityIcon.className = SeverityIcon.className(Severity.Warning);
this.bodyTemplate.messageBox.textContent = getErrorMessage(error);
} else {
this.bodyTemplate.messageSeverityIcon.className = SeverityIcon.className(Severity.Error);
this.bodyTemplate.messageBox.textContent = localize('error', "Error while loading extensions. {0}", getErrorMessage(error));
}
} else { } else {
this.messageSeverityIcon.className = SeverityIcon.className(Severity.Error); this.bodyTemplate.messageSeverityIcon.className = '';
this.messageBox.textContent = localize('error', "Error while loading extensions. {0}", getErrorMessage(error)); this.bodyTemplate.messageBox.textContent = localize('no extensions found', "No extensions found.");
} }
} else { alert(this.bodyTemplate.messageBox.textContent);
this.messageSeverityIcon.className = '';
this.messageBox.textContent = localize('no extensions found', "No extensions found.");
} }
alert(this.messageBox.textContent);
} }
} }
} }
...@@ -949,7 +961,7 @@ export class RecommendedExtensionsView extends ExtensionsListView { ...@@ -949,7 +961,7 @@ export class RecommendedExtensionsView extends ExtensionsListView {
export class WorkspaceRecommendedExtensionsView extends ExtensionsListView { export class WorkspaceRecommendedExtensionsView extends ExtensionsListView {
private readonly recommendedExtensionsQuery = '@recommended:workspace'; private readonly recommendedExtensionsQuery = '@recommended:workspace';
private installAllAction: InstallWorkspaceRecommendedExtensionsAction; private installAllAction: InstallWorkspaceRecommendedExtensionsAction | undefined;
renderBody(container: HTMLElement): void { renderBody(container: HTMLElement): void {
super.renderBody(container); super.renderBody(container);
......
...@@ -18,9 +18,9 @@ import { Emitter, Event } from 'vs/base/common/event'; ...@@ -18,9 +18,9 @@ import { Emitter, Event } from 'vs/base/common/event';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
export abstract class ExtensionWidget extends Disposable implements IExtensionContainer { export abstract class ExtensionWidget extends Disposable implements IExtensionContainer {
private _extension: IExtension; private _extension: IExtension | null = null;
get extension(): IExtension { return this._extension; } get extension(): IExtension | null { return this._extension; }
set extension(extension: IExtension) { this._extension = extension; this.update(); } set extension(extension: IExtension | null) { this._extension = extension; this.update(); }
update(): void { this.render(); } update(): void { this.render(); }
abstract render(): void; abstract render(): void;
} }
...@@ -183,7 +183,7 @@ export class RecommendationWidget extends ExtensionWidget { ...@@ -183,7 +183,7 @@ export class RecommendationWidget extends ExtensionWidget {
private element?: HTMLElement; private element?: HTMLElement;
private readonly disposables = this._register(new DisposableStore()); private readonly disposables = this._register(new DisposableStore());
private _tooltip: string; private _tooltip: string = '';
get tooltip(): string { return this._tooltip; } get tooltip(): string { return this._tooltip; }
set tooltip(tooltip: string) { set tooltip(tooltip: string) {
if (this._tooltip !== tooltip) { if (this._tooltip !== tooltip) {
...@@ -314,4 +314,4 @@ class RemoteBadge extends Disposable { ...@@ -314,4 +314,4 @@ class RemoteBadge extends Disposable {
updateTitle(); updateTitle();
} }
} }
} }
\ No newline at end of file
...@@ -484,7 +484,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension ...@@ -484,7 +484,7 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
private readonly _onChange: Emitter<IExtension | undefined> = new Emitter<IExtension | undefined>(); private readonly _onChange: Emitter<IExtension | undefined> = new Emitter<IExtension | undefined>();
get onChange(): Event<IExtension | undefined> { return this._onChange.event; } get onChange(): Event<IExtension | undefined> { return this._onChange.event; }
private _extensionAllowedBadgeProviders: string[]; private _extensionAllowedBadgeProviders: string[] | undefined;
private installing: IExtension[] = []; private installing: IExtension[] = [];
constructor( constructor(
...@@ -1096,12 +1096,12 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension ...@@ -1096,12 +1096,12 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
} }
private _ignoredAutoUpdateExtensions: string[]; private _ignoredAutoUpdateExtensions: string[] | undefined;
private get ignoredAutoUpdateExtensions(): string[] { private get ignoredAutoUpdateExtensions(): string[] {
if (!this._ignoredAutoUpdateExtensions) { if (!this._ignoredAutoUpdateExtensions) {
this._ignoredAutoUpdateExtensions = JSON.parse(this.storageService.get('extensions.ignoredAutoUpdateExtension', StorageScope.GLOBAL, '[]') || '[]'); this._ignoredAutoUpdateExtensions = JSON.parse(this.storageService.get('extensions.ignoredAutoUpdateExtension', StorageScope.GLOBAL, '[]') || '[]');
} }
return this._ignoredAutoUpdateExtensions; return this._ignoredAutoUpdateExtensions!;
} }
private set ignoredAutoUpdateExtensions(extensionIds: string[]) { private set ignoredAutoUpdateExtensions(extensionIds: string[]) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册