docgen: autodocument inherited methods/properties
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 26 Jan 2017 16:40:16 +0000 (17:40 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 26 Jan 2017 16:52:00 +0000 (17:52 +0100)
src/scripts/elua/apps/gendoc.lua

index a1e5ac1..19ee122 100644 (file)
@@ -985,7 +985,20 @@ find_parent_impl = function(fulln, cl)
             return pimpl, pcl
         end
     end
-    -- unreachable with a validated database
+    return nil, cl
+end
+
+local find_parent_doc
+find_parent_doc = function(fulln, cl, ftype)
+    local pimpl, pcl = find_parent_impl(fulln, cl)
+    if not pimpl then
+        return dtree.Doc()
+    end
+    local pdoc = pimpl:doc_get(ftype)
+    if not pdoc:exists() then
+        return find_parent_doc(fulln, pcl, ftype)
+    end
+    return pdoc
 end
 
 build_method = function(impl, cl)
@@ -997,30 +1010,28 @@ build_method = function(impl, cl)
 
     local doc = impl:doc_get(fn.METHOD)
     if over and not doc:exists() then
-        local pimpl, pcl = find_parent_impl(impl:full_name_get(), cl)
-        f:write_inherited(fn:nspaces_get(pcl))
-        f:write_nl()
-    else
-        f:write_h("Signature", 2)
-        f:write_code(gen_method_sig(fn, cl))
-        f:write_nl()
+        doc = find_parent_doc(impl:full_name_get(), cl, fn.METHOD)
+    end
 
-        f:write_h("C signature", 2)
-        f:write_code(gen_func_csig(fn, mns), "c")
-        f:write_nl()
+    f:write_h("Signature", 2)
+    f:write_code(gen_method_sig(fn, cl))
+    f:write_nl()
 
-        local pars = fn:parameters_get()
-        if #pars > 0 then
-            f:write_h("Parameters", 2)
-            build_parlist(f, pars)
-            f:write_nl()
-        end
+    f:write_h("C signature", 2)
+    f:write_code(gen_func_csig(fn, mns), "c")
+    f:write_nl()
 
-        f:write_h("Description", 2)
-        f:write_raw(impl:doc_get(fn.METHOD):full_get(nil, true))
+    local pars = fn:parameters_get()
+    if #pars > 0 then
+        f:write_h("Parameters", 2)
+        build_parlist(f, pars)
         f:write_nl()
     end
 
+    f:write_h("Description", 2)
+    f:write_raw(doc:full_get(nil, true))
+    f:write_nl()
+
     f:write_editable(mns, "description")
     f:write_nl()
 
@@ -1028,13 +1039,13 @@ build_method = function(impl, cl)
 end
 
 build_property = function(impl, cl)
+    local over = impl:is_overridden(cl)
     local fn = impl:function_get()
     local pns = fn:nspaces_get(cl)
     local f = writer.Writer(pns, cl:full_name_get() .. "." .. fn:name_get())
 
-    local ft = fn:type_get()
-    local isget = (ft == fn.PROP_GET or ft == fn.PROPERTY)
-    local isset = (ft == fn.PROP_SET or ft == fn.PROPERTY)
+    local isget = impl:is_prop_get()
+    local isset = impl:is_prop_set()
 
     if isget then stats.check_property(fn, cl, fn.PROP_GET) end
     if isset then stats.check_property(fn, cl, fn.PROP_SET) end
@@ -1045,6 +1056,18 @@ build_property = function(impl, cl)
     local gdoc = pimp:doc_get(fn.PROP_GET)
     local sdoc = pimp:doc_get(fn.PROP_SET)
 
+    if over then
+        if not doc:exists() then
+            doc = find_parent_doc(impl:full_name_get(), cl, fn.PROPERTY)
+        end
+        if isget and not gdoc:exists() then
+            gdoc = find_parent_doc(impl:full_name_get(), cl, fn.PROP_GET)
+        end
+        if isset and not sdoc:exists() then
+            sdoc = find_parent_doc(impl:full_name_get(), cl, fn.PROP_SET)
+        end
+    end
+
     f:write_h("Signature", 2)
     f:write_code(gen_prop_sig(fn, cl))
     f:write_nl()