Commit 41e50a69 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Invalidate all member indexes after InheritDoc processing.

After Process::InheritDoc has run we regenerate the ID-s of all
members and invalidate all member indexes.  The old code tried
to be clever and only recalculate members that had changed and
classes containing these, but it failed to do so correctly,
resulting in this hard-to-find bug.  Now I've taken a slower
approach of just recalculating everything, which should now
give us correct results.

Fixes #345
parent 0351cc52
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -171,8 +171,8 @@ module JsDuck

    # This must be called whenever member hashes are changed.
    # It updates the :id fields of members and clears the caches.
    def update_members!(members)
      members.each do |m|
    def refresh_member_ids!
      @doc[:members].each do |m|
        m[:id] = Class.member_id(m)
      end
      @members_index.invalidate!
+4 −5
Original line number Diff line number Diff line
@@ -42,15 +42,14 @@ module JsDuck
    end

    # Clears the search cache.
    # Using this is REALLY BAD - try to get rid of it.
    #
    # Using this degrades performance. It's currently triggered just
    # once after InheritDoc process is run. Avoid using it in other
    # places.
    def invalidate!
      @map_by_id = nil
      @global_map_by_id = nil
      @global_map_by_name = nil

      @cls.parent.members_index.invalidate! if @cls.parent

      @cls.mixins.each {|mix| mix.members_index.invalidate! }
    end

    protected
+4 −0
Original line number Diff line number Diff line
@@ -20,6 +20,10 @@ module JsDuck
          @inherit_class.resolve(cls)
          @inherit_members.resolve(cls)
        end

        @relations.each do |cls|
          cls.refresh_member_ids!
        end
      end

    end
+0 −2
Original line number Diff line number Diff line
@@ -126,8 +126,6 @@ module JsDuck
        members.each do |m|
          m[:tagname] = :cfg
        end
        # Ask class to update its internal caches for these members
        cls.update_members!(members)
      end

      # For auto-detected members/classes (which have @private == :inherit)
+39 −0
Original line number Diff line number Diff line
@@ -442,4 +442,43 @@ describe JsDuck::Aggregator do
    end
  end

  # Bug 345, which was caused by only some member indexes being
  # invalidated after InheritDoc process resulted in properties turned
  # into configs.
  describe "parent class with property changed to config" do
    before do
      @docs = parse(<<-EOF)
          /** */
          Ext.define('Ext.Blah', {
              /**
               * @inheritdoc Ext.View#blabla
               */
              something: true
          });

          /** */
          Ext.define('Ext.AbstractView', {
              /** @cfg */
              itemSelector: "foo"
          });

          /** */
          Ext.define('Ext.Table', {
              extend: 'Ext.AbstractView',
              itemSelector: 'bar'
          });

          /** */
          Ext.define('Ext.View', {
              extend: 'Ext.Table'
          });
      EOF
      @view = @docs["Ext.View"]
    end

    it "returns correctly just one member when calling #find_members on child" do
      @view.find_members({:name => "itemSelector"}).length.should == 1
    end
  end

end
Loading