001/**
002 *
003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved.
004 *
005 * This library is free software; you can redistribute it and/or
006 * modify it under the terms of the GNU Lesser General Public
007 * License as published by the Free Software Foundation; either 
008 * version 2.1 of the License, or (at your option) any later version.
009 * 
010 * This library is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013 * Lesser General Public License for more details.
014 * 
015 * You should have received a copy of the GNU Lesser General Public 
016 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
017 * 
018 **/
019package lucee.runtime.type;
020
021import java.io.Serializable;
022
023/**
024 * a function argument definition
025 */
026public interface FunctionArgument extends Serializable {
027
028    public static final int DEFAULT_TYPE_NULL = 0;
029    public static final int DEFAULT_TYPE_LITERAL = 1;
030    public static final int DEFAULT_TYPE_RUNTIME_EXPRESSION = 2;
031        
032    /**
033     * @return Returns the name of the argument.
034     */
035    public abstract Collection.Key getName();
036
037    /**
038     * @return Returns if argument is required or not.
039     */
040    public abstract boolean isRequired();
041
042    /**
043     * @return Returns the type of the argument.
044     */
045    public abstract short getType();
046
047    /**
048     * @return Returns the type of the argument.
049     */
050    public abstract String getTypeAsString();
051
052    /**
053     * @return Returns the Hint of the argument.
054     */
055    public abstract String getHint();
056 
057        /**
058     * @return Returns the Display name of the argument.
059     */
060    public abstract String getDisplayName();
061    
062    /**
063     * @return the default type of the argument
064     */
065    public int getDefaultType();
066    
067
068        /**
069         * @return the meta data defined 
070         */
071        public Struct getMetaData();
072
073        public boolean isPassByReference();
074}