From 616f7845a99d91140ec6dddff0b483903572ede7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Fri, 17 May 2019 16:40:52 -0600 Subject: [PATCH] Fix leak of LanguageMode objects in tests --- src/package-manager.js | 12 +++++++++++- src/text-editor-registry.js | 15 +++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/package-manager.js b/src/package-manager.js index 8171ce19f..653df3527 100644 --- a/src/package-manager.js +++ b/src/package-manager.js @@ -90,6 +90,7 @@ module.exports = class PackageManager { this.packagesCache = packageJSON._atomPackages != null ? packageJSON._atomPackages : {} this.packageDependencies = packageJSON.packageDependencies != null ? packageJSON.packageDependencies : {} this.triggeredActivationHooks.clear() + this.activatePromise = null } /* @@ -114,6 +115,14 @@ module.exports = class PackageManager { return this.emitter.on('did-activate-initial-packages', callback) } + getActivatePromise() { + if (this.activatePromise) { + return this.activatePromise + } else { + return Promise.resolve() + } + } + // Public: Invoke the given callback when a package is activated. // // * `callback` A {Function} to be invoked when a package is activated. @@ -659,10 +668,11 @@ module.exports = class PackageManager { const packages = this.getLoadedPackagesForTypes(types) promises = promises.concat(activator.activatePackages(packages)) } - return Promise.all(promises).then(() => { + this.activatePromise = Promise.all(promises).then(() => { this.triggerDeferredActivationHooks() this.initialPackagesActivated = true this.emitter.emit('did-activate-initial-packages') + this.activatePromise = null }) } diff --git a/src/text-editor-registry.js b/src/text-editor-registry.js index 60862e019..37a546c87 100644 --- a/src/text-editor-registry.js +++ b/src/text-editor-registry.js @@ -38,19 +38,10 @@ const EDITOR_PARAMS_BY_SETTING_KEY = [ module.exports = class TextEditorRegistry { constructor ({config, assert, packageManager}) { - this.assert = assert this.config = config + this.assert = assert + this.packageManager = packageManager this.clear() - - this.initialPackageActivationPromise = new Promise((resolve) => { - // TODO: Remove this usage of a private property of PackageManager. - // Should PackageManager just expose a promise-based API like this? - if (packageManager.deferredActivationHooks) { - packageManager.onDidActivateInitialPackages(resolve) - } else { - resolve() - } - }) } deserialize (state) { @@ -216,7 +207,7 @@ class TextEditorRegistry { } async updateAndMonitorEditorSettings (editor, oldLanguageMode) { - await this.initialPackageActivationPromise + await this.packageManager.getActivatePromise() this.updateEditorSettingsForLanguageMode(editor, oldLanguageMode) this.subscribeToSettingsForEditorScope(editor) }