[valadoc] Split process-comments into parse and check runs



commit 5257a46ff98a481641a7c9b86e9c4e6dd2981632
Author: Florian Brosch <flo brosch gmail com>
Date:   Sat Aug 23 04:26:59 2014 +0200

    Split process-comments into parse and check runs

 src/libvaladoc/api/enumvalue.vala                  |   15 +++++-
 src/libvaladoc/api/errorcode.vala                  |   15 +++++-
 src/libvaladoc/api/item.vala                       |    6 ++-
 src/libvaladoc/api/member.vala                     |   19 ++++++-
 src/libvaladoc/api/namespace.vala                  |   17 ++++++-
 src/libvaladoc/api/node.vala                       |   17 ++++++-
 src/libvaladoc/api/property.vala                   |   24 ++++++++--
 src/libvaladoc/api/sourcefile.vala                 |    1 +
 src/libvaladoc/api/tree.vala                       |   52 +++++++++++++++-----
 src/libvaladoc/api/typesymbol.vala                 |   15 +++++-
 src/libvaladoc/content/comment.vala                |   10 ++++
 src/libvaladoc/content/page.vala                   |   16 ++++++
 .../documentation/documentationparser.vala         |   12 +++-
 .../documentation/gtkdoccommentparser.vala         |    1 -
 .../documentation/gtkdocmarkdownparser.vala        |    2 -
 src/libvaladoc/documentation/wiki.vala             |   36 +++++++++-----
 16 files changed, 210 insertions(+), 48 deletions(-)
---
diff --git a/src/libvaladoc/api/enumvalue.vala b/src/libvaladoc/api/enumvalue.vala
index b715595..34804ff 100644
--- a/src/libvaladoc/api/enumvalue.vala
+++ b/src/libvaladoc/api/enumvalue.vala
@@ -55,7 +55,7 @@ public class Valadoc.Api.EnumValue: Symbol {
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (documentation != null) {
                        return ;
                }
@@ -64,7 +64,18 @@ public class Valadoc.Api.EnumValue: Symbol {
                        documentation = parser.parse (this, source_comment);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
+       }
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (documentation != null) {
+                       parser.check (this, documentation);
+               }
+
+               base.check_comments (settings, parser);
        }
 
        /**
diff --git a/src/libvaladoc/api/errorcode.vala b/src/libvaladoc/api/errorcode.vala
index 71d365f..d7cf551 100644
--- a/src/libvaladoc/api/errorcode.vala
+++ b/src/libvaladoc/api/errorcode.vala
@@ -45,7 +45,7 @@ public class Valadoc.Api.ErrorCode : Symbol {
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (documentation != null) {
                        return ;
                }
@@ -54,7 +54,18 @@ public class Valadoc.Api.ErrorCode : Symbol {
                        documentation = parser.parse (this, source_comment);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
+       }
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (documentation != null) {
+                       parser.check (this, documentation);
+               }
+
+               base.check_comments (settings, parser);
        }
 
        /**
diff --git a/src/libvaladoc/api/item.vala b/src/libvaladoc/api/item.vala
index 1253623..63b9947 100644
--- a/src/libvaladoc/api/item.vala
+++ b/src/libvaladoc/api/item.vala
@@ -47,9 +47,13 @@ public abstract class Valadoc.Api.Item : Object {
                this.data = data;
        }
 
-       internal virtual void process_comments (Settings settings, DocumentationParser parser) {
+       internal virtual void parse_comments (Settings settings, DocumentationParser parser) {
        }
 
+       internal virtual void check_comments (Settings settings, DocumentationParser parser) {
+       }
+
+
        /**
         * The signature of this item.
         */
diff --git a/src/libvaladoc/api/member.vala b/src/libvaladoc/api/member.vala
index 02754c7..b8271c3 100644
--- a/src/libvaladoc/api/member.vala
+++ b/src/libvaladoc/api/member.vala
@@ -34,7 +34,11 @@ public abstract class Valadoc.Api.Member : Symbol {
                this.source_comment = comment;
        }
 
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (documentation != null) {
                        return ;
                }
