[valadoc] Improve handling for c::this



commit a03ba9564082f08908fba57932b6923ece2ee169
Author: Florian Brosch <flo brosch gmail com>
Date:   Wed Aug 20 21:02:23 2014 +0200

    Improve handling for c::this

 .../documentation/gtkdocmarkdownparser.vala        |   12 ++-------
 src/libvaladoc/html/htmlrenderer.vala              |    2 +-
 src/libvaladoc/taglets/tagletparam.vala            |   23 ++++++++++++++++---
 3 files changed, 23 insertions(+), 14 deletions(-)
---
diff --git a/src/libvaladoc/documentation/gtkdocmarkdownparser.vala 
b/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
index 841949d..9614e6c 100644
--- a/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
+++ b/src/libvaladoc/documentation/gtkdocmarkdownparser.vala
@@ -598,11 +598,6 @@ public class Valadoc.Gtkdoc.MarkdownParser : Object, ResourceLocator {
                this.gir_comment = gir_comment;
                this.element = element;
 
-               bool has_instance = false;
-               if (element is Api.Method) {
-                       has_instance = !((Api.Method) element).is_static;
-               }
-
 
                // main:
                Comment? cmnt = _parse (gir_comment);
@@ -645,10 +640,9 @@ public class Valadoc.Gtkdoc.MarkdownParser : Object, ResourceLocator {
                        Taglets.Param? taglet = _parse_block_taglet (iter.get_value (), "param") as 
Taglets.Param;
                        string param_name = iter.get_key ();
 
-                       if (taglet != null && !(has_instance && param_name == 
gir_comment.instance_param_name)) {
-                               taglet.parameter_name = param_name;
-                               add_taglet (ref cmnt, taglet);
-                       }
+                       taglet.is_c_self_param = (param_name == gir_comment.instance_param_name);
+                       taglet.parameter_name = param_name;
+                       add_taglet (ref cmnt, taglet);
                }
 
 
diff --git a/src/libvaladoc/html/htmlrenderer.vala b/src/libvaladoc/html/htmlrenderer.vala
index d9f5a21..294a977 100644
--- a/src/libvaladoc/html/htmlrenderer.vala
+++ b/src/libvaladoc/html/htmlrenderer.vala
@@ -175,7 +175,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
                        (taglet) => {
                                var param = taglet as Taglets.Param;
                                string[]? unknown_parameter_css = null;
-                               if (param.parameter == null) {
+                               if (param.parameter == null && !param.is_this) {
                                        unknown_parameter_css = {"class", 
"main_parameter_table_unknown_parameter"};
                                }
 
diff --git a/src/libvaladoc/taglets/tagletparam.vala b/src/libvaladoc/taglets/tagletparam.vala
index 94c602a..e6e5cd0 100644
--- a/src/libvaladoc/taglets/tagletparam.vala
+++ b/src/libvaladoc/taglets/tagletparam.vala
@@ -34,6 +34,9 @@ public class Valadoc.Taglets.Param : BlockContent, Taglet, Block {
 
        public bool is_c_self_param { internal set; get; }
 
+       public bool is_this { private set; get; }
+
+
        public Rule? get_parser_rule (Rule run_rule) {
                return Rule.seq ({
                        Rule.option ({ Rule.many ({ TokenType.SPACE }) }),
@@ -47,6 +50,7 @@ public class Valadoc.Taglets.Param : BlockContent, Taglet, Block {
        {
                // Check for the existence of such a parameter
                unowned string? implicit_return_array_length = null;
+               bool has_instance = has_instance (container);
                bool is_implicit = false;
                this.parameter = null;
 
@@ -59,13 +63,16 @@ public class Valadoc.Taglets.Param : BlockContent, Taglet, Block {
                        return ;
                }
 
-
-               if (parameter_name == "...") {
+               if (is_c_self_param == true && has_instance) {
+                       this.parameter_name = "this";
+                       this.is_this = true;
+                       this.position = 0;
+               } else if (parameter_name == "...") {
                        Gee.List<Api.Node> params = container.get_children_by_type 
(Api.NodeType.FORMAL_PARAMETER, false);
                        foreach (Api.Node param in params) {
                                if (((Api.FormalParameter) param).ellipsis) {
                                        this.parameter = (Api.Symbol) param;
-                                       this.position = params.size - 1;
+                                       this.position = (has_instance)? params.size : params.size - 1;
                                        break;
                                }
                        }
@@ -73,7 +80,7 @@ public class Valadoc.Taglets.Param : BlockContent, Taglet, Block {
                        Gee.List<Api.Node> params = container.get_children_by_types 
({Api.NodeType.FORMAL_PARAMETER,
                                                                                                              
                                    Api.NodeType.TYPE_PARAMETER},
                                                                                                              
                                   false);
-                       int pos = 0;
+                       int pos = (has_instance)? 1 : 0;
 
                        foreach (Api.Node param in params) {
                                if (param.name == parameter_name) {
@@ -116,6 +123,14 @@ public class Valadoc.Taglets.Param : BlockContent, Taglet, Block {
                base.check (api_root, container, file_path, reporter, settings);
        }
 
+       private bool has_instance (Api.Item element) {
+               if (element is Api.Method) {
+                       return !((Api.Method) element).is_static;
+               }
+
+               return false;
+       }
+
        public override void accept (ContentVisitor visitor) {
                visitor.visit_taglet (this);
        }


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