]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Map vala symbols to gir symbols when GIR attribute is available
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 3 Aug 2011 23:22:35 +0000 (01:22 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Wed, 3 Aug 2011 23:25:03 +0000 (01:25 +0200)
vala/valagirparser.vala

index c8a74463422980b008fc13d9200804280d20acb9..38f091b9a4d64d590a5f68600376079056e6eedd 100644 (file)
@@ -1051,18 +1051,32 @@ public class Vala.GirParser : CodeVisitor {
 
        void map_vala_to_gir () {
                foreach (var source_file in context.get_source_files ()) {
-                       foreach (var node in source_file.get_nodes ()) {
-                               if (node is Namespace) {
-                                       var ns = (Namespace) node;
-                                       var gir_namespace = source_file.gir_namespace;
-                                       if (gir_namespace == null) {
+                       string gir_namespace = source_file.gir_namespace;
+                       Namespace ns = null;
+                       if (gir_namespace == null) {
+                               foreach (var node in source_file.get_nodes ()) {
+                                       if (node is Namespace) {
+                                               ns = (Namespace) node;
                                                gir_namespace = ns.get_attribute_string ("CCode", "gir_namespace");
+                                               if (gir_namespace != null) {
+                                                       break;
+                                               }
                                        }
-                                       if (gir_namespace != null && gir_namespace != ns.name) {
-                                               var map_from = new UnresolvedSymbol (null, gir_namespace);
-                                               set_symbol_mapping (map_from, ns);
-                                               break;
-                                       }
+                               }
+                       }
+                       if (gir_namespace == null) {
+                               continue;
+                       }
+
+                       var gir_symbol = new UnresolvedSymbol (null, gir_namespace);
+                       if (gir_namespace != ns.name) {
+                               set_symbol_mapping (gir_symbol, ns);
+                       }
+
+                       foreach (var node in source_file.get_nodes ()) {
+                               if (node.has_attribute_argument ("GIR", "name")) {
+                                       var map_from = new UnresolvedSymbol (gir_symbol, node.get_attribute_string ("GIR", "name"));
+                                       set_symbol_mapping (map_from, (Symbol) node);
                                }
                        }
                }