Activate atom.directory-provider services before deserialization

Signed-off-by: Nathan Sobo <nathan@github.com>
This commit is contained in:
Max Brunsfeld
2016-09-14 13:26:03 -07:00
committed by Nathan Sobo
parent 7929e261a0
commit 3aaa738944
4 changed files with 37 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
exports.provideDirectoryProvider = function () {
return 'directory provider from package-with-directory-provider'
}

View File

@@ -0,0 +1,12 @@
{
"name": "package-with-directory-provider",
"providedServices": {
"atom.directory-provider": {
"description": "Provides custom Directory instances",
"versions": {
"0.1.1": "provideDirectoryProvider"
}
}
}
}

View File

@@ -120,6 +120,16 @@ describe "PackageManager", ->
state: state2
}
it "early-activates any atom.directory-provider or atom.repository-provider services that the package provide", ->
jasmine.useRealClock()
providers = []
atom.packages.serviceHub.consume 'atom.directory-provider', '^0.1.0', (provider) ->
providers.push(provider)
atom.packages.loadPackage('package-with-directory-provider')
expect(providers).toEqual(['directory provider from package-with-directory-provider'])
describe "when there are view providers specified in the package's package.json", ->
model1 = {worksWithViewProvider1: true}
model2 = {worksWithViewProvider2: true}

View File

@@ -85,6 +85,7 @@ class Package
@loadMenus()
@loadStylesheets()
@registerDeserializerMethods()
@activateCoreStartupServices()
@configSchemaRegisteredOnLoad = @registerConfigSchemaFromMetadata()
@settingsPromise = @loadSettings()
if @shouldRequireMainModuleOnLoad() and not @mainModule?
@@ -290,6 +291,17 @@ class Package
@mainModule[methodName](state, atomEnvironment)
return
activateCoreStartupServices: ->
if directoryProviderService = @metadata.providedServices?['atom.directory-provider']
@requireMainModule()
servicesByVersion = {}
for version, methodName of directoryProviderService.versions
if typeof @mainModule[methodName] is 'function'
servicesByVersion[version] = @mainModule[methodName]()
disposable = @packageManager.serviceHub.provide('atom.directory-provider', servicesByVersion)
@activationDisposables.add(disposable)
registerViewProviders: ->
if @metadata.viewProviders? and not @registeredViewProviders
@requireMainModule()