]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Support for relative searching of symbols
authorDidier 'Ptitjes <ptitjes@free.fr>
Sun, 27 Sep 2009 10:30:16 +0000 (12:30 +0200)
committerDidier 'Ptitjes <ptitjes@free.fr>
Sun, 27 Sep 2009 12:13:58 +0000 (14:13 +0200)
src/libvaladoc/apitree/apitree.vala
src/libvaladoc/apitree/class.vala
src/libvaladoc/apitree/enum.vala
src/libvaladoc/apitree/errordomain.vala
src/libvaladoc/apitree/interface.vala
src/libvaladoc/apitree/namespace.vala
src/libvaladoc/apitree/struct.vala

index 90435080169455f9bbfa7aedc5c84d2f8c46bdf5..882aa07d2299152a25d67b3ab618f60dd3f5312d 100644 (file)
@@ -61,19 +61,18 @@ public class Valadoc.Tree : Vala.CodeVisitor {
        }
 
        private DocumentedElement? search_symbol_in_type ( DocumentedElement element, string[] params, int params_offset = 0 ) {
-               if (!(element.parent is Enum || element.parent is ErrorDomain))
-                       return null;
-
+               string[] nparams = null;
                if ( params[0] != "this" ) {
-                       string[] nparams = new string[ params.length+1 ];
+                       nparams = new string[ params.length+1 ];
                        nparams[0] = "this";
                        for ( int i = 0; params.length > i ; i++ ) {
                                nparams [i+1] = params[i];
                        }
-                       return this.search_symbol_in_symbol ( (DocumentedElement)element.parent, nparams, 0 );
+               } else {
+                       nparams = params;
                }
 
-               return this.search_symbol_in_symbol ( (DocumentedElement)element.parent, params, 0 );
+               return this.search_symbol_in_symbol (element, nparams, 0);
        }
 
        private DocumentedElement? search_symbol_in_symbol ( DocumentedElement element, string[] params, int params_offset = 0 ) {
@@ -118,6 +117,11 @@ public class Valadoc.Tree : Vala.CodeVisitor {
        }
 
        private DocumentedElement? search_element ( DocumentedElement? element, string[] params ) {
+               if (element is Field || element is Method || element is Delegate
+                   || element is Signal || element is Property || element is Constant) {
+                   element = (DocumentedElement) element.parent;
+               }
+
                if ( element != null ) {
                        if ( params[0] == "this" ) {
                                return search_symbol_in_type ( element, params, 1 );
@@ -140,11 +144,20 @@ public class Valadoc.Tree : Vala.CodeVisitor {
        }
 
        public DocumentedElement? search_symbol_str ( DocumentedElement? element, string symname ) {
+               var result = this.search_element (element, split_name (symname));
+               while (result == null && element.parent != null) {
+                       var parent_name = element.name;
+                       result = this.search_element ( element, split_name (parent_name + "." + symname) );
+                       element = (DocumentedElement) element.parent;
+               }
+               return result;
+       }
+
+       private string[] split_name (string symname) {
                string[] params = symname.split( ".", -1 );
                int i = 0; while ( params[i] != null ) i++;
                params.length = i;
-
-               return this.search_element ( element, params );
+               return params;
        }
 
        public override void visit_namespace ( Vala.Namespace vns ) {
index d5ed8c3459d6e7d851c6176c8e8f2152453e4ea5..31394325fde8960efa0a09cd87799e5893db9b68 100644 (file)
@@ -207,7 +207,7 @@ public class Valadoc.Class : DocumentedElement, SymbolAccessibility, Visitable,
                if ( !(this.name == params[pos] || params[0] == "this") )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
                DocumentedElement? element = this.search_field ( params, pos );
index b3c7143212edc73802d05d14076c6897670b17f6..ced9728f83c81d4b59a1070b19833b21d82697cc 100644 (file)
@@ -105,7 +105,7 @@ public class Valadoc.Enum : DocumentedElement, SymbolAccessibility, Visitable, M
                if ( this.name != params[pos] )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
 
index b0190e834865fcd543b20d1160ec3a580c011a2f..180e69bfb575c4731bc5294eb7efda2dedbddb53 100644 (file)
@@ -114,7 +114,7 @@ public class Valadoc.ErrorDomain : DocumentedElement, SymbolAccessibility, Visit
                if ( this.name != params[pos] )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
                DocumentedElement? element = this.search_method ( params, pos );
index 0bab14076b26ca11ce9b2f410b474f8af413c867..4dd7ce5d5f8f3cd20c5e8bfa0c07288b7425ccf8 100644 (file)
@@ -180,7 +180,7 @@ public class Valadoc.Interface : DocumentedElement, SymbolAccessibility, Visitab
                if ( !(this.name == params[pos] || params[0] == "this") )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
                DocumentedElement? element = this.search_field ( params, pos );
index 904b64f06b1accd179f7f40d5d3baac853d5880a..053322466045765d6e65455f07c297d705e38b3e 100644 (file)
@@ -138,7 +138,7 @@ public class Valadoc.Namespace : DocumentedElement, MethodHandler, FieldHandler,
                if ( this.name != params[pos] )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
 
index 28e5d69115eefd76eebb0e25ad0d291c818f9878..7996ea24b64e1734cf3e2febde34f4b45e755f17 100644 (file)
@@ -123,7 +123,7 @@ public class Valadoc.Struct : DocumentedElement, SymbolAccessibility, Visitable,
                if ( this.name != params[pos] )
                        return null;
 
-               if ( params[pos+1] == null )
+               if ( params[pos] == this.name && params[pos+1] == null )
                        return this;
 
                DocumentedElement? element = this.search_field ( params, pos );