001    /*
002     * Copyright 2005-2006 Sun Microsystems, Inc.  All Rights Reserved.
003     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004     *
005     * This code is free software; you can redistribute it and/or modify it
006     * under the terms of the GNU General Public License version 2 only, as
007     * published by the Free Software Foundation.  Sun designates this
008     * particular file as subject to the "Classpath" exception as provided
009     * by Sun in the LICENSE file that accompanied this code.
010     *
011     * This code is distributed in the hope that it will be useful, but WITHOUT
012     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014     * version 2 for more details (a copy is included in the LICENSE file that
015     * accompanied this code).
016     *
017     * You should have received a copy of the GNU General Public License version
018     * 2 along with this work; if not, write to the Free Software Foundation,
019     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020     *
021     * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022     * CA 95054 USA or visit www.sun.com if you need additional information or
023     * have any questions.
024     */
025    
026    package javax.lang.model.element;
027    
028    import java.util.List;
029    import javax.lang.model.util.Types;
030    import javax.lang.model.type.*;
031    
032    /**
033     * Represents a method, constructor, or initializer (static or
034     * instance) of a class or interface, including annotation type
035     * elements.
036     *
037     * @author Joseph D. Darcy
038     * @author Scott Seligman
039     * @author Peter von der Ahé
040     * @see ExecutableType
041     * @since 1.6
042     */
043    public interface ExecutableElement extends Element {
044        /**
045         * Returns the formal type parameters of this executable
046         * in declaration order.
047         *
048         * @return the formal type parameters, or an empty list
049         * if there are none
050         */
051        List<? extends TypeParameterElement> getTypeParameters();
052    
053        /**
054         * Returns the return type of this executable.
055         * Returns a {@link NoType} with kind {@link TypeKind#VOID VOID}
056         * if this executable is not a method, or is a method that does not
057         * return a value.
058         *
059         * @return the return type of this executable
060         */
061        TypeMirror getReturnType();
062    
063        /**
064         * Returns the formal parameters of this executable.
065         * They are returned in declaration order.
066         *
067         * @return the formal parameters,
068         * or an empty list if there are none
069         */
070        List<? extends VariableElement> getParameters();
071    
072        /**
073         * Returns {@code true} if this method or constructor accepts a variable
074         * number of arguments and returns {@code false} otherwise.
075         *
076         * @return {@code true} if this method or constructor accepts a variable
077         * number of arguments and {@code false} otherwise
078         */
079        boolean isVarArgs();
080    
081        /**
082         * Returns the exceptions and other throwables listed in this
083         * method or constructor's {@code throws} clause in declaration
084         * order.
085         *
086         * @return the exceptions and other throwables listed in the
087         * {@code throws} clause, or an empty list if there are none
088         */
089        List<? extends TypeMirror> getThrownTypes();
090    
091        /**
092         * Returns the default value if this executable is an annotation
093         * type element.  Returns {@code null} if this method is not an
094         * annotation type element, or if it is an annotation type element
095         * with no default value.
096         *
097         * @return the default value, or {@code null} if none
098         */
099        AnnotationValue getDefaultValue();
100    }