/*
 * @author Ranides Atterwim {@literal <ranides@gmail.com>}
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira
 */
package net.ranides.assira.reflection;

import java.lang.reflect.Parameter;

/**
 * Information about method argument
 *
 * @author Ranides Atterwim {@literal <ranides@gmail.com>}
 */
public interface IArgument extends IElement {
    
    @Override
    IArguments collect();

    /**
     * Returns type of argument
     *
     * @return IClass
     */
    IClass<?> type();

    /**
     * Returns method declaring this argument.
     *
     * @return IExecutable
     */
    @Override
    IExecutable parent();

    /**
     * Optional: returns reflective information about argument
     *
     * @return Parameter
     */
    Parameter reflective();
    
}
