Commit 62218604 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Propagate class visibility to enum properties.

When expanding widget.* enums, set enum properties as private
when the class defining the alias is private.
parent b2723212
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ module JsDuck
    def process(cls)
      cls[:enum][:type] = infer_type(cls) unless cls[:enum][:type]
      expand_default(cls)
      unsure_public(cls)
      strip_inheritdoc(cls)
    end

    # Given an enum class, returns the type infered from its values.
@@ -36,14 +36,15 @@ module JsDuck
    # Expands default value like widget.* into list of properties
    def expand_default(cls)
      if cls[:enum][:default] =~ /\A(.*)\.\*\Z/
        gather_aliases($1).each do |name|
        each_alias($1) do |name, owner|
          cls[:members][:property] << {
            :tagname => :property,
            :id => 'property-' + name,
            :name => name,
            :default => "'" + name + "'",
            :type => "String",
            :meta => {},
            :meta => {:private => owner[:private]},
            :private => owner[:private],
            :files => cls[:files],
            :owner => cls[:name],
            :doc => "",
@@ -52,19 +53,17 @@ module JsDuck
      end
    end

    def gather_aliases(prefix)
      result = []
    def each_alias(prefix)
      @classes.each_value do |cls|
        if cls[:aliases] && cls[:aliases][prefix]
          result += cls[:aliases][prefix]
          cls[:aliases][prefix].each {|name| yield(name, cls) }
        end
      end
      result
    end

    # Ensures that enum values are all public.
    # For this we remove the auto-inserted inheritdoc tag.
    def unsure_public(cls)
    # Remove the auto-inserted inheritdoc tag so the auto-detected enum
    # values default to being public.
    def strip_inheritdoc(cls)
      cls[:members][:property].each do |p|
        p[:inheritdoc] = nil if p[:autodetected]
      end
+6 −1
Original line number Diff line number Diff line
@@ -180,7 +180,7 @@ describe JsDuck::Aggregator do
        /** @enum [xtype=widget.*] */
        /** @class Form @alias widget.form */
        /** @class Button @alias widget.button */
        /** @class TextArea @alias widget.textarea */
        /** @class TextArea @alias widget.textarea @private */
      EOS
    end

@@ -199,6 +199,11 @@ describe JsDuck::Aggregator do
    it "sets property type to String" do
      props[0][:type].should == "String"
    end

    it "sets enum value from private class as private" do
      props.find_all {|p| p[:private] }.map {|p| p[:name] }.should == ["textarea"]
    end

  end

end