]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
gtkmodule: Recurse inner classes of ObjectTypeSymbols
authorRico Tzschichholz <ricotz@ubuntu.com>
Tue, 8 Feb 2022 23:05:24 +0000 (00:05 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 16 Feb 2022 17:47:39 +0000 (18:47 +0100)
codegen/valagtkmodule.vala

index a8b0d31c0dfd131ee39ac58e5b212500488b0a38..16442f621a462b7b5f06a1189ae89914a76c5e0f 100644 (file)
@@ -45,8 +45,19 @@ public class Vala.GtkModule : GSignalModule {
                recurse_type_id_to_vala_map (context.root);
        }
 
-       private void recurse_type_id_to_vala_map (Namespace ns) {
-               foreach (var cl in ns.get_classes()) {
+       private void recurse_type_id_to_vala_map (Symbol sym) {
+               unowned List<Class> classes;
+               if (sym is Namespace) {
+                       foreach (var inner in ((Namespace) sym).get_namespaces()) {
+                               recurse_type_id_to_vala_map (inner);
+                       }
+                       classes = ((Namespace) sym).get_classes ();
+               } else if (sym is ObjectTypeSymbol) {
+                       classes = ((ObjectTypeSymbol) sym).get_classes ();
+               } else {
+                       return;
+               }
+               foreach (var cl in classes) {
                        if (!cl.is_compact) {
                                var type_id = get_ccode_type_id (cl);
                                if (type_id == null)
@@ -60,9 +71,7 @@ public class Vala.GtkModule : GSignalModule {
                                }
                                type_id_to_vala_map.set (type_id, cl);
                        }
-               }
-               foreach (var inner in ns.get_namespaces()) {
-                       recurse_type_id_to_vala_map (inner);
+                       recurse_type_id_to_vala_map (cl);
                }
        }
 
@@ -75,14 +84,23 @@ public class Vala.GtkModule : GSignalModule {
                recurse_cclass_to_vala_map (context.root);
        }
 
-       private void recurse_cclass_to_vala_map (Namespace ns) {
-               foreach (var cl in ns.get_classes()) {
+       private void recurse_cclass_to_vala_map (Symbol sym) {
+               unowned List<Class> classes;
+               if (sym is Namespace) {
+                       foreach (var inner in ((Namespace) sym).get_namespaces()) {
+                               recurse_cclass_to_vala_map (inner);
+                       }
+                       classes = ((Namespace) sym).get_classes ();
+               } else if (sym is ObjectTypeSymbol) {
+                       classes = ((ObjectTypeSymbol) sym).get_classes ();
+               } else {
+                       return;
+               }
+               foreach (var cl in classes) {
                        if (!cl.is_compact) {
                                cclass_to_vala_map.set (get_ccode_name (cl), cl);
                        }
-               }
-               foreach (var inner in ns.get_namespaces()) {
-                       recurse_cclass_to_vala_map (inner);
+                       recurse_cclass_to_vala_map (cl);
                }
        }