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

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Map;
import net.ranides.assira.collection.maps.OrderedMap;
import net.ranides.assira.collection.query.CQuery;
import net.ranides.assira.reflection.impl.FElements;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface IArguments extends IElements<IArgument> {
    
    IClasses types();
    
    @Override
    IMethods parent();
    
    Map<String, IArgument> map();
    
    CQuery<Parameter> reflective();
    
    static IArguments typeinfo(Method method) {
        return IMethod.typeinfo(method).arguments();
    }
    
    static IArguments typeinfo(Constructor<?> method) {
        return IMethod.typeinfo(method).arguments();
    }
    
    static IArguments typeinfo(IClass<?>... types) {
        return FElements.newArguments(types);
    }
    
    static IArguments typeinfo(Class<?>... types) {
        return FElements.newArguments(types);
    }
    
    static IArguments typeinfo(OrderedMap<String, IClass<?>> arguments) {
        return FElements.newArguments(arguments);
    }
    
}
