diff options
Diffstat (limited to 'libvaladoc/api/delegate.vala')
-rw-r--r-- | libvaladoc/api/delegate.vala | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/libvaladoc/api/delegate.vala b/libvaladoc/api/delegate.vala new file mode 100644 index 000000000..9db4d9f10 --- /dev/null +++ b/libvaladoc/api/delegate.vala @@ -0,0 +1,142 @@ +/* delegate.vala + * + * Copyright (C) 2008-2011 Florian Brosch + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * Florian Brosch <flo.brosch@gmail.com> + */ + + +using Valadoc.Content; + + +/** + * Represents a Delegate. + */ +public class Valadoc.Api.Delegate : TypeSymbol, Callable { + private string? cname; + + /** + * {@inheritDoc} + */ + internal string? implicit_array_length_cparameter_name { + get; + set; + } + + + public Delegate (Node parent, SourceFile file, string name, SymbolAccessibility accessibility, + SourceComment? comment, string? cname, bool is_static, void* data) + { + base (parent, file, name, accessibility, comment, null, null, null, null, false, data); + + this.is_static = is_static; + this.cname = cname; + } + + /** + * Returns the name of this delegate as it is used in C. + */ + public string? get_cname () { + return cname; + } + + /** + * {@inheritDoc} + */ + public TypeReference? return_type { + set; + get; + } + + /** + * {@inheritDoc} + */ + public override NodeType node_type { + get { return NodeType.DELEGATE; } + } + + /** + * {@inheritDoc} + */ + public override void accept (Visitor visitor) { + visitor.visit_delegate (this); + } + + /** + * Specifies whether this delegate is static + */ + public bool is_static { + private set; + get; + } + + /** + * {@inheritDoc} + */ + protected override Inline build_signature () { + var signature = new SignatureBuilder (); + + signature.append_keyword (accessibility.to_string ()); + signature.append_keyword ("delegate"); + signature.append_content (return_type.signature); + signature.append_symbol (this); + + var type_parameters = get_children_by_type (NodeType.TYPE_PARAMETER); + if (type_parameters.size > 0) { + signature.append ("<", false); + bool first = true; + foreach (Item param in type_parameters) { + if (!first) { + signature.append (",", false); + } + signature.append_content (param.signature, false); + first = false; + } + signature.append (">", false); + } + + signature.append ("("); + + bool first = true; + foreach (Node param in get_children_by_type (NodeType.FORMAL_PARAMETER, false)) { + if (!first) { + signature.append (",", false); + } + signature.append_content (param.signature, !first); + first = false; + } + + signature.append (")", false); + + var exceptions = get_children_by_types ({NodeType.ERROR_DOMAIN, NodeType.CLASS}); + if (exceptions.size > 0) { + signature.append_keyword ("throws"); + first = true; + foreach (Node param in exceptions) { + if (!first) { + signature.append (",", false); + } + signature.append_type (param); + first = false; + } + } + + return signature.get (); + } +} + |