@@ -43,6 +47,17 @@ public abstract class Valadoc.Api.Member : Symbol {
                        documentation = parser.parse (this, source_comment);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
+       }
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (documentation != null) {
+                       parser.check (this, documentation);
+               }
+
+               base.check_comments (settings, parser);
        }
 }
diff --git a/src/libvaladoc/api/namespace.vala b/src/libvaladoc/api/namespace.vala
index 9bcb233..ff19db8 100644
--- a/src/libvaladoc/api/namespace.vala
+++ b/src/libvaladoc/api/namespace.vala
@@ -36,10 +36,11 @@ public class Valadoc.Api.Namespace : Symbol {
                this.source_comment = comment;
        }
 
+
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (documentation != null) {
                        return ;
                }
@@ -48,9 +49,21 @@ public class Valadoc.Api.Namespace : Symbol {
                        documentation = parser.parse (this, source_comment);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
+       }
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (documentation != null) {
+                       parser.check (this, documentation);
+               }
+
+               base.check_comments (settings, parser);
        }
 
+
        /**
         * { inheritDoc}
         */
diff --git a/src/libvaladoc/api/node.vala b/src/libvaladoc/api/node.vala
index 9b2cee7..2cbfe7c 100644
--- a/src/libvaladoc/api/node.vala
+++ b/src/libvaladoc/api/node.vala
@@ -116,17 +116,30 @@ public abstract class Valadoc.Api.Node : Item, Browsable, Documentation, Compara
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                do_document = true;
 
                foreach (Node node in per_name_children.values) {
                        if (node.is_browsable (settings)) {
-                               node.process_comments (settings, parser);
+                               node.parse_comments (settings, parser);
                        }
                }
        }
 
        /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+
