From: Didier 'Ptitjes Date: Sun, 27 Sep 2009 10:30:16 +0000 (+0200) Subject: Support for relative searching of symbols X-Git-Tag: 0.37.1~3^2~579 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e97f21ba63d8e8eca7fd6f5bdde05726e63fc6a7;p=thirdparty%2Fvala.git Support for relative searching of symbols --- diff --git a/src/libvaladoc/apitree/apitree.vala b/src/libvaladoc/apitree/apitree.vala index 904350801..882aa07d2 100644 --- a/src/libvaladoc/apitree/apitree.vala +++ b/src/libvaladoc/apitree/apitree.vala @@ -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 ) { diff --git a/src/libvaladoc/apitree/class.vala b/src/libvaladoc/apitree/class.vala index d5ed8c345..31394325f 100644 --- a/src/libvaladoc/apitree/class.vala +++ b/src/libvaladoc/apitree/class.vala @@ -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 ); diff --git a/src/libvaladoc/apitree/enum.vala b/src/libvaladoc/apitree/enum.vala index b3c714321..ced9728f8 100644 --- a/src/libvaladoc/apitree/enum.vala +++ b/src/libvaladoc/apitree/enum.vala @@ -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; diff --git a/src/libvaladoc/apitree/errordomain.vala b/src/libvaladoc/apitree/errordomain.vala index b0190e834..180e69bfb 100644 --- a/src/libvaladoc/apitree/errordomain.vala +++ b/src/libvaladoc/apitree/errordomain.vala @@ -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 ); diff --git a/src/libvaladoc/apitree/interface.vala b/src/libvaladoc/apitree/interface.vala index 0bab14076..4dd7ce5d5 100644 --- a/src/libvaladoc/apitree/interface.vala +++ b/src/libvaladoc/apitree/interface.vala @@ -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 ); diff --git a/src/libvaladoc/apitree/namespace.vala b/src/libvaladoc/apitree/namespace.vala index 904b64f06..053322466 100644 --- a/src/libvaladoc/apitree/namespace.vala +++ b/src/libvaladoc/apitree/namespace.vala @@ -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; diff --git a/src/libvaladoc/apitree/struct.vala b/src/libvaladoc/apitree/struct.vala index 28e5d6911..7996ea24b 100644 --- a/src/libvaladoc/apitree/struct.vala +++ b/src/libvaladoc/apitree/struct.vala @@ -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 );