]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Improve handling for c::this
authorFlorian Brosch <flo.brosch@gmail.com>
Wed, 20 Aug 2014 19:02:23 +0000 (21:02 +0200)
committerFlorian Brosch <flo.brosch@gmail.com>
Fri, 29 Aug 2014 13:51:59 +0000 (15:51 +0200)
src/libvaladoc/documentation/gtkdocmarkdownparser.vala
src/libvaladoc/html/htmlrenderer.vala
src/libvaladoc/taglets/tagletparam.vala

index 841949ddf29a4f3127400914547612b38505de79..9614e6c82009ad68ed10b859ee723ba8013234b9 100644 (file)
@@ -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);
                }
 
 
index d9f5a21cbffa3e3fa3dde1a9656be03efc50c4d5..294a9777730c64b18758eee37cc94482ee329ebc 100644 (file)
@@ -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"};
                                }
 
index 94c602a859cd98c453e0700fce4769b5eea64e9a..e6e5cd057a34e75f8f5203a1d16262d0b5732081 100644 (file)
@@ -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);
        }