Merge pull request #9527 from atom/lierdakil-defer-act-hooks

Lierdakil: Defer Activation Hooks
This commit is contained in:
Nathan Sobo
2015-11-12 16:06:41 -07:00
2 changed files with 12 additions and 1 deletions

View File

@@ -284,6 +284,7 @@ describe "PackageManager", ->
expect(Package.prototype.requireMainModule.callCount).toBe 0
atom.packages.triggerActivationHook('language-fictitious:grammar-used')
atom.packages.triggerDeferredActivationHooks()
waitsForPromise ->
promise

View File

@@ -37,6 +37,7 @@ class PackageManager
@emitter = new Emitter
@activationHookEmitter = new Emitter
@packageDirPaths = []
@deferredActivationHooks = []
if configDirPath? and not safeMode
if @devMode
@packageDirPaths.push(path.join(configDirPath, "dev", "packages"))
@@ -409,6 +410,7 @@ class PackageManager
packages = @getLoadedPackagesForTypes(types)
promises = promises.concat(activator.activatePackages(packages))
Promise.all(promises).then =>
@triggerDeferredActivationHooks()
@emitter.emit 'did-activate-initial-packages'
# another type of package manager can handle other package types.
@@ -439,9 +441,17 @@ class PackageManager
else
Promise.reject(new Error("Failed to load package '#{name}'"))
triggerDeferredActivationHooks: ->
return unless @deferredActivationHooks?
@activationHookEmitter.emit(hook) for hook in @deferredActivationHooks
@deferredActivationHooks = null
triggerActivationHook: (hook) ->
return new Error("Cannot trigger an empty activation hook") unless hook? and _.isString(hook) and hook.length > 0
@activationHookEmitter.emit(hook)
if @deferredActivationHooks?
@deferredActivationHooks.push hook
else
@activationHookEmitter.emit(hook)
onDidTriggerActivationHook: (hook, callback) ->
return unless hook? and _.isString(hook) and hook.length > 0