From f10e55b4d5151a7cb5a3185849f5a4a2e5fe3579 Mon Sep 17 00:00:00 2001 From: probablycorey Date: Wed, 5 Feb 2014 14:46:49 -0800 Subject: [PATCH] Remove deferred package deserializers --- docs/advanced/serialization.md | 24 ------------------ spec/atom-spec.coffee | 25 ++++++------------- .../package.cson | 1 - src/atom-package.coffee | 12 +-------- src/deserializer-manager.coffee | 9 ------- 5 files changed, 8 insertions(+), 63 deletions(-) diff --git a/docs/advanced/serialization.md b/docs/advanced/serialization.md index ce1d7a78e..282d9e358 100644 --- a/docs/advanced/serialization.md +++ b/docs/advanced/serialization.md @@ -71,27 +71,3 @@ will only attempt to call deserialize if the two versions match, and otherwise return undefined. We plan on implementing a migration system in the future, but this at least protects you from improperly deserializing old state. If you find yourself in dire need of the migration system, let us know. - -### Deferred Package Deserializers - -If your package defers loading on startup with an `activationEvents` property in -its `package.cson`, your deserializers won't be loaded until your package is -activated. If you want to deserialize an object from your package on startup, -this could be a problem. - -The solution is to also supply a `deferredDeserializers` array in your -`package.cson` with the names of all your deserializers. When Atom attempts to -deserialize some state whose `deserializer` matches one of these names, it will -load your package first so it can register any necessary deserializers before -proceeding. - -For example, the markdown preview package doesn't fully load until a preview is -triggered. But if you refresh a window with a preview pane, it loads the -markdown package early so Atom can deserialize the view correctly. - -```coffee-script -# markdown-preview/package.cson -'activationEvents': 'markdown-preview:toggle': '.editor' -'deferredDeserializers': ['MarkdownPreviewView'] -... -``` diff --git a/spec/atom-spec.coffee b/spec/atom-spec.coffee index 24b646b95..6a3becd99 100644 --- a/spec/atom-spec.coffee +++ b/spec/atom-spec.coffee @@ -9,25 +9,14 @@ describe "the `atom` global", -> describe "package lifecycle methods", -> describe ".loadPackage(name)", -> - describe "when the package has deferred deserializers", -> - it "requires the package's main module if one of its deferred deserializers is referenced", -> - pack = atom.packages.loadPackage('package-with-activation-events') - spyOn(pack, 'activateStylesheets').andCallThrough() - expect(pack.mainModule).toBeNull() - object = atom.deserializers.deserialize({deserializer: 'Foo', data: 5}) - expect(pack.mainModule).toBeDefined() - expect(object.constructor.name).toBe 'Foo' - expect(object.data).toBe 5 - expect(pack.activateStylesheets).toHaveBeenCalled() + it "continues if the package has an invalid package.json", -> + spyOn(console, 'warn') + atom.config.set("core.disabledPackages", []) + expect(-> atom.packages.loadPackage("package-with-broken-package-json")).not.toThrow() - it "continues if the package has an invalid package.json", -> - spyOn(console, 'warn') - atom.config.set("core.disabledPackages", []) - expect(-> atom.packages.loadPackage("package-with-broken-package-json")).not.toThrow() - - it "continues if the package has an invalid keymap", -> - atom.config.set("core.disabledPackages", []) - expect(-> atom.packages.loadPackage("package-with-broken-keymap")).not.toThrow() + it "continues if the package has an invalid keymap", -> + atom.config.set("core.disabledPackages", []) + expect(-> atom.packages.loadPackage("package-with-broken-keymap")).not.toThrow() describe ".unloadPackage(name)", -> describe "when the package is active", -> diff --git a/spec/fixtures/packages/package-with-activation-events/package.cson b/spec/fixtures/packages/package-with-activation-events/package.cson index 45d8dfea1..dfa55c54d 100644 --- a/spec/fixtures/packages/package-with-activation-events/package.cson +++ b/spec/fixtures/packages/package-with-activation-events/package.cson @@ -1,2 +1 @@ 'activationEvents': ['activation-event'] -'deferredDeserializers': ['Foo'] diff --git a/src/atom-package.coffee b/src/atom-package.coffee index 6546945bb..955274d05 100644 --- a/src/atom-package.coffee +++ b/src/atom-package.coffee @@ -42,11 +42,7 @@ class AtomPackage extends Package @loadStylesheets() @loadGrammars() @loadScopedProperties() - - if @metadata.activationEvents? - @registerDeferredDeserializers() - else - @requireMainModule() + @requireMainModule() unless @metadata.activationEvents? catch e console.warn "Failed to load package named '#{@name}'", e.stack ? e @@ -203,12 +199,6 @@ class AtomPackage extends Package path.join(@path, 'index') @mainModulePath = fs.resolveExtension(mainModulePath, ["", _.keys(require.extensions)...]) - registerDeferredDeserializers: -> - for deserializerName in @metadata.deferredDeserializers ? [] - atom.deserializers.addDeferred deserializerName, => - @activateStylesheets() - @requireMainModule() - subscribeToActivationEvents: -> return unless @metadata.activationEvents? if _.isArray(@metadata.activationEvents) diff --git a/src/deserializer-manager.coffee b/src/deserializer-manager.coffee index 60df24b0a..2266845d6 100644 --- a/src/deserializer-manager.coffee +++ b/src/deserializer-manager.coffee @@ -5,16 +5,11 @@ module.exports = class DeserializerManager constructor: (@environment) -> @deserializers = {} - @deferredDeserializers = {} # Public: Register the given class(es) as deserializers. add: (klasses...) -> @deserializers[klass.name] = klass for klass in klasses - # Public: Add a deferred deserializer for the given class name. - addDeferred: (name, fn) -> - @deferredDeserializers[name] = fn - # Public: Remove the given class(es) as deserializers. remove: (klasses...) -> delete @deserializers[klass.name] for klass in klasses @@ -35,8 +30,4 @@ class DeserializerManager return unless state? name = state.get?('deserializer') ? state.deserializer - if @deferredDeserializers[name] - @deferredDeserializers[name]() - delete @deferredDeserializers[name] - @deserializers[name]