Commit 9f0f149d authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Move overrides processing out of Aggregator.

In BatchParser use the Aggregator#classes to retrieve the result
instad of the old #result method.  The latter is now used only in
testsuite.
parent 7b3111df
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
require 'jsduck/class'
require 'jsduck/logger'
require 'jsduck/override'

module JsDuck

@@ -200,17 +199,7 @@ module JsDuck
      end
    end

    # Processes all overrides.
    # Returns list of override classes.
    def process_overrides
      Override.new(@classes).process_all!.map do |cls|
        # discard each override class
        @classes.delete(cls[:name])
        @documentation.delete(cls)
        cls
      end
    end

    # Now used only in tests.
    def result
      @documentation + @orphans
    end
+9 −5
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ require 'jsduck/aggregator'
require 'jsduck/enum'
require 'jsduck/accessors'
require 'jsduck/ext4_events'
require 'jsduck/override'
require 'jsduck/class'
require 'jsduck/relations'
require 'jsduck/logger'
@@ -61,12 +62,15 @@ module JsDuck
      agr.classify_orphans
      agr.create_global_class
      agr.remove_ignored_classes
      Accessors.new(agr.classes).create_all!
      Ext4Events.new(agr.classes, @opts).process_all!
      Enum.new(agr.classes).process_all!
      classes = agr.classes

      Accessors.new(classes).create_all!
      Ext4Events.new(classes, @opts).process_all!
      Enum.new(classes).process_all!
      # Ignore override classes after applying them to actual classes
      @opts.external_classes += agr.process_overrides.map {|o| o[:name] }
      agr.result
      @opts.external_classes += Override.new(classes).process_all!

      classes.values
    end

    # Turns all aggregated data into Class objects.
+11 −3
Original line number Diff line number Diff line
require 'jsduck/logger'

module JsDuck

  class Override
@@ -5,8 +7,9 @@ module JsDuck
      @classes_hash = classes_hash
    end

    # Applies all override classes to target classes
    # Returns all the processed override classes.
    # Applies all override classes to target classes, then deletes the
    # overrides themselves from classes hash.  Returns names of all
    # the processed override classes.
    def process_all!
      overrides = []

@@ -17,7 +20,12 @@ module JsDuck
        end
      end

      overrides
      # discard each override class
      overrides.each do |cls|
        @classes_hash.delete(cls[:name])
      end

      overrides.map {|c| c[:name] }
    end

    private
+4 −2
Original line number Diff line number Diff line
@@ -2,13 +2,15 @@ require "jsduck/aggregator"
require "jsduck/source/file"
require "jsduck/class"
require "jsduck/relations"
require "jsduck/override"

describe JsDuck::Aggregator do
  def parse(string)
    agr = JsDuck::Aggregator.new
    agr.aggregate(JsDuck::Source::File.new(string, "blah.js"))
    agr.process_overrides
    JsDuck::Relations.new(agr.result.map {|cls| JsDuck::Class.new(cls) })
    classes = agr.classes
    JsDuck::Override.new(classes).process_all!
    JsDuck::Relations.new(classes.values.map {|cls| JsDuck::Class.new(cls) })
  end

  shared_examples_for "override" do