diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index cef953e7fa2..afe26f89aa6 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -502,6 +502,7 @@ "./vs/platform/search/common/search.ts", "./vs/platform/search/test/common/replace.test.ts", "./vs/platform/state/common/state.ts", + "./vs/platform/state/node/stateService.ts", "./vs/platform/statusbar/common/statusbar.ts", "./vs/platform/storage/common/storage.ts", "./vs/platform/storage/common/storageLegacyService.ts", diff --git a/src/vs/platform/state/common/state.ts b/src/vs/platform/state/common/state.ts index db914cc4495..b6656dca46d 100644 --- a/src/vs/platform/state/common/state.ts +++ b/src/vs/platform/state/common/state.ts @@ -10,7 +10,8 @@ export const IStateService = createDecorator('stateService'); export interface IStateService { _serviceBrand: any; - getItem(key: string, defaultValue?: T): T; + getItem(key: string, defaultValue: T): T; + getItem(key: string, defaultValue?: T): T | undefined; setItem(key: string, data: any): void; removeItem(key: string): void; } \ No newline at end of file diff --git a/src/vs/platform/state/node/stateService.ts b/src/vs/platform/state/node/stateService.ts index 57c369a9275..4f09728a42e 100644 --- a/src/vs/platform/state/node/stateService.ts +++ b/src/vs/platform/state/node/stateService.ts @@ -13,19 +13,19 @@ import { ILogService } from 'vs/platform/log/common/log'; export class FileStorage { - private database: object | null = null; + private _lazyDatabase: object | null = null; constructor(private dbPath: string, private onError: (error) => void) { } - private ensureLoaded(): void { - if (!this.database) { - this.database = this.loadSync(); + private get database(): object { + if (!this._lazyDatabase) { + this._lazyDatabase = this.loadSync(); } + return this._lazyDatabase; } - getItem(key: string, defaultValue?: T): T { - this.ensureLoaded(); - + getItem(key: string, defaultValue: T): T; + getItem(key: string, defaultValue?: T): T | undefined { const res = this.database[key]; if (isUndefinedOrNull(res)) { return defaultValue; @@ -35,8 +35,6 @@ export class FileStorage { } setItem(key: string, data: any): void { - this.ensureLoaded(); - // Remove an item when it is undefined or null if (isUndefinedOrNull(data)) { return this.removeItem(key); @@ -54,8 +52,6 @@ export class FileStorage { } removeItem(key: string): void { - this.ensureLoaded(); - // Only update if the key is actually present (not undefined) if (!isUndefined(this.database[key])) { this.database[key] = void 0; @@ -94,7 +90,8 @@ export class StateService implements IStateService { this.fileStorage = new FileStorage(path.join(environmentService.userDataPath, 'storage.json'), error => logService.error(error)); } - getItem(key: string, defaultValue?: T): T { + getItem(key: string, defaultValue: T): T; + getItem(key: string, defaultValue?: T): T | undefined { return this.fileStorage.getItem(key, defaultValue); }