+               foreach (Node node in per_name_children.values) {
+                       if (node.is_browsable (settings)) {
+                               node.check_comments (settings, parser);
+                       }
+               }
+       }
+
+
+       /**
         * Specifies whether this node has at least one visible child with the given type
         *
         * @param type a node type
diff --git a/src/libvaladoc/api/property.vala b/src/libvaladoc/api/property.vala
index 895ddcd..556c7c9 100644
--- a/src/libvaladoc/api/property.vala
+++ b/src/libvaladoc/api/property.vala
@@ -125,21 +125,37 @@ public class Valadoc.Api.Property : Member {
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (getter != null && getter.is_browsable (settings)) {
-                       getter.process_comments (settings, parser);
+                       getter.parse_comments (settings, parser);
                }
 
                if (setter != null && setter.is_browsable (settings)) {
-                       setter.process_comments (settings, parser);
+                       setter.parse_comments (settings, parser);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
        }
 
        /**
         * { inheritDoc}
         */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (getter != null && getter.is_browsable (settings)) {
+                       getter.check_comments (settings, parser);
+               }
+
+               if (setter != null && setter.is_browsable (settings)) {
+                       setter.check_comments (settings, parser);
+               }
+
+               base.check_comments (settings, parser);
+       }
+
+
+       /**
+        * { inheritDoc}
+        */
        protected override Inline build_signature () {
                var signature = new SignatureBuilder ();
 
diff --git a/src/libvaladoc/api/sourcefile.vala b/src/libvaladoc/api/sourcefile.vala
index 8cb1d96..46d1801 100644
--- a/src/libvaladoc/api/sourcefile.vala
+++ b/src/libvaladoc/api/sourcefile.vala
@@ -24,6 +24,7 @@
  * Represents a source file
  */
 public class Valadoc.Api.SourceFile : Object {
+
        public Package package {
                private set;
                get;
diff --git a/src/libvaladoc/api/tree.vala b/src/libvaladoc/api/tree.vala
index 493a4b4..e217701 100644
--- a/src/libvaladoc/api/tree.vala
+++ b/src/libvaladoc/api/tree.vala
@@ -36,6 +36,7 @@ public class Valadoc.Api.Tree {
        private Settings settings;
        private ErrorReporter reporter;
        private CTypeResolver _cresolver = null;
+       private Package _source_package;
 
        public void add_package(Package package) {
                this.packages.add (package);
@@ -233,36 +234,63 @@ public class Valadoc.Api.Tree {
        }
 
        private Package? get_source_package () {
-               foreach (Package pkg in packages) {
-                       if (!pkg.is_package) {
-                               return pkg;
+               if (_source_package == null) {
+                       foreach (Package pkg in packages) {
+                               if (!pkg.is_package) {
+                                       _source_package = pkg;
+                                       break;
+                               }
                        }
                }
 
-               return null;
+               return _source_package;
+       }
+
+       public void process_comments (DocumentationParser docparser) {
+               parse_comments (docparser);
+               check_comments (docparser);
        }
 
-       private void process_wiki (DocumentationParser docparser) {
-               this.wikitree = new WikiPageTree(reporter, settings);
+       private void parse_wiki (DocumentationParser docparser) {
+               this.wikitree = new WikiPageTree ();
                var pkg = get_source_package ();
                if (pkg != null) {
-                       wikitree.create_tree (docparser, pkg, reporter);
+                       wikitree.parse (settings, docparser, pkg, reporter);
                }
        }
 
-       public void process_comments (DocumentationParser docparser) {
-               process_wiki (docparser);
+       private void check_wiki (DocumentationParser docparser) {
+               var pkg = get_source_package ();
+               if (pkg != null) {
+                       wikitree.check (settings, docparser, pkg);
+               }
+       }
+
+       private void parse_comments (DocumentationParser docparser) {
+               parse_wiki (docparser);
 
                foreach (Package pkg in this.packages) {
                        if (pkg.is_browsable (settings)) {
-                               pkg.process_comments (settings, docparser);
+                               pkg.parse_comments (settings, docparser);
                        }
                }
+       }
+
+       private void check_comments (DocumentationParser docparser) {
+               check_wiki (docparser);
+
+               foreach (Package pkg in this.packages) {
+                       if (pkg.is_browsable (settings)) {
+                               pkg.check_comments (settings, docparser);
+                       }
+               }
+
 
-               // parse inherited non-public comments
+               // Parse & check inherited non-public comments:
                while (!this.unbrowsable_documentation_dependencies.is_empty) {
                        var node = this.unbrowsable_documentation_dependencies.poll_head ();
-                       node.process_comments (settings, docparser);
+                       node.parse_comments (settings, docparser);
+                       node.check_comments (settings, docparser);
                }
        }
 
diff --git a/src/libvaladoc/api/typesymbol.vala b/src/libvaladoc/api/typesymbol.vala
index d6331ed..3574688 100644
--- a/src/libvaladoc/api/typesymbol.vala
+++ b/src/libvaladoc/api/typesymbol.vala
@@ -89,7 +89,7 @@ public abstract class Valadoc.Api.TypeSymbol : Symbol {
        /**
         * { inheritDoc}
         */
-       internal override void process_comments (Settings settings, DocumentationParser parser) {
+       internal override void parse_comments (Settings settings, DocumentationParser parser) {
                if (documentation != null) {
                        return ;
                }
@@ -98,6 +98,17 @@ public abstract class Valadoc.Api.TypeSymbol : Symbol {
                        documentation = parser.parse (this, source_comment);
                }
 
-               base.process_comments (settings, parser);
+               base.parse_comments (settings, parser);
+       }
+
+       /**
+        * { inheritDoc}
+        */
+       internal override void check_comments (Settings settings, DocumentationParser parser) {
+               if (documentation != null) {
+                       parser.check (this, documentation);
+               }
+
+               base.check_comments (settings, parser);
        }
 }
diff --git a/src/libvaladoc/content/comment.vala b/src/libvaladoc/content/comment.vala
index 71b80b9..f1f1d41 100644
--- a/src/libvaladoc/content/comment.vala
+++ b/src/libvaladoc/content/comment.vala
@@ -31,6 +31,9 @@ public class Valadoc.Content.Comment : BlockContent {
        public Gee.List<Taglet> taglets { get { return _taglets; } }
        private Gee.List<Taglet> _taglets;
 
+       private bool checked = false;
+
+
        internal Comment () {
                base ();
                _taglets = new ArrayList<Taglet> ();
@@ -46,6 +49,13 @@ public class Valadoc.Content.Comment : BlockContent {
        public override void check (Api.Tree api_root, Api.Node container, string file_path,
                                                                ErrorReporter reporter, Settings settings)
        {
+               if (checked == true) {
+                       return ;
+               }
+
+               checked = true;
+
+
                base.check (api_root, container, file_path, reporter, settings);
 
                foreach (Taglet element in _taglets) {
diff --git a/src/libvaladoc/content/page.vala b/src/libvaladoc/content/page.vala
index 662ee89..f180be8 100644
--- a/src/libvaladoc/content/page.vala
+++ b/src/libvaladoc/content/page.vala
@@ -24,6 +24,9 @@ using Gee;
 
 
 public class Valadoc.Content.Page : BlockContent {
+       private bool checked = false;
+
+
        internal Page () {
                base ();
        }
@@ -32,6 +35,19 @@ public class Valadoc.Content.Page : BlockContent {
                visitor.visit_page (this);
        }
 
+       public override void check (Api.Tree api_root, Api.Node container, string file_path,
+                                                               ErrorReporter reporter, Settings settings)
+       {
+               if (checked == true) {
+                       return ;
+               }
+
+               checked = true;
+
+
+               base.check (api_root, container, file_path, reporter, settings);
+       }
+
        public override ContentElement copy (ContentElement? new_parent = null) {
                assert (new_parent == null);
 
diff --git a/src/libvaladoc/documentation/documentationparser.vala 
b/src/libvaladoc/documentation/documentationparser.vala
index a4a1201..d94af81 100644
--- a/src/libvaladoc/documentation/documentationparser.vala
+++ b/src/libvaladoc/documentation/documentationparser.vala
@@ -93,14 +93,13 @@ public class Valadoc.DocumentationParser : Object, ResourceLocator {
        {
                try {
                        Comment doc_comment = parse_comment (content, filename, first_line, first_column);
-                       doc_comment.check (_tree, element, filename, _reporter, _settings);
                        return doc_comment;
                } catch (ParserError error) {
                        return null;
                }
        }
 
-       public Page? parse_wikipage (WikiPage page, Api.Package pkg) {
+       public Page? parse_wikipage (Api.Package pkg, WikiPage page) {
                if (page.documentation != null) {
                        return page.documentation;
                }
@@ -111,7 +110,6 @@ public class Valadoc.DocumentationParser : Object, ResourceLocator {
 
                try {
                        Page documentation = parse_wiki (page.documentation_str, page.get_filename ());
-                       documentation.check (_tree, pkg, page.path, _reporter, _settings);
                        return documentation;
                } catch (ParserError error) {
                        return null;
@@ -136,6 +134,14 @@ public class Valadoc.DocumentationParser : Object, ResourceLocator {
                return (Page) pop ();
        }
 
+       public void check (Api.Node element, Comment comment) {
+               comment.check (_tree, element, element.get_source_file ().get_name (), _reporter, _settings);
+       }
+
+       public void check_wikipage (Api.Package package, Page page) {
+               page.check (_tree, package, package.get_source_file ().get_name (), _reporter, _settings);
+       }
+
        private GirMetaData get_metadata_for_comment (Api.GirSourceComment gir_comment) {
                GirMetaData metadata = metadata.get (gir_comment.file);
                if (metadata != null) {
diff --git a/src/libvaladoc/documentation/gtkdoccommentparser.vala 
b/src/libvaladoc/documentation/gtkdoccommentparser.vala
index 417590b..a9553c8 100644
--- a/src/libvaladoc/documentation/gtkdoccommentparser.vala
+++ b/src/libvaladoc/documentation/gtkdoccommentparser.vala
@@ -165,7 +165,6 @@ public class Valadoc.Gtkdoc.Parser : Object, ResourceLocator {
                        first = false;
                }
 
-               comment.check (tree, element, gir_comment.file.relative_path, reporter, settings);
                return comment;
        }
 
diff --git a/src/libvaladoc/documentation/gtkdocmarkdownparser.vala 
b/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
index 341dff0..721572d 100644
--- a/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
+++ b/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
@@ -671,8 +671,6 @@ public class Valadoc.Gtkdoc.MarkdownParser : Object, ResourceLocator {
                }
 
 
-               cmnt.check (_tree, element, gir_comment.file.relative_path, _reporter, _settings);
-
                this.metadata = null;
                this.gir_comment = null;
                this.element = element;
diff --git a/src/libvaladoc/documentation/wiki.vala b/src/libvaladoc/documentation/wiki.vala
index 614d918..56227a4 100644
--- a/src/libvaladoc/documentation/wiki.vala
+++ b/src/libvaladoc/documentation/wiki.vala
@@ -22,6 +22,7 @@
 
 using Gee;
 
+
 public class Valadoc.WikiPage : Object, Documentation {
        public Content.Page documentation {
                protected set;
@@ -75,22 +76,21 @@ public class Valadoc.WikiPage : Object, Documentation {
                }
        }
 
-       public bool parse (DocumentationParser docparser, Api.Package pkg) {
-               documentation = docparser.parse_wikipage (this, pkg);
-               return true;
+       public void parse (DocumentationParser docparser, Api.Package pkg) {
+               documentation = docparser.parse_wikipage (pkg, this);
+       }
+
+       public void check (DocumentationParser docparser, Api.Package pkg) {
+               docparser.check_wikipage (pkg, documentation);
        }
 }
 
 
 public class Valadoc.WikiPageTree : Object {
        private ArrayList<WikiPage> wikipages;
-       private ErrorReporter reporter;
-       private Settings settings;
 
-       //TODO: reporter, settings -> create_tree
-       public WikiPageTree (ErrorReporter reporter, Settings settings) {
-               this.reporter = reporter;
-               this.settings = settings;
+
+       public WikiPageTree () {
        }
 
        public Collection<WikiPage> get_pages () {
@@ -111,7 +111,7 @@ public class Valadoc.WikiPageTree : Object {
        }
 
        private void create_tree_from_path (DocumentationParser docparser, Api.Package package,
-                                                                               ErrorReporter reporer, string 
path, string? nameoffset = null)
+                                                                               ErrorReporter reporter, 
string path, string? nameoffset = null)
        {
                try {
                        Dir dir = Dir.open (path);
@@ -135,10 +135,10 @@ public class Valadoc.WikiPageTree : Object {
                }
        }
 
-       public void create_tree (DocumentationParser docparser, Api.Package package, ErrorReporter reporer) {
-               weak string path = this.settings.wiki_directory;
+       public void parse (Settings settings, DocumentationParser docparser, Api.Package package, 
ErrorReporter reporter) {
+               weak string path = settings.wiki_directory;
                if (path == null) {
-                       return;
+                       return ;
                }
 
                this.wikipages = new ArrayList<WikiPage> ();
@@ -148,6 +148,16 @@ public class Valadoc.WikiPageTree : Object {
                        page.parse (docparser, package);
                }
        }
+
+       public void check (Settings settings, DocumentationParser docparser, Api.Package pkg) {
+               if (this.wikipages == null) {
+                       return ;
+               }
+
+               foreach (WikiPage page in this.wikipages) {
+                       page.check (docparser, pkg);
+               }
+       }
 }
 
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]