]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Warn when signals don't match emitter methods
authorLuca Bruno <lucabru@src.gnome.org>
Fri, 21 Oct 2011 16:01:39 +0000 (18:01 +0200)
committerJürg Billeter <j@bitron.ch>
Wed, 30 Nov 2011 13:38:16 +0000 (14:38 +0100)
vala/valagirparser.vala

index 3597b2673eb849d2ab96647aaab4c17218ff56e2..f3a47280767aabcf20c032dfa4add403591498ae 100644 (file)
@@ -568,6 +568,22 @@ public class Vala.GirParser : CodeVisitor {
                        }
                }
 
+               public string get_full_name () {
+                       if (parent == null) {
+                               return name;
+                       }
+
+                       if (name == null) {
+                               return parent.get_full_name ();
+                       }
+
+                       if (parent.get_full_name () == null) {
+                               return name;
+                       }
+
+                       return "%s.%s".printf (parent.get_full_name (), name);
+               }
+
                public string get_gir_name () {
                        var gir_name = girdata["name"];
                        if (gir_name == null) {
@@ -743,6 +759,7 @@ public class Vala.GirParser : CodeVisitor {
                                                        // assume method is getter
                                                        merged = true;
                                                } else if (sym is Signal) {
+                                                       node.process (parser);
                                                        var sig = (Signal) sym;
                                                        if (m.is_virtual || m.is_abstract) {
                                                                sig.is_virtual = true;
@@ -750,6 +767,9 @@ public class Vala.GirParser : CodeVisitor {
                                                                sig.set_attribute ("HasEmitter", true);
                                                        }
                                                        parser.assume_parameter_names (sig, m, false);
+                                                       if (m.get_parameters().size != sig.get_parameters().size) {
+                                                               Report.warning (symbol.source_reference, "Signal `%s' conflicts with method of the same name".printf (get_full_name ()));
+                                                       }
                                                        merged = true;
                                                } else if (sym is Method && !(sym is CreationMethod) && node != this) {
                                                        if (m.is_virtual || m.is_abstract